Name: series-workflowjdt6p Phase: Succeeded StartedAt: 2026-09-07 00:22:14 +0000 UTC FinishedAt: 2026-09-07 04:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[0] Phase: Succeeded StartedAt: 2026-09-07 00:22:14 +0000 UTC FinishedAt: 2026-09-07 00:24:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 00:22:14 +0000 UTC FinishedAt: 2026-09-07 00:24:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD", "BLK_DEV_MD", "MD_BITMAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD", "BLK_DEV_MD", "MD_BITMAP" ], "series_id": "2f40b633-e673-4a59-8001-b17a1ddde93b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "location_store", "md_bitmap_sysfs_del", "mddev_unlock", "md_bitmap_destroy", "md_bitmap_set_none", "set_bitmap_file", "update_array_info" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01EJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7TURfQklUTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYXRpb25fc3RvcmUmIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX3N5c2ZzX2RlbCYjMzQ7LAogICAgJiMzNDttZGRldl91bmxvY2smIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX3NldF9ub25lJiMzNDssCiAgICAmIzM0O3NldF9iaXRtYXBfZmlsZSYjMzQ7LAogICAgJiMzNDt1cGRhdGVfYXJyYXlfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5c2ZzIGF0dHJpYnV0ZSBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgbG9naWMgaW4gdGhlIE1EIChTb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gbWFuaXB1bGF0aW5nIHN5c2ZzIGZpbGVzIHVuZGVyIG1kZGV2LVx1MDAzZXJlY29uZmlnX211dGV4LiBTcGVjaWZpY2FsbHksIGl0IGRlZmVycyBzeXNmcyBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgYnkgcmVjb3JkaW5nIHBvaW50ZXJzICh0b191bm1lcmdlIGFuZCB0b19yZW1vdmVfZ3JvdXBzKSBpbiBzdHJ1Y3QgbWRkZXYgYW5kIHBlcmZvcm1pbmcgdGhlIG9wZXJhdGlvbnMgaW4gbWRkZXZfdW5sb2NrKCkgYWZ0ZXIgcmVsZWFzaW5nIHJlY29uZmlnX211dGV4LlxuXG5zdHJ1Y3QgbWRkZXYgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvYywgYW5kIHRoZSBuZXcgcG9pbnRlciBmaWVsZHMgYXJlIHByb3Blcmx5IG1hbmFnZWQgYW5kIGNsZWFyZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBkYXRhIGJ1ZmZlcnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIGRlcmVmZXJlbmNpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBpbiBkcml2ZXJzL21kL21kLmMgYW5kIGRyaXZlcnMvbWQvbWQtYml0bWFwLmMsIGFkanVzdGluZyBob3cgYml0bWFwIHN5c2ZzIGF0dHJpYnV0ZSBncm91cHMgYXJlIHVubWVyZ2VkIGFuZCByZW1vdmVkIGR1cmluZyBtZGRldl91bmxvY2ssIGxvY2F0aW9uX3N0b3JlLCBtZF9iaXRtYXBfZGVzdHJveSwgYW5kIG1kX2JpdG1hcF9zZXRfbm9uZSB0byBwcmV2ZW50IGxvY2svc3lzZnMgZGVhZGxvY2tzIGFuZCByYWNlcy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1kIHN5c2ZzIGF0dHJpYnV0ZXMgYW5kIGlvY3RscyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlhMDQ0YjAyZDM0ZDNlMjFmMTU5NmJiNjM3MmQzMzE4Y2I0YzlhYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAwOjIzOjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQtYml0bWFwLmMgYi9kcml2ZXJzL21kL21kLWJpdG1hcC5jXG5pbmRleCBiODMyNWNiMDlhMzcxLi4zYTk3YWE0NjNlY2NmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC1iaXRtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC1iaXRtYXAuY1xuQEAgLTI2MzgsNiAmIzQzOzI2MzgsMTEgQEAgbG9jYXRpb25fc3RvcmUoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0XHRyZXR1cm4gcnY7XG4gXHRub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG4gXG4mIzQzO1x0aWYgKG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSkge1xuJiM0MztcdFx0cnYgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMpIHtcbiBcdFx0aWYgKG1kZGV2LVx1MDAzZXJlY292ZXJ5IHx8IG1kZGV2LVx1MDAzZXN5bmNfdGhyZWFkKSB7XG4gXHRcdFx0cnYgPSAtRUJVU1k7XG5AQCAtMjY1Myw3ICYjNDM7MjY1OCw3IEBAIGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIFx1MDAyNm1kX2JpdG1hcF9pbnRlcm5hbF9ncm91cCk7XG4mIzQzO1x0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gXHUwMDI2bWRfYml0bWFwX2ludGVybmFsX2dyb3VwO1xuIFx0XHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcbiBcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7XG4gXHRcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jXG5pbmRleCA2ODBiMzRhNjNjYjNkLi5lODNjYWVjMDk2M2M1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmNcbkBAIC02OTQsMTcgJiM0Mzs2OTQsMjAgQEAgc3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldilcbiYjNDM7c3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2RlbChzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNvbnN0ICpncm91cHMpXG4ge1xuIFx0aW50IG5yX2dyb3VwcyA9IDA7XG4gXG4tXHRmb3IgKG5yX2dyb3VwcyA9IDA7IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcyYjNDM7JiM0MzspXG4mIzQzO1x0aWYgKCFncm91cHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcyYjNDM7JiM0MzspXG4gXHRcdDtcbiBcbiBcdHdoaWxlICgtLW5yX2dyb3VwcyBcdTAwM2U9IDEpXG4tXHRcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaixcbi1cdFx0XHRcdCAgICBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1tucl9ncm91cHNdKTtcbi1cdHN5c2ZzX3JlbW92ZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1swXSk7XG4mIzQzO1x0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIGdyb3Vwc1tucl9ncm91cHNdKTtcbiYjNDM7XHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgZ3JvdXBzWzBdKTtcbiB9XG4gXG4gYm9vbCBtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpXG5AQCAtOTIxLDcgJiM0Mzs5MjQsNyBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm1kZGV2LVx1MDAzZWRlbGV0aW5nKSlcbiBcdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZtZGRldi1cdTAwM2VkZWxldGluZywgXHUwMDI2ZGVsZXRlKTtcbiBcbi1cdGlmIChtZGRldi1cdTAwM2V0b19yZW1vdmUpIHtcbiYjNDM7XHRpZiAobWRkZXYtXHUwMDNldG9fcmVtb3ZlIHx8IG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgfHwgbWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3Vwcykge1xuIFx0XHQvKiBUaGVzZSBjYW5ub3QgYmUgcmVtb3ZlZCB1bmRlciByZWNvbmZpZ19tdXRleCBhc1xuIFx0XHQgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXhcbiBcdFx0ICogd2hpbGUgaG9sZGluZyB0aGUgZmlsZSB1bnJlbW92YWJsZSwgd2hpY2ggbGVhZHMgdG9cbkBAIC05MzUsMTIgJiM0Mzs5MzgsMjEgQEAgdm9pZCBtZGRldl91bmxvY2soc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0ICogaXMgc2Vlbi5cbiBcdFx0ICovXG4gXHRcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3JlbW92ZSA9IG1kZGV2LVx1MDAzZXRvX3JlbW92ZTtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3VubWVyZ2UgPSBtZGRldi1cdTAwM2V0b191bm1lcmdlO1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzO1xuJiM0MztcbiBcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlID0gTlVMTDtcbiYjNDM7XHRcdG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgPSBOVUxMO1xuJiM0MztcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IE5VTEw7XG4gXHRcdG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSA9IDE7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGRldi1cdTAwM2VyZWNvbmZpZ19tdXRleCk7XG4gXG4gXHRcdGlmIChtZGRldi1cdTAwM2Vrb2JqLnNkKSB7XG4tXHRcdFx0aWYgKHRvX3JlbW92ZSAhPSBcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKVxuJiM0MztcdFx0XHRpZiAodG9fdW5tZXJnZSlcbiYjNDM7XHRcdFx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIHRvX3VubWVyZ2UpO1xuJiM0MztcdFx0XHRpZiAodG9fcmVtb3ZlX2dyb3VwcylcbiYjNDM7XHRcdFx0XHRtZF9iaXRtYXBfc3lzZnNfZGVsKG1kZGV2LCB0b19yZW1vdmVfZ3JvdXBzKTtcbiYjNDM7XHRcdFx0aWYgKHRvX3JlbW92ZSBcdTAwMjZcdTAwMjYgdG9fcmVtb3ZlICE9IFx1MDAyNm1kX3JlZHVuZGFuY3lfZ3JvdXApXG4gXHRcdFx0XHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgdG9fcmVtb3ZlKTtcbiBcdFx0XHRpZiAobWRkZXYtXHUwMDNlcGVycyA9PSBOVUxMIHx8XG4gXHRcdFx0ICAgIG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0ID09IE5VTEwpIHtcbkBAIC02NjMyLDEzICYjNDM7NjY0NCwxOSBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfZGVzdHJveShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIHtcbiBcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzKVxuLVx0XHRtZF9iaXRtYXBfc3lzZnNfZGVsKG1kZGV2KTtcbiYjNDM7XHRcdG1kZGV2LVx1MDAzZXRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3VwcztcbiBcbiBcdG1kX2JpdG1hcF9kZXN0cm95X25vc3lzZnMobWRkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc2V0X25vbmUoc3RydWN0IG1kZGV2ICptZGRldilcbiB7XG4mIzQzO1x0aWYgKCFtZGRldl9pc19kbShtZGRldikgXHUwMDI2XHUwMDI2IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1sxXSlcbiYjNDM7XHRcdG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgPSBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1sxXTtcbiYjNDM7XG4mIzQzO1x0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XG4mIzQzO1xuIFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7XG4gXHRpZiAoIW1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMobWRkZXYpKVxuIFx0XHRyZXR1cm47XG5AQCAtNzg2OCwxMiAmIzQzOzc4ODYsMTAgQEAgc3RhdGljIGludCBzZXRfYml0bWFwX2ZpbGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZkKVxuIFx0XHRcdFx0ZXJyID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vsb2FkKG1kZGV2KTtcbiBcbiBcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuIFx0XHRcdFx0ZmQgPSAtMTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoZmQgXHUwMDNjIDApIHtcbi1cdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0fVxuIFx0fVxuQEAgLTgxODcsNyAmIzQzOzgyMDMsNiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIG1kdV9hcnJheV9pbmZvX3QgKmluZm8pXG4gXHRcdFx0XHRydiA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlbG9hZChtZGRldik7XG4gXG4gXHRcdFx0aWYgKHJ2KSB7XG4tXHRcdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0XHRtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xuIFx0XHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0XHR9XG5AQCAtODIxNiw3ICYjNDM7ODIzMSw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbylcbiBcdFx0XHRcdHB1dF9jbHVzdGVyX29wcyhtZGRldik7XG4gXHRcdFx0XHRtZGRldi1cdTAwM2VzYWZlbW9kZV9kZWxheSA9IERFRkFVTFRfU0FGRU1PREVfREVMQVk7XG4gXHRcdFx0fVxuLVx0XHRcdG1kX2JpdG1hcF9kZXN0cm95KG1kZGV2KTtcbiBcdFx0XHRtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xuIFx0XHRcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmhcbmluZGV4IGI2ZDJlODkyOWEwZjkuLmM4NjJkNjUxOWI4MWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQuaFxuQEAgLTYwOCw2ICYjNDM7NjA4LDggQEAgc3RydWN0IG1kZGV2IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0YWxsX21kZGV2cztcbiBcbiBcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXBcdCp0b19yZW1vdmU7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cFx0KnRvX3VubWVyZ2U7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cFx0KmNvbnN0ICp0b19yZW1vdmVfZ3JvdXBzO1xuIFxuIFx0c3RydWN0IGJpb19zZXRcdFx0XHRiaW9fc2V0O1xuIFx0c3RydWN0IGJpb19zZXRcdFx0XHRzeW5jX3NldDsgLyogZm9yIHN5bmMgb3BlcmF0aW9ucyBsaWtlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9NRCYjMzQ7LAogICAgJiMzNDtNRF9CSVRNQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb2NhdGlvbl9zdG9yZSYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfc3lzZnNfZGVsJiMzNDssCiAgICAmIzM0O21kZGV2X3VubG9jayYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfZGVzdHJveSYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfc2V0X25vbmUmIzM0OywKICAgICYjMzQ7c2V0X2JpdG1hcF9maWxlJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9hcnJheV9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGluIGRyaXZlcnMvbWQvbWQuYyBhbmQgZHJpdmVycy9tZC9tZC1iaXRtYXAuYywgYWRqdXN0aW5nIGhvdyBiaXRtYXAgc3lzZnMgYXR0cmlidXRlIGdyb3VwcyBhcmUgdW5tZXJnZWQgYW5kIHJlbW92ZWQgZHVyaW5nIG1kZGV2X3VubG9jaywgbG9jYXRpb25fc3RvcmUsIG1kX2JpdG1hcF9kZXN0cm95LCBhbmQgbWRfYml0bWFwX3NldF9ub25lIHRvIHByZXZlbnQgbG9jay9zeXNmcyBkZWFkbG9ja3MgYW5kIHJhY2VzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWQgc3lzZnMgYXR0cmlidXRlcyBhbmQgaW9jdGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWEwNDRiMDJkMzRkM2UyMWYxNTk2YmI2MzcyZDMzMThjYjRjOWFhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDA6MjM6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWJpdG1hcC5jIGIvZHJpdmVycy9tZC9tZC1iaXRtYXAuYwppbmRleCBiODMyNWNiMDlhMzcxLi4zYTk3YWE0NjNlY2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLWJpdG1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtYml0bWFwLmMKQEAgLTI2MzgsNiAmIzQzOzI2MzgsMTEgQEAgbG9jYXRpb25fc3RvcmUoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCQlyZXR1cm4gcnY7CiAJbm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpOwogCiYjNDM7CWlmIChtZGRldi0mZ3Q7c3lzZnNfYWN0aXZlKSB7CiYjNDM7CQlydiA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJaWYgKG1kZGV2LSZndDtwZXJzKSB7CiAJCWlmIChtZGRldi0mZ3Q7cmVjb3ZlcnkgfHwgbWRkZXYtJmd0O3N5bmNfdGhyZWFkKSB7CiAJCQlydiA9IC1FQlVTWTsKQEAgLTI2NTMsNyAmIzQzOzI2NTgsNyBAQCBsb2NhdGlvbl9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXN5c2ZzX3VubWVyZ2VfZ3JvdXAoJmFtcDttZGRldi0mZ3Q7a29iaiwgJmFtcDttZF9iaXRtYXBfaW50ZXJuYWxfZ3JvdXApOwomIzQzOwkJbWRkZXYtJmd0O3RvX3VubWVyZ2UgPSAmYW1wO21kX2JpdG1hcF9pbnRlcm5hbF9ncm91cDsKIAkJbWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7CiAJCW1kZGV2LSZndDtiaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTsKIAkJaWYgKCFtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKG1kZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCA2ODBiMzRhNjNjYjNkLi5lODNjYWVjMDk2M2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5jCkBAIC02OTQsMTcgJiM0Mzs2OTQsMjAgQEAgc3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCQlrb2JqZWN0X3VldmVudCgmYW1wO21kZGV2LSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldikKJiM0MztzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfZGVsKHN0cnVjdCBtZGRldiAqbWRkZXYsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNvbnN0ICpncm91cHMpCiB7CiAJaW50IG5yX2dyb3VwcyA9IDA7CiAKLQlmb3IgKG5yX2dyb3VwcyA9IDA7IG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtncm91cHNbbnJfZ3JvdXBzXTsgbnJfZ3JvdXBzJiM0MzsmIzQzOykKJiM0MzsJaWYgKCFncm91cHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcyYjNDM7JiM0MzspCiAJCTsKIAogCXdoaWxlICgtLW5yX2dyb3VwcyAmZ3Q7PSAxKQotCQlzeXNmc191bm1lcmdlX2dyb3VwKCZhbXA7bWRkZXYtJmd0O2tvYmosCi0JCQkJICAgIG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtncm91cHNbbnJfZ3JvdXBzXSk7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZhbXA7bWRkZXYtJmd0O2tvYmosIG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtncm91cHNbMF0pOwomIzQzOwkJc3lzZnNfdW5tZXJnZV9ncm91cCgmYW1wO21kZGV2LSZndDtrb2JqLCBncm91cHNbbnJfZ3JvdXBzXSk7CiYjNDM7CXN5c2ZzX3JlbW92ZV9ncm91cCgmYW1wO21kZGV2LSZndDtrb2JqLCBncm91cHNbMF0pOwogfQogCiBib29sIG1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldikKQEAgLTkyMSw3ICYjNDM7OTI0LDcgQEAgdm9pZCBtZGRldl91bmxvY2soc3RydWN0IG1kZGV2ICptZGRldikKIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDttZGRldi0mZ3Q7ZGVsZXRpbmcpKQogCQlsaXN0X3NwbGljZV9pbml0KCZhbXA7bWRkZXYtJmd0O2RlbGV0aW5nLCAmYW1wO2RlbGV0ZSk7CiAKLQlpZiAobWRkZXYtJmd0O3RvX3JlbW92ZSkgewomIzQzOwlpZiAobWRkZXYtJmd0O3RvX3JlbW92ZSB8fCBtZGRldi0mZ3Q7dG9fdW5tZXJnZSB8fCBtZGRldi0mZ3Q7dG9fcmVtb3ZlX2dyb3VwcykgewogCQkvKiBUaGVzZSBjYW5ub3QgYmUgcmVtb3ZlZCB1bmRlciByZWNvbmZpZ19tdXRleCBhcwogCQkgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXgKIAkJICogd2hpbGUgaG9sZGluZyB0aGUgZmlsZSB1bnJlbW92YWJsZSwgd2hpY2ggbGVhZHMgdG8KQEAgLTkzNSwxMiAmIzQzOzkzOCwyMSBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCQkgKiBpcyBzZWVuLgogCQkgKi8KIAkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdG9fcmVtb3ZlID0gbWRkZXYtJmd0O3RvX3JlbW92ZTsKJiM0MzsJCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3VubWVyZ2UgPSBtZGRldi0mZ3Q7dG9fdW5tZXJnZTsKJiM0MzsJCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNvbnN0ICp0b19yZW1vdmVfZ3JvdXBzID0gbWRkZXYtJmd0O3RvX3JlbW92ZV9ncm91cHM7CiYjNDM7CiAJCW1kZGV2LSZndDt0b19yZW1vdmUgPSBOVUxMOwomIzQzOwkJbWRkZXYtJmd0O3RvX3VubWVyZ2UgPSBOVUxMOwomIzQzOwkJbWRkZXYtJmd0O3RvX3JlbW92ZV9ncm91cHMgPSBOVUxMOwogCQltZGRldi0mZ3Q7c3lzZnNfYWN0aXZlID0gMTsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7bWRkZXYtJmd0O3JlY29uZmlnX211dGV4KTsKIAogCQlpZiAobWRkZXYtJmd0O2tvYmouc2QpIHsKLQkJCWlmICh0b19yZW1vdmUgIT0gJmFtcDttZF9yZWR1bmRhbmN5X2dyb3VwKQomIzQzOwkJCWlmICh0b191bm1lcmdlKQomIzQzOwkJCQlzeXNmc191bm1lcmdlX2dyb3VwKCZhbXA7bWRkZXYtJmd0O2tvYmosIHRvX3VubWVyZ2UpOwomIzQzOwkJCWlmICh0b19yZW1vdmVfZ3JvdXBzKQomIzQzOwkJCQltZF9iaXRtYXBfc3lzZnNfZGVsKG1kZGV2LCB0b19yZW1vdmVfZ3JvdXBzKTsKJiM0MzsJCQlpZiAodG9fcmVtb3ZlICZhbXA7JmFtcDsgdG9fcmVtb3ZlICE9ICZhbXA7bWRfcmVkdW5kYW5jeV9ncm91cCkKIAkJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmFtcDttZGRldi0mZ3Q7a29iaiwgdG9fcmVtb3ZlKTsKIAkJCWlmIChtZGRldi0mZ3Q7cGVycyA9PSBOVUxMIHx8CiAJCQkgICAgbWRkZXYtJmd0O3BlcnMtJmd0O3N5bmNfcmVxdWVzdCA9PSBOVUxMKSB7CkBAIC02NjMyLDEzICYjNDM7NjY0NCwxOSBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfZGVzdHJveShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogewogCWlmICghbWRkZXZfaXNfZG0obWRkZXYpICZhbXA7JmFtcDsgbWRkZXYtJmd0O2JpdG1hcF9vcHMgJmFtcDsmYW1wOwogCSAgICBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7Z3JvdXBzKQotCQltZF9iaXRtYXBfc3lzZnNfZGVsKG1kZGV2KTsKJiM0MzsJCW1kZGV2LSZndDt0b19yZW1vdmVfZ3JvdXBzID0gbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3VwczsKIAogCW1kX2JpdG1hcF9kZXN0cm95X25vc3lzZnMobWRkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc2V0X25vbmUoc3RydWN0IG1kZGV2ICptZGRldikKIHsKJiM0MzsJaWYgKCFtZGRldl9pc19kbShtZGRldikgJmFtcDsmYW1wOyBtZGRldi0mZ3Q7Yml0bWFwX29wcyAmYW1wOyZhbXA7CiYjNDM7CSAgICBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7Z3JvdXBzICZhbXA7JmFtcDsgbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3Vwc1sxXSkKJiM0MzsJCW1kZGV2LSZndDt0b191bm1lcmdlID0gbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3Vwc1sxXTsKJiM0MzsKJiM0MzsJbWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7CiYjNDM7CiAJbWRkZXYtJmd0O2JpdG1hcF9pZCA9IElEX0JJVE1BUF9OT05FOwogCWlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpCiAJCXJldHVybjsKQEAgLTc4NjgsMTIgJiM0Mzs3ODg2LDEwIEBAIHN0YXRpYyBpbnQgc2V0X2JpdG1hcF9maWxlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCBmZCkKIAkJCQllcnIgPSBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7bG9hZChtZGRldik7CiAKIAkJCWlmIChlcnIpIHsKLQkJCQltZF9iaXRtYXBfZGVzdHJveShtZGRldik7CiAJCQkJbWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTsKIAkJCQlmZCA9IC0xOwogCQkJfQogCQl9IGVsc2UgaWYgKGZkICZsdDsgMCkgewotCQkJbWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwogCQkJbWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTsKIAkJfQogCX0KQEAgLTgxODcsNyAmIzQzOzgyMDMsNiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIG1kdV9hcnJheV9pbmZvX3QgKmluZm8pCiAJCQkJcnYgPSBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7bG9hZChtZGRldik7CiAKIAkJCWlmIChydikgewotCQkJCW1kX2JpdG1hcF9kZXN0cm95KG1kZGV2KTsKIAkJCQltZGRldi0mZ3Q7Yml0bWFwX2luZm8ub2Zmc2V0ID0gMDsKIAkJCQltZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpOwogCQkJfQpAQCAtODIxNiw3ICYjNDM7ODIzMSw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbykKIAkJCQlwdXRfY2x1c3Rlcl9vcHMobWRkZXYpOwogCQkJCW1kZGV2LSZndDtzYWZlbW9kZV9kZWxheSA9IERFRkFVTFRfU0FGRU1PREVfREVMQVk7CiAJCQl9Ci0JCQltZF9iaXRtYXBfZGVzdHJveShtZGRldik7CiAJCQltZGRldi0mZ3Q7Yml0bWFwX2luZm8ub2Zmc2V0ID0gMDsKIAkJCW1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCBiNmQyZTg5MjlhMGY5Li5jODYyZDY1MTliODFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5oCkBAIC02MDgsNiAmIzQzOzYwOCw4IEBAIHN0cnVjdCBtZGRldiB7CiAJc3RydWN0IGxpc3RfaGVhZAkJYWxsX21kZGV2czsKIAogCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJKnRvX3JlbW92ZTsKJiM0MzsJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqdG9fdW5tZXJnZTsKJiM0MzsJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqY29uc3QgKnRvX3JlbW92ZV9ncm91cHM7CiAKIAlzdHJ1Y3QgYmlvX3NldAkJCWJpb19zZXQ7CiAJc3RydWN0IGJpb19zZXQJCQlzeW5jX3NldDsgLyogZm9yIHN5bmMgb3BlcmF0aW9ucyBsaWtlCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMaW51eCBTb2Z0d2FyZSBSQUlEIChtZCkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwmIzM5O3MgTUQgc3Vic3lzdGVtLiBJdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9tZC9tZC1iaXRtYXAuY2AsIGBkcml2ZXJzL21kL21kLmNgLCBhbmQgYGRyaXZlcnMvbWQvbWQuaGAsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvcmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgTUQgYml0bWFwIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHN5c2ZzIGludGVyYWN0aW9uLiBUaGlzIGhpbnRzIGF0IHNvbWUgcmVmaW5lbWVudHMgaW4gaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBiaXRtYXAgbGlmZWN5Y2xlIGFuZCBob3cgc3lzZnMgZ3JvdXBzIGFyZSBhZGRlZCwgcmVtb3ZlZCwgYW5kIHVubWVyZ2VkLCBlc3BlY2lhbGx5IGR1cmluZyBsb2NrL3VubG9jayBvcGVyYXRpb25zLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6CgoxLiAgKipgZHJpdmVycy9tZC9tZC1iaXRtYXAuY2A6KiogVGhlIGBsb2NhdGlvbl9zdG9yZWAgZnVuY3Rpb24gbm93IGhhcyBhIHZpdGFsIGNoZWNrOiBgaWYgKG1kZGV2LSZndDtzeXNmc19hY3RpdmUpIHsgcnYgPSAtRUJVU1k7IGdvdG8gb3V0OyB9YC4gVGhpcyBwcmV2ZW50cyBtb2RpZmljYXRpb24gd2hlbiB0aGUgc3lzdGVtIGlzIGFjdGl2ZWx5IHVzaW5nIHN5c2ZzLiBUaGlzIGlzIGdvb2QsIGVuc3VyaW5nIG5vIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gQWxzbywgaW5zdGVhZCBvZiBkaXJlY3RseSB1bm1lcmdpbmcgdGhlIGdyb3VwLCBgc3lzZnNfdW5tZXJnZV9ncm91cGAgd2Ugbm93IGhhdmUgYG1kZGV2LSZndDt0b191bm1lcmdlID0gJmFtcDttZF9iaXRtYXBfaW50ZXJuYWxfZ3JvdXA7YC4gVGhhdCBtZWFucyB3ZSBhcmUgZGVmZXJyaW5nIHRoZSB1bm1lcmdlIG9wZXJhdGlvbi4KCjIuICAqKmBkcml2ZXJzL21kL21kLmNgOioqIFNpZ25pZmljYW50IGNoYW5nZXMgaGVyZS4gVGhlIGBtZF9iaXRtYXBfc3lzZnNfZGVsYCBmdW5jdGlvbiBoYXMgYmVlbiByZWZhY3RvcmVkIHRvIGFjY2VwdCBhIGdyb3VwIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBrZXkgdXBkYXRlLiBUaGUgYG1kZGV2X3VubG9ja2AgZnVuY3Rpb24gbm93IGhhbmRsZXMgYG1kZGV2LSZndDt0b191bm1lcmdlYCBhbmQgYG1kZGV2LSZndDt0b19yZW1vdmVfZ3JvdXBzYCBvdXRzaWRlIHRoZSBgcmVjb25maWdfbXV0ZXhgIGlmIGBzeXNmc19hY3RpdmVgIGlzIDEsIHdoaWNoIGltcGxpZXMgc29tZSBpbXByb3ZlbWVudHMgaW4gbG9ja2luZy9jb25jdXJyZW5jeS4gSW5zdGVhZCBvZiBjYWxsaW5nIGBtZF9iaXRtYXBfc3lzZnNfZGVsYCwgdGhlIGZ1bmN0aW9ucyBgbWRfYml0bWFwX2Rlc3Ryb3lgLCBgbWRfYml0bWFwX3NldF9ub25lYCwgYHNldF9iaXRtYXBfZmlsZWAgYW5kIGB1cGRhdGVfYXJyYXlfaW5mb2AgYXJlIG5vdyBzZXR0aW5nIHRoZSBgbWRkZXYtJmd0O3RvX3JlbW92ZV9ncm91cHNgIG9yIGBtZGRldi0mZ3Q7dG9fdW5tZXJnZWAgcGFyYW1ldGVycy4gU2VlbXMgbW9yZSBlZmZpY2llbnQuCgozLiAgKipgZHJpdmVycy9tZC9tZC5oYDoqKiBUaGUgYWRkaXRpb24gb2YgYHRvX3VubWVyZ2VgIGFuZCBgdG9fcmVtb3ZlX2dyb3Vwc2AgdG8gdGhlIGBzdHJ1Y3QgbWRkZXZgIGlzIHRoZSBzdXBwb3J0aW5nIHN0cnVjdHVyZS4gVGhlc2UgYXJlIHVzZWQgdG8gZGVmZXIgdGhlIHN5c2ZzIGdyb3VwIHVubWVyZ2UgYW5kIHJlbW92YWwgb3BlcmF0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgZm9yIGJvdGggYG1kLmNgIGFuZCBgbWQtYml0bWFwLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhpcyBwYXRjaCBsb29rcyBjbGVhbiBhbmQgaXMgbGlrZWx5IGFpbWVkIGF0IGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgTUQgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CTEtfREVWX01EfENPTkZJR19NRF9CSVRNQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvTWFrZWZpbGU9MzA9bWQtbW9kLXlcdCYjNDM7PSBtZC5vXG5kcml2ZXJzL21kL01ha2VmaWxlOjMxOm1kLW1vZC0kKENPTkZJR19NRF9CSVRNQVApXHQmIzQzOz0gbWQtYml0bWFwLm9cbmRyaXZlcnMvbWQvTWFrZWZpbGUtMzItbWQtbW9kLSQoQ09ORklHX01EX0xMQklUTUFQKVx0JiM0Mzs9IG1kLWxsYml0bWFwLm9cbi0tXG5kcml2ZXJzL21kL01ha2VmaWxlPTQ3PW9iai0kKENPTkZJR19CQ0FDSEUpXHRcdCYjNDM7PSBiY2FjaGUvXG5kcml2ZXJzL21kL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19CTEtfREVWX01EKVx0JiM0Mzs9IG1kLW1vZC5vXG5kcml2ZXJzL21kL01ha2VmaWxlOjQ5OmlmZXEgKCQoQ09ORklHX0JMS19ERVZfTUQpLHkpXG5kcml2ZXJzL21kL01ha2VmaWxlLTUwLW9iai15XHRcdFx0XHQmIzQzOz0gbWQtYXV0b2RldGVjdC5vXG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01MDI9c3RhdGljIHZvaWQgbWRfYml0bWFwX2ZpbGVfa2ljayhzdHJ1Y3QgYml0bWFwICpiaXRtYXApO1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy01MDMtXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjUwNDojaWZkZWYgQ09ORklHX01EX0JJVE1BUF9GSUxFXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTUwNS1zdGF0aWMgdm9pZCBlbmRfYml0bWFwX3dyaXRlKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTU1OD1zdGF0aWMgaW50IHJlYWRfZmlsZV9wYWdlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNjE4LX1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NjE5OiNlbHNlIC8qIENPTkZJR19NRF9CSVRNQVBfRklMRSAqL1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02MjAtc3RhdGljIHZvaWQgd3JpdGVfZmlsZV9wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB3YWl0KVxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9NjI4PXN0YXRpYyB2b2lkIGZyZWVfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYzMS19XG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjYzMjojZW5kaWYgLyogQ09ORklHX01EX0JJVE1BUF9GSUxFICovXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYzMy1cbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5oPTE3MT1zdGF0aWMgaW5saW5lIHZvaWQgbWRfYml0bWFwX2VuZF9zeW5jKHN0cnVjdCBtZGRldiAqbWRkZXYsIHNlY3Rvcl90IG9mZnNldCxcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5oLTE4MS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmg6MTgyOiNpZmRlZiBDT05GSUdfTURfQklUTUFQXG5kcml2ZXJzL21kL21kLWJpdG1hcC5oLTE4My1pbnQgbWRfYml0bWFwX2luaXQodm9pZCk7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTc0Mz1pbnQgbWRkZXZfaW5pdChzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuYy03NDYtXG5kcml2ZXJzL21kL21kLmM6NzQ3Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRF9CSVRNQVApKVxuZHJpdmVycy9tZC9tZC5jLTc0OC1cdFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTY2Njg9aW50IG1kX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuYy02ODc0LVxuZHJpdmVycy9tZC9tZC5jOjY4NzU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTURfQklUTUFQKSBcdTAwMjZcdTAwMjYgIW1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmZpbGUgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL21kL21kLmMtNjg3Ni1cdCAgICAhbWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0KVxuLS1cbmRyaXZlcnMvbWQvbWQuYz03ODIwPXN0YXRpYyBpbnQgc2V0X2JpdG1hcF9maWxlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCBmZClcbi0tXG5kcml2ZXJzL21kL21kLmMtNzg0Mi1cbmRyaXZlcnMvbWQvbWQuYzo3ODQzOlx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01EX0JJVE1BUF9GSUxFKSkge1xuZHJpdmVycy9tZC9tZC5jLTc4NDQtXHRcdFx0cHJfd2FybihcJiMzNDslczogYml0bWFwIGZpbGVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcXG5cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg4MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgKmNvbmZpZ3VyYWJsZSogaGVyZS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMsIG9mIGNvdXJzZSwgYGRyaXZlcnMvbWQvS2NvbmZpZ2AuIEl04oCZcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRocm91Z2ggdGhhdCBmaWxlLiBJ4oCZbSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFdoYXQgZmVhdHVyZXMgYXJlIGdhdGVrZXB0IGJ5IHRob3NlIGNvbmZpZ3M/IFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgdGhlIGNvZGUgaGF2ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBrbm9icyBhbmQgZGlhbHMgYXQgbXkgZGlzcG9zYWwgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFzc3VtcHRpb25zIG9yIGRpZ2dpbmcgaW50byBjb2RlIHRoYXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvdXQgYW55d2F5LiBUaW1lIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgKE1EX0JJVE1BUHxCTEtfREVWX01EfE1EX0JJVE1BUF9GSUxFKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWc9MTM9aWYgTURcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNTpjb25maWcgQkxLX0RFVl9NRFxuZHJpdmVycy9tZC9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTM5LVxuZHJpdmVycy9tZC9LY29uZmlnOjQwOmNvbmZpZyBNRF9CSVRNQVBcbmRyaXZlcnMvbWQvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7TUQgUkFJRCBiaXRtYXAgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZz02Nj1jb25maWcgTURfQVVUT0RFVEVDVFxuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy03OS1cbmRyaXZlcnMvbWQvS2NvbmZpZzo4MDpjb25maWcgTURfQklUTUFQX0ZJTEVcbmRyaXZlcnMvbWQvS2NvbmZpZy04MS1cdGJvb2wgXCYjMzQ7TUQgYml0bWFwIGZpbGUgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjk0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1EL1NvZnR3YXJlIFJBSUQ6IEEgUHJpbWUgRnV6emluZyBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGFzc2VzcyB0aGUgZnV6emluZyBwb3RlbnRpYWwgb2YgTUQvU29mdHdhcmUgUkFJRC4gRmlyc3QsIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgc2V0dXBzIG9yLCBtb3JlIGltcG9ydGFudGx5LCB0aHJvdWdoIHN5emthbGxlcj8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzLiBNRCBpcyBlbnRpcmVseSB2aXJ0dWFsLCBhIGJsb2NrIGRldmljZSBkcml2ZXIgaW50ZXJhY3RpbmcgdmlhIGlvY3RscyAobGlrZSBgU0VUX0FSUkFZX0lORk9gLCBgUlVOX0FSUkFZYCwgZXRjLikgYW5kIHN5c2ZzIGF0dHJpYnV0ZXMgKGUuZy4sIGBtZC9iaXRtYXAvbG9jYXRpb25gKS4gQW5kIGNyaXRpY2FsbHksIHN5emthbGxlciAqYWxyZWFkeSogYWN0aXZlbHkgdGVzdHMgaXQuIFdlJiMzOTtyZSBzZWVpbmcgdGVzdHMgd2l0aCB0aGUgYHN5el9tZF8qYCBwc2V1ZG8tc3lzY2FsbHMgYW5kIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgYC9kZXYvbWQqYCBkZXZpY2VzIHZpYSBpb2N0bHMsIHBsdXMgc3lzZnMgaW50ZXJhY3Rpb24uCgpTbywgY29kZSBjb3ZlcmFnZSBpcyB0aGVyZTsgdGhlIG5leHQgcXVlc3Rpb24sIGFyZSB0aGVzZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIHdvcnRoIG91ciB0aW1lPyBBYnNvbHV0ZWx5LCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIHRoZXNlIGFyZSAqZXhhY3RseSogdGhlIGtpbmQgb2YgbW9kaWZpY2F0aW9ucyB0aGF0IHBpcXVlIG15IGludGVyZXN0LiBXZSYjMzk7cmUgdGFsa2luZyBkZWFkbG9jayBhbmQgcmFjZSBjb25kaXRpb24gZml4ZXMsIHBsdXMgcmVzdHJ1Y3R1cmluZyByZXZvbHZpbmcgYXJvdW5kIHN5c2ZzIHVubWVyZ2luZy9yZW1vdmFsIGFuZCBtdXRleCBsb2NraW5nLCB3aGljaCBzb3VuZHMgY29tcGxleCwgYnV0IHZ1bG5lcmFibGUuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhleSBtZW50aW9uLCBsaWtlIGBsb2NhdGlvbl9zdG9yZWAsIGBtZGRldl91bmxvY2tgLCBgbWRfYml0bWFwX2Rlc3Ryb3lgLCBgbWRfYml0bWFwX3NldF9ub25lYCwgYHNldF9iaXRtYXBfZmlsZWAsIGFuZCBgdXBkYXRlX2FycmF5X2luZm9gIGFyZSBhbGwgaW52b2x2ZWQgaW4gY3JpdGljYWwgb3BlcmF0aW9ucyBhbmQgYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4KClRoaXMgc2NyZWFtcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbWQvbWQuY2AgYW5kIGBkcml2ZXJzL21kL21kLWJpdG1hcC5jYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCByZWFkaW5nIGFyb3VuZCB0aGUgbGluZXMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZC4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gZm9ybXVsYXRlIHNvbWUgaHlwb3RoZXNlcyBhYm91dCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjkwOlx0XHRcdC8qXG4gNjkxOlx0XHRcdCAqIEluZm9ybSB1c2VyIHdpdGggS09CSl9DSEFOR0UgYWJvdXQgbmV3IGJpdG1hcFxuIDY5MjpcdFx0XHQgKiBhdHRyaWJ1dGVzLlxuIDY5MzpcdFx0XHQgKi9cbiA2OTQ6XHRcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIDY5NTpcdH1cbiA2OTY6XHRcbiA2OTc6XHRzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfZGVsKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4gNjk4Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpjb25zdCAqZ3JvdXBzKVxuIDY5OTpcdHtcbiA3MDA6XHRcdGludCBucl9ncm91cHMgPSAwO1xuIDcwMTpcdFxuIDcwMjpcdFx0aWYgKCFncm91cHMpXG4gNzAzOlx0XHRcdHJldHVybjtcbiA3MDQ6XHRcbiA3MDU6XHRcdGZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcyYjNDM7JiM0MzspXG4gNzA2Olx0XHRcdDtcbiA3MDc6XHRcbiA3MDg6XHRcdHdoaWxlICgtLW5yX2dyb3VwcyBcdTAwM2U9IDEpXG4gNzA5Olx0XHRcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgZ3JvdXBzW25yX2dyb3Vwc10pO1xuIDcxMDpcdFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIGdyb3Vwc1swXSk7XG4gNzExOlx0fVxuIDcxMjpcdFxuIDcxMzpcdGJvb2wgbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIDcxNDpcdHtcbiA3MTU6XHRcdHN0cnVjdCBtZF9zdWJtb2R1bGVfaGVhZCAqaGVhZDtcbiA3MTY6XHRcbiA3MTc6XHRcdGlmIChtZGRldi1cdTAwM2ViaXRtYXBfb3BzIFx1MDAyNlx1MDAyNlxuIDcxODpcdFx0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlaGVhZC5pZCA9PSBtZGRldi1cdTAwM2ViaXRtYXBfaWQpXG4gNzE5Olx0XHRcdHJldHVybiB0cnVlO1xuIDcyMDpcdFxuIDcyMTpcdFx0eGFfbG9jayhcdTAwMjZtZF9zdWJtb2R1bGUpO1xuIDcyMjpcdFx0aGVhZCA9IHhhX2xvYWQoXHUwMDI2bWRfc3VibW9kdWxlLCBtZGRldi1cdTAwM2ViaXRtYXBfaWQpO1xuIDcyMzpcdFxuIDcyNDpcdFx0aWYgKCFoZWFkKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYG1kZGV2X3VubG9ja2AgRnVuY3Rpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgYG1kZGV2X3VubG9ja2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBpbiB0aGUgYGRyaXZlcnMvbWQvbWQuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciB1bmxvY2tpbmcgYSBtdWx0aS1kZXZpY2UgYXJyYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZXRhZGF0YSwgYW5kIHdoYXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NrLXJlbGF0ZWQgaXNzdWVzIG1pZ2h0IGV4aXN0IHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2Ugc2VxdWVuY2VzIGFuZCBzZWUgaG93IHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGUgdW5sb2NrIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21kL21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkyMDpcdFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gOTIxOlx0XHRzdHJ1Y3QgbWRfcmRldiAqdG1wO1xuIDkyMjpcdFx0TElTVF9IRUFEKGRlbGV0ZSk7XG4gOTIzOlx0XG4gOTI0Olx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bWRkZXYtXHUwMDNlZGVsZXRpbmcpKVxuIDkyNTpcdFx0XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNm1kZGV2LVx1MDAzZWRlbGV0aW5nLCBcdTAwMjZkZWxldGUpO1xuIDkyNjpcdFxuIDkyNzpcdFx0aWYgKG1kZGV2LVx1MDAzZXRvX3JlbW92ZSB8fCBtZGRldi1cdTAwM2V0b191bm1lcmdlIHx8IG1kZGV2LVx1MDAzZXRvX3JlbW92ZV9ncm91cHMpIHtcbiA5Mjg6XHRcdFx0LyogVGhlc2UgY2Fubm90IGJlIHJlbW92ZWQgdW5kZXIgcmVjb25maWdfbXV0ZXggYXNcbiA5Mjk6XHRcdFx0ICogYW4gYWNjZXNzIHRvIHRoZSBmaWxlcyB3aWxsIHRyeSB0byB0YWtlIHJlY29uZmlnX211dGV4XG4gOTMwOlx0XHRcdCAqIHdoaWxlIGhvbGRpbmcgdGhlIGZpbGUgdW5yZW1vdmFibGUsIHdoaWNoIGxlYWRzIHRvXG4gOTMxOlx0XHRcdCAqIGEgZGVhZGxvY2suXG4gOTMyOlx0XHRcdCAqIFNvIGhvbGQgc2V0IHN5c2ZzX2FjdGl2ZSB3aGlsZSB0aGUgcmVtb3ZlIGluIGhhcHBlaW5nLFxuIDkzMzpcdFx0XHQgKiBhbmQgYW55dGhpbmcgZWxzZSB3aGljaCBtaWdodCBzZXQgLVx1MDAzZXRvX3JlbW92ZSBvciBteVxuIDkzNDpcdFx0XHQgKiBvdGhlcndpc2UgY2hhbmdlIHRoZSBzeXNmcyBuYW1lc3BhY2Ugd2lsbCBmYWlsIHdpdGhcbiA5MzU6XHRcdFx0ICogLUVCVVNZIGlmIHN5c2ZzX2FjdGl2ZSBpcyBzdGlsbCBzZXQuXG4gOTM2Olx0XHRcdCAqIFdlIHNldCBzeXNmc19hY3RpdmUgdW5kZXIgcmVjb25maWdfbXV0ZXggYW5kIGVsc2V3aGVyZVxuIDkzNzpcdFx0XHQgKiB0ZXN0IGl0IHVuZGVyIHRoZSBzYW1lIG11dGV4IHRvIGVuc3VyZSBpdHMgY29ycmVjdCB2YWx1ZVxuIDkzODpcdFx0XHQgKiBpcyBzZWVuLlxuIDkzOTpcdFx0XHQgKi9cbiA5NDA6XHRcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdG9fcmVtb3ZlID0gbWRkZXYtXHUwMDNldG9fcmVtb3ZlO1xuIDk0MTpcdFx0XHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b191bm1lcmdlID0gbWRkZXYtXHUwMDNldG9fdW5tZXJnZTtcbiA5NDI6XHRcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzO1xuIDk0MzpcdFxuIDk0NDpcdFx0XHRtZGRldi1cdTAwM2V0b19yZW1vdmUgPSBOVUxMO1xuIDk0NTpcdFx0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gTlVMTDtcbiA5NDY6XHRcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IE5VTEw7XG4gOTQ3Olx0XHRcdG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSA9IDE7XG4gOTQ4Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGRldi1cdTAwM2VyZWNvbmZpZ19tdXRleCk7XG4gOTQ5Olx0XG4gOTUwOlx0XHRcdGlmIChtZGRldi1cdTAwM2Vrb2JqLnNkKSB7XG4gOTUxOlx0XHRcdFx0aWYgKHRvX3VubWVyZ2UpXG4gOTUyOlx0XHRcdFx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIHRvX3VubWVyZ2UpO1xuIDk1MzpcdFx0XHRcdGlmICh0b19yZW1vdmVfZ3JvdXBzKVxuIDk1NDpcdFx0XHRcdFx0bWRfYml0bWFwX3N5c2ZzX2RlbChtZGRldiwgdG9fcmVtb3ZlX2dyb3Vwcyk7XG4gOTU1Olx0XHRcdFx0aWYgKHRvX3JlbW92ZSBcdTAwMjZcdTAwMjYgdG9fcmVtb3ZlICE9IFx1MDAyNm1kX3JlZHVuZGFuY3lfZ3JvdXApXG4gOTU2Olx0XHRcdFx0XHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgdG9fcmVtb3ZlKTtcbiA5NTc6XHRcdFx0XHRpZiAobWRkZXYtXHUwMDNlcGVycyA9PSBOVUxMIHx8XG4gOTU4Olx0XHRcdFx0ICAgIG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0ID09IE5VTEwpIHtcbiA5NTk6XHRcdFx0XHRcdHN5c2ZzX3JlbW92ZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY0NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbWQtYml0bWFwLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBCYXNlZCBvbiB0aGUgdGFzaywgSSB0aGluayB0aGUgaXNzdWUgbWlnaHQgbGllIHdpdGhpbiBgbWQtYml0bWFwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgbG9jYXRpb25fc3RvcmVgIGZ1bmN0aW9uIChvciBhIGZ1bmN0aW9uIGNsb3NlbHkgcmVsYXRlZCB0byB0aGF0IG9uZSkuIFRoaXMgc3VnZ2VzdHMgdGhhdCBzb21ldGhpbmcgaXMgZ29pbmcgd3Jvbmcgd2hlbiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHN0b3JlIG9yIHVwZGF0ZSB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24gd2l0aGluIHRoZSBiaXRtYXAgc3RydWN0dXJlLiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLCBhIGJ1ZyBpbiBob3cgd2UmIzM5O3JlIGNhbGN1bGF0aW5nIG9mZnNldHMsIHNvbWUgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIGV2ZW4gYW4gaW5jb3JyZWN0IGJpdG1hcCBmb3JtYXQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgYml0bWFwIGhhbmRsaW5nLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBhcmVhIGludm9sdmVzIGNyaXRpY2FsIG9wZXJhdGlvbnMgYXJvdW5kIGJsb2NrIG1hcHBpbmcgYW5kIG1ldGFkYXRhLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgY2x1ZXMgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24gY2FsbHMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGJlaW5nIHVzZWQgKG9yICpub3QqIHVzZWQhKSwgYW5kIGFueSBlcnJvciBoYW5kbGluZyBhcm91bmQgdGhhdCBzZWN0aW9uIG9mIGNvZGUuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGNoZWNraW5nIGhvdyB3ZSBhcmUgZW5zdXJpbmcgYXRvbWljaXR5IHdoZW4gd2UgYXJlIHdyaXRpbmcgdG8gdGhlIGJpdG1hcC4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJpdG1hcCBtZXRhZGF0YSBpcyBwcm9wZXJseSBzeW5jaHJvbml6ZWQuIExldCYjMzk7cyBzdGFydCBieSBzY3J1dGluaXppbmcgdGhlIGZ1bmN0aW9uIGFuZCBleGFtaW5pbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHN0YXJ0IGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9tZC1iaXRtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjYzMDpcdHN0YXRpYyBzc2l6ZV90XG4yNjMxOlx0bG9jYXRpb25fc3RvcmUoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuMjYzMjpcdHtcbjI2MzM6XHRcdGludCBydjtcbjI2MzQ6XHRcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzO1xuMjYzNTpcdFxuMjYzNjpcdFx0cnYgPSBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KTtcbjI2Mzc6XHRcdGlmIChydilcbjI2Mzg6XHRcdFx0cmV0dXJuIHJ2O1xuMjYzOTpcdFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuMjY0MDpcdFxuMjY0MTpcdFx0aWYgKG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSkge1xuMjY0MjpcdFx0XHRydiA9IC1FQlVTWTtcbjI2NDM6XHRcdFx0Z290byBvdXQ7XG4yNjQ0Olx0XHR9XG4yNjQ1Olx0XG4yNjQ2Olx0XHRpZiAobWRkZXYtXHUwMDNlcGVycykge1xuMjY0NzpcdFx0XHRpZiAobWRkZXYtXHUwMDNlcmVjb3ZlcnkgfHwgbWRkZXYtXHUwMDNlc3luY190aHJlYWQpIHtcbjI2NDg6XHRcdFx0XHRydiA9IC1FQlVTWTtcbjI2NDk6XHRcdFx0XHRnb3RvIG91dDtcbjI2NTA6XHRcdFx0fVxuMjY1MTpcdFx0fVxuMjY1MjpcdFxuMjY1MzpcdFx0aWYgKG1kZGV2LVx1MDAzZWJpdG1hcCB8fCBtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5maWxlIHx8XG4yNjU0Olx0XHQgICAgbWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0KSB7XG4yNjU1Olx0XHRcdC8qIGJpdG1hcCBhbHJlYWR5IGNvbmZpZ3VyZWQuICBPbmx5IG9wdGlvbiBpcyB0byBjbGVhciBpdCAqL1xuMjY1NjpcdFx0XHRpZiAoc3RybmNtcChidWYsIFwmIzM0O25vbmVcJiMzNDssIDQpICE9IDApIHtcbjI2NTc6XHRcdFx0XHRydiA9IC1FQlVTWTtcbjI2NTg6XHRcdFx0XHRnb3RvIG91dDtcbjI2NTk6XHRcdFx0fVxuMjY2MDpcdFxuMjY2MTpcdFx0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gXHUwMDI2bWRfYml0bWFwX2ludGVybmFsX2dyb3VwO1xuMjY2MjpcdFx0XHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcbjI2NjM6XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7XG4yNjY0Olx0XHRcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXG4yNjY1Olx0XHRcdFx0Z290byBub25lX2VycjtcbjI2NjY6XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID0gMDtcbjI2Njc6XHRcdFx0aWYgKG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmZpbGUpIHtcbjI2Njg6XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZiA9IG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmZpbGU7XG4yNjY5Olx0XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8uZmlsZSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTczCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQml0bWFwIE1hbmFnZW1lbnQgYW5kIEZpbGUgVXBkYXRlcyoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIGJpdG1hcHMsIHBhcnRpY3VsYXJseSBhcm91bmQgbnVsbGlmaWNhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJldmlzaXQgYG1kX2JpdG1hcF9zZXRfbm9uZWAsIGVuc3VyaW5nIGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCBub3QgbGVhdmluZyBhbnkgdW5leHBlY3RlZCBhcnRpZmFjdHMuIFRoZW4sIG9mIGNvdXJzZSwgYSB0aG9yb3VnaCBsb29rIGF0IGBtZF9iaXRtYXBfZGVzdHJveWAgaXMgbmVjZXNzYXJ5IHRvIGd1YXJhbnRlZSBwcm9wZXIgcmVzb3VyY2UgcmVsZWFzZSwgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBsZWFrcy4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byBzZWUgaG93IHRoZSBmaWxlIGl0c2VsZiBpcyBiZWluZyBtYW5pcHVsYXRlZCB0byBlbnN1cmUgYHNldF9iaXRtYXBfZmlsZWAgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIEZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGB1cGRhdGVfYXJyYXlfaW5mb2AgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVmbGVjdGluZyBhbnkgY2hhbmdlcyB0byB0aGUgYml0bWFwcyBvciB0aGUgZmlsZS4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgdHJhY2luZyB0aGUgZGF0YSBmbG93IHRvIGNvbmZpcm0gdGhlIHN5c3RlbSYjMzk7cyBpbnRlZ3JpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9tZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NjMwOlx0XG42NjMxOlx0XHRyZXR1cm4gMDtcbjY2MzI6XHR9XG42NjMzOlx0XG42NjM0Olx0dm9pZCBtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpXG42NjM1Olx0e1xuNjYzNjpcdFx0aWYgKCFtZF9iaXRtYXBfcmVnaXN0ZXJlZChtZGRldikpXG42NjM3Olx0XHRcdHJldHVybjtcbjY2Mzg6XHRcbjY2Mzk6XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZGVzdHJveShtZGRldik7XG42NjQwOlx0XHRtZGRldi1cdTAwM2ViaXRtYXBfb3BzID0gTlVMTDtcbjY2NDE6XHR9XG42NjQyOlx0XG42NjQzOlx0c3RhdGljIHZvaWQgbWRfYml0bWFwX2Rlc3Ryb3koc3RydWN0IG1kZGV2ICptZGRldilcbjY2NDQ6XHR7XG42NjQ1Olx0XHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSBcdTAwMjZcdTAwMjYgbWRkZXYtXHUwMDNlYml0bWFwX29wcyBcdTAwMjZcdTAwMjZcbjY2NDY6XHRcdCAgICBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3VwcylcbjY2NDc6XHRcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzO1xuNjY0ODpcdFxuNjY0OTpcdFx0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XG42NjUwOlx0fVxuNjY1MTpcdFxuNjY1MjpcdHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zZXRfbm9uZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuNjY1MzpcdHtcbjY2NTQ6XHRcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzIFx1MDAyNlx1MDAyNlxuNjY1NTpcdFx0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1sxXSlcbjY2NTY6XHRcdFx0bWRkZXYtXHUwMDNldG9fdW5tZXJnZSA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzWzFdO1xuNjY1NzpcdFxuNjY1ODpcdFx0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XG42NjU5Olx0XG42NjYwOlx0XHRtZGRldi1cdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcbjY2NjE6XHRcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXG42NjYyOlx0XHRcdHJldHVybjtcbjY2NjM6XHRcbjY2NjQ6XHRcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3VwcylcbjY2NjU6XHRcdFx0bWRfYml0bWFwX3N5c2ZzX2FkZChtZGRldik7XG42NjY2Olx0fVxuNjY2NzpcdFxuNjY2ODpcdGludCBtZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldilcbjY2Njk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQ1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlJldmlld2luZyBLZXkgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWhhdmluZyBhcyBleHBlY3RlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgc2V0X2JpdG1hcF9maWxlYC4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBoYW5kbGluZyBmaWxlIG9wZXJhdGlvbnMgY29ycmVjdGx5LCBzcGVjaWZpY2FsbHkgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIGJpdG1hcCBkYXRhLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRhdGEgaXMgYmVpbmcgd3JpdHRlbiBhbmQgbG9hZGVkIGFjY29yZGluZyB0byB0aGUgZXhwZWN0ZWQgZm9ybWF0IGFuZCB0aGF0IG5vIG1lbW9yeSBsZWFrcyBhcmUgaGFwcGVuaW5nIGR1cmluZyB0aGF0IG9wZXJhdGlvbi4gTmV4dCB1cCBpcyBgdXBkYXRlX2FycmF5X2luZm9gLiBUaGlzIG9uZSBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBkYXRhIGludGVncml0eS4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgcmVmbGVjdGluZyBjaGFuZ2VzIG1hZGUgdG8gdGhlIGJpdG1hcCBmaWxlJiMzOTtzIGFzc29jaWF0ZWQgZGF0YSB3aXRoaW4gdGhlIGFycmF5LCBlbnN1cmluZyBzeW5jaHJvbml6YXRpb24sIGFuZCB0aGF0IGl0IGlzbiYjMzk7dCBnZW5lcmF0aW5nIGFueSBpbmNvbnNpc3RlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9tZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODYwOlx0XHRcdGlmICghU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG43ODYxOlx0XHRcdFx0cHJfd2FybihcJiMzNDslczogZXJyb3I6IGJpdG1hcCBmaWxlIG11c3QgYmUgYSByZWd1bGFyIGZpbGVcXG5cJiMzNDssXG43ODYyOlx0XHRcdFx0XHRtZG5hbWUobWRkZXYpKTtcbjc4NjM6XHRcdFx0XHRlcnIgPSAtRUJBREY7XG43ODY0Olx0XHRcdH0gZWxzZSBpZiAoIShmLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpKSB7XG43ODY1Olx0XHRcdFx0cHJfd2FybihcJiMzNDslczogZXJyb3I6IGJpdG1hcCBmaWxlIG11c3Qgb3BlbiBmb3Igd3JpdGVcXG5cJiMzNDssXG43ODY2Olx0XHRcdFx0XHRtZG5hbWUobWRkZXYpKTtcbjc4Njc6XHRcdFx0XHRlcnIgPSAtRUJBREY7XG43ODY4Olx0XHRcdH0gZWxzZSBpZiAoYXRvbWljX3JlYWQoXHUwMDI2aW5vZGUtXHUwMDNlaV93cml0ZWNvdW50KSAhPSAxKSB7XG43ODY5Olx0XHRcdFx0cHJfd2FybihcJiMzNDslczogZXJyb3I6IGJpdG1hcCBmaWxlIGlzIGFscmVhZHkgaW4gdXNlXFxuXCYjMzQ7LFxuNzg3MDpcdFx0XHRcdFx0bWRuYW1lKG1kZGV2KSk7XG43ODcxOlx0XHRcdFx0ZXJyID0gLUVCVVNZO1xuNzg3MjpcdFx0XHR9XG43ODczOlx0XHRcdGlmIChlcnIpIHtcbjc4NzQ6XHRcdFx0XHRmcHV0KGYpO1xuNzg3NTpcdFx0XHRcdHJldHVybiBlcnI7XG43ODc2Olx0XHRcdH1cbjc4Nzc6XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8uZmlsZSA9IGY7XG43ODc4Olx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7IC8qIGZpbGUgb3ZlcnJpZGVzIG9mZnNldCAqL1xuNzg3OTpcdFx0fSBlbHNlIGlmIChtZGRldi1cdTAwM2ViaXRtYXAgPT0gTlVMTClcbjc4ODA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7IC8qIGNhbm5vdCByZW1vdmUgd2hhdCBpc24mIzM5O3QgdGhlcmUgKi9cbjc4ODE6XHRcdGVyciA9IDA7XG43ODgyOlx0XHRpZiAobWRkZXYtXHUwMDNlcGVycykge1xuNzg4MzpcdFx0XHRpZiAoZmQgXHUwMDNlPSAwKSB7XG43ODg0Olx0XHRcdFx0ZXJyID0gbWRfYml0bWFwX2NyZWF0ZShtZGRldik7XG43ODg1Olx0XHRcdFx0aWYgKCFlcnIpXG43ODg2Olx0XHRcdFx0XHRlcnIgPSBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWxvYWQobWRkZXYpO1xuNzg4NzpcdFxuNzg4ODpcdFx0XHRcdGlmIChlcnIpIHtcbjc4ODk6XHRcdFx0XHRcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XG43ODkwOlx0XHRcdFx0XHRmZCA9IC0xO1xuNzg5MTpcdFx0XHRcdH1cbjc4OTI6XHRcdFx0fSBlbHNlIGlmIChmZCBcdTAwM2MgMCkge1xuNzg5MzpcdFx0XHRcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XG43ODk0Olx0XHRcdH1cbjc4OTU6XHRcdH1cbjc4OTY6XHRcbjc4OTc6XHRcdGlmIChmZCBcdTAwM2MgMCkge1xuNzg5ODpcdFx0XHRzdHJ1Y3QgZmlsZSAqZiA9IG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmZpbGU7XG43ODk5Olx0XHRcdGlmIChmKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjkwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGB1cGRhdGVfYXJyYXlfaW5mb2AgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB1cGRhdGVfYXJyYXlfaW5mb2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGFuZCBzY29wZS4gV2hhdCBleGFjdGx5IGlzIGl0IHVwZGF0aW5nPyBCYXNlZCBvbiB0aGUgbmFtZSwgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyBzb21lIG1ldGFkYXRhIGFib3V0IGFuIGFycmF5LiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDsgaXMgaXQgYSBzaW1wbGUgYXJyYXksIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheSwgYSBkeW5hbWljYWxseS1zaXplZCBhcnJheSwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIGEgc3BhcnNlIG1hdHJpeD8gVGhlIGNvbnRleHQgb2Ygd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIG1hdHRlcnMgdG9vLiBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIHN5c3RlbSBmb3IgZGF0YSBwcm9jZXNzaW5nLCBkYXRhYmFzZSBtYW5hZ2VtZW50LCBvciBwZXJoYXBzIGEgbW9yZSBzcGVjaWFsaXplZCBhbGdvcml0aG0/CgpNeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgcG90ZW50aWFsIGlzc3Vlcy4gQ291bGQgaXQgYmUgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGlmIGNhbGxlZCBmcmVxdWVudGx5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyBpZiBtdWx0aXBsZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBhcmUgbW9kaWZ5aW5nIHRoZSBhcnJheSBpbmZvcm1hdGlvbiBjb25jdXJyZW50bHk/IE1lbW9yeSB1c2FnZSBpcyBhbHNvIGEga2V5IGNvbmNlcm4uIERvZXMgdGhlIHVwZGF0ZSBwcm9jZXNzIGVmZmljaWVudGx5IHV0aWxpemUgbWVtb3J5LCBvciBjb3VsZCBpdCBsZWFkIHRvIGV4Y2Vzc2l2ZSBmcmFnbWVudGF0aW9uIG9yIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzPyBFcnJvciBoYW5kbGluZyBpcywgYXMgYWx3YXlzLCBwYXJhbW91bnQuIERvZXMgaXQgcm9idXN0bHkgaGFuZGxlIGVkZ2UgY2FzZXMsIHN1Y2ggYXMgaW52YWxpZCBhcnJheSBpbmRpY2VzLCBudWxsIHBvaW50ZXJzLCBvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcz8gQW5kIGZpbmFsbHksIGhvdyB3ZWxsIGRvZXMgdGhlIGNvZGUgaGFuZGxlIGNoYW5nZXMgdG8gdGhlIGFycmF5PyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgdGhlIGluZm9ybWF0aW9uIGlzIHZhbGlkPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ODE4MDpcdFx0XHRcdGdvdG8gZXJyO1xuODE4MTpcdFx0XHR9XG44MTgyOlx0XHRcdGlmIChtZGRldi1cdTAwM2VyZWNvdmVyeSB8fCBtZGRldi1cdTAwM2VzeW5jX3RocmVhZCkge1xuODE4MzpcdFx0XHRcdHJ2ID0gLUVCVVNZO1xuODE4NDpcdFx0XHRcdGdvdG8gZXJyO1xuODE4NTpcdFx0XHR9XG44MTg2Olx0XHRcdGlmIChpbmZvLVx1MDAzZXN0YXRlIFx1MDAyNiAoMVx1MDAzY1x1MDAzY01EX1NCX0JJVE1BUF9QUkVTRU5UKSkge1xuODE4NzpcdFx0XHRcdC8qIGFkZCB0aGUgYml0bWFwICovXG44MTg4Olx0XHRcdFx0aWYgKG1kZGV2LVx1MDAzZWJpdG1hcCkge1xuODE4OTpcdFx0XHRcdFx0cnYgPSAtRUVYSVNUO1xuODE5MDpcdFx0XHRcdFx0Z290byBlcnI7XG44MTkxOlx0XHRcdFx0fVxuODE5MjpcdFx0XHRcdGlmIChtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5kZWZhdWx0X29mZnNldCA9PSAwKSB7XG44MTkzOlx0XHRcdFx0XHRydiA9IC1FSU5WQUw7XG44MTk0Olx0XHRcdFx0XHRnb3RvIGVycjtcbjgxOTU6XHRcdFx0XHR9XG44MTk2Olx0XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID1cbjgxOTc6XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmRlZmF1bHRfb2Zmc2V0O1xuODE5ODpcdFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLnNwYWNlID1cbjgxOTk6XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmRlZmF1bHRfc3BhY2U7XG44MjAwOlx0XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQO1xuODIwMTpcdFx0XHRcdHJ2ID0gbWRfYml0bWFwX2NyZWF0ZShtZGRldik7XG44MjAyOlx0XHRcdFx0aWYgKCFydilcbjgyMDM6XHRcdFx0XHRcdHJ2ID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vsb2FkKG1kZGV2KTtcbjgyMDQ6XHRcbjgyMDU6XHRcdFx0XHRpZiAocnYpIHtcbjgyMDY6XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7XG44MjA3Olx0XHRcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuODIwODpcdFx0XHRcdH1cbjgyMDk6XHRcdFx0fSBlbHNlIHtcbjgyMTA6XHRcdFx0XHRzdHJ1Y3QgbWRfYml0bWFwX3N0YXRzIHN0YXRzO1xuODIxMTpcdFxuODIxMjpcdFx0XHRcdHJ2ID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2VnZXRfc3RhdHMobWRkZXYtXHUwMDNlYml0bWFwLCBcdTAwMjZzdGF0cyk7XG44MjEzOlx0XHRcdFx0aWYgKHJ2KVxuODIxNDpcdFx0XHRcdFx0Z290byBlcnI7XG44MjE1Olx0XG44MjE2Olx0XHRcdFx0aWYgKHN0YXRzLmZpbGUpIHtcbjgyMTc6XHRcdFx0XHRcdHJ2ID0gLUVJTlZBTDtcbjgyMTg6XHRcdFx0XHRcdGdvdG8gZXJyO1xuODIxOTpcdFx0XHRcdH1cbjgyMjA6XHRcbjgyMjE6XHRcdFx0XHRpZiAobWRkZXYtXHUwMDNlYml0bWFwX2luZm8ubm9kZXMpIHtcbjgyMjI6XHRcdFx0XHRcdC8qIGhvbGQgUFcgb24gYWxsIHRoZSBiaXRtYXAgbG9jayAqL1xuODIyMzpcdFx0XHRcdFx0aWYgKG1kZGV2LVx1MDAzZWNsdXN0ZXJfb3BzLVx1MDAzZWxvY2tfYWxsX2JpdG1hcHMobWRkZXYpIFx1MDAzYz0gMCkge1xuODIyNDpcdFx0XHRcdFx0XHRwcl93YXJuKFwmIzM0O21kOiBjYW4mIzM5O3QgY2hhbmdlIGJpdG1hcCB0byBub25lIHNpbmNlIHRoZSBhcnJheSBpcyBpbiB1c2UgYnkgbW9yZSB0aGFuIG9uZSBub2RlXFxuXCYjMzQ7KTtcbjgyMjU6XHRcdFx0XHRcdFx0cnYgPSAtRVBFUk07XG44MjI2Olx0XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWNsdXN0ZXJfb3BzLVx1MDAzZXVubG9ja19hbGxfYml0bWFwcyhtZGRldik7XG44MjI3Olx0XHRcdFx0XHRcdGdvdG8gZXJyO1xuODIyODpcdFx0XHRcdFx0fVxuODIyOTpcdFxuODIzMDpcdFx0XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8ubm9kZXMgPSAwO1xuODIzMTpcdFx0XHRcdFx0cHV0X2NsdXN0ZXJfb3BzKG1kZGV2KTtcbjgyMzI6XHRcdFx0XHRcdG1kZGV2LVx1MDAzZXNhZmVtb2RlX2RlbGF5ID0gREVGQVVMVF9TQUZFTU9ERV9ERUxBWTtcbjgyMzM6XHRcdFx0XHR9XG44MjM0Olx0XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID0gMDtcbjgyMzU6XHRcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuODIzNjpcdFx0XHR9XG44MjM3Olx0XHR9XG44MjM4Olx0XHRtZF91cGRhdGVfc2IobWRkZXYsIDEpO1xuODIzOTpcdFx0cmV0dXJuIHJ2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ5OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBSQUlEIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBtYWtlIHN1cmUgdGhpcyBSQUlEIHNldHVwIGlzIGtvc2hlci4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgQ09ORklHX0JMS19ERVZfTURgIGFuZCBgQ09ORklHX01EX0JJVE1BUGAgYXJlIHNldCBjb3JyZWN0bHkuIFRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbiwgdGhlIGJlZHJvY2sgZm9yIHRoZSB3aG9sZSB0aGluZy4gV2l0aG91dCB0aGVzZSwgd2UmIzM5O3JlIG5vdCBnb2luZyBhbnl3aGVyZS4KCk5vdyB0aGF0IEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBjb25maWdzLCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBgQkxLX0RFVl9NRGAgYW5kIGBNRF9CSVRNQVBgIGhhdmUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCAqbmVlZCogdG8gYmUgZW5hYmxlZCBmb3IgdGhlc2UgdG8gd29yayBwcm9wZXJseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBpcyBhYm91dCBlbnN1cmluZyBhIGNsZWFuIGFuZCBzdGFibGUgYnVpbGQsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGlzIGNydWNpYWwuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoTUR8QkxLX0RFVl9NRHxNRF9CSVRNQVApJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZy01LVxuZHJpdmVycy9tZC9LY29uZmlnOjY6bWVudWNvbmZpZyBNRFxuZHJpdmVycy9tZC9LY29uZmlnLTctXHRib29sIFwmIzM0O011bHRpcGxlIGRldmljZXMgZHJpdmVyIHN1cHBvcnQgKFJBSUQgYW5kIExWTSlcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWc9MTM9aWYgTURcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNTpjb25maWcgQkxLX0RFVl9NRFxuZHJpdmVycy9tZC9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTM5LVxuZHJpdmVycy9tZC9LY29uZmlnOjQwOmNvbmZpZyBNRF9CSVRNQVBcbmRyaXZlcnMvbWQvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7TUQgUkFJRCBiaXRtYXAgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy01NC1cbmRyaXZlcnMvbWQvS2NvbmZpZzo1NTpjb25maWcgTURfTExCSVRNQVBcbmRyaXZlcnMvbWQvS2NvbmZpZy01Ni1cdGJvb2wgXCYjMzQ7TUQgUkFJRCBsb2NrbGVzcyBiaXRtYXAgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy02NS1cbmRyaXZlcnMvbWQvS2NvbmZpZzo2Njpjb25maWcgTURfQVVUT0RFVEVDVFxuZHJpdmVycy9tZC9LY29uZmlnLTY3LVx0Ym9vbCBcJiMzNDtBdXRvZGV0ZWN0IFJBSUQgYXJyYXlzIGR1cmluZyBrZXJuZWwgYm9vdFwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy03OS1cbmRyaXZlcnMvbWQvS2NvbmZpZzo4MDpjb25maWcgTURfQklUTUFQX0ZJTEVcbmRyaXZlcnMvbWQvS2NvbmZpZy04MS1cdGJvb2wgXCYjMzQ7TUQgYml0bWFwIGZpbGUgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctOTAtXG5kcml2ZXJzL21kL0tjb25maWc6OTE6Y29uZmlnIE1EX0xJTkVBUlxuZHJpdmVycy9tZC9LY29uZmlnLTkyLVx0dHJpc3RhdGUgXCYjMzQ7TGluZWFyIChhcHBlbmQpIG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMTAzLVxuZHJpdmVycy9tZC9LY29uZmlnOjEwNDpjb25maWcgTURfUkFJRDBcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMDUtXHR0cmlzdGF0ZSBcJiMzNDtSQUlELTAgKHN0cmlwaW5nKSBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTEyMy1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxMjQ6Y29uZmlnIE1EX1JBSUQxXG5kcml2ZXJzL21kL0tjb25maWctMTI1LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC0xIChtaXJyb3JpbmcpIG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMTQ1LVxuZHJpdmVycy9tZC9LY29uZmlnOjE0Njpjb25maWcgTURfUkFJRDEwXG5kcml2ZXJzL21kL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC0xMCAobWlycm9yZWQgc3RyaXBpbmcpIG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMTY0LVxuZHJpdmVycy9tZC9LY29uZmlnOjE2NTpjb25maWcgTURfUkFJRDQ1NlxuZHJpdmVycy9tZC9LY29uZmlnLTE2Ni1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtNC9SQUlELTUvUkFJRC02IG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMjAxLVxuZHJpdmVycy9tZC9LY29uZmlnOjIwMjpjb25maWcgTURfQ0xVU1RFUlxuZHJpdmVycy9tZC9LY29uZmlnLTIwMy1cdHRyaXN0YXRlIFwmIzM0O0NsdXN0ZXIgU3VwcG9ydCBmb3IgTURcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NDYKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNRCBTdWJzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYE1EYCBsZWFkcyB0byBgQkxLX0RFVl9NRGAsIHdoaWNoIHRoZW4gbGVhZHMgdG8gYE1EX0JJVE1BUGAuIFRoaXMgZ2l2ZXMgbWUgYSBxdWljayBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQga2VybmVsIG1vZHVsZXM6IGBNRGAsIGBCTEtfREVWX01EYCwgYW5kIGBNRF9CSVRNQVBgLgoKTmV4dCwgSSYjMzk7bSByZXZpZXdpbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBpZGVudGlmeSBrZXkgRm9jdXNTeW1ib2xzLiBUaGUgbGlzdCBpbmNsdWRlczogYGxvY2F0aW9uX3N0b3JlYCwgYG1kX2JpdG1hcF9zeXNmc19kZWxgLCBgbWRkZXZfdW5sb2NrYCwgYG1kX2JpdG1hcF9kZXN0cm95YCwgYG1kX2JpdG1hcF9zZXRfbm9uZWAsIGBzZXRfYml0bWFwX2ZpbGVgLCBhbmQgYHVwZGF0ZV9hcnJheV9pbmZvYC4gUmlnaHQgYXdheSwgSSBub3RlIHRoYXQgYG1kZGV2X3VubG9ja2AgaXMgZGVmaW5pdGVseSBNRCAoc29mdHdhcmUgUkFJRCkgc3BlY2lmaWMsIG5vdCBzb21lIGdsb2JhbGx5IHVzZWQga2VybmVsIGZ1bmN0aW9uLiBJbiBmYWN0LCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgTUQgc3Vic3lzdGVtLgoKTm93LCBJJiMzOTttIGRvdWJsZS1jaGVja2luZyB3aGV0aGVyIHRoaXMgaXMgZnV6emluZy13b3J0aHkuIExldCYjMzk7cyBzZWU6IFRoZSBzdWJzeXN0ZW0gaXMgTGludXggTUQgKHNvZnR3YXJlIFJBSUQpLCBhIHZpcnR1YWwgYmxvY2sgZGV2aWNlIGV4cG9zZWQgdmlhIGBpb2N0bGAgYW5kIGBzeXNmc2AsIGFuZCBpdCBpcyBmdWxseSBlbXVsYXRlZC9zb2Z0d2FyZSBkZXZpY2UuIFRoZSBtb2RpZmljYXRpb25zIGludm9sdmUgc3lzZnMgYXR0cmlidXRlIGhhbmRsaW5nLCBiaXRtYXAgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGFuZCBtdXRleCB1bmxvY2tpbmcgbG9naWMuIEdpdmVuIHRoZXNlIGZhY3RvcnMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCBjb25zdHJ1Y3QgbXkgZmluYWwgcmVzcG9uc2UgdXNpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01EJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7TURfQklUTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYXRpb25fc3RvcmUmIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX3N5c2ZzX2RlbCYjMzQ7LAogICAgJiMzNDttZGRldl91bmxvY2smIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX3NldF9ub25lJiMzNDssCiAgICAmIzM0O3NldF9iaXRtYXBfZmlsZSYjMzQ7LAogICAgJiMzNDt1cGRhdGVfYXJyYXlfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBpbiBkcml2ZXJzL21kL21kLmMgYW5kIGRyaXZlcnMvbWQvbWQtYml0bWFwLmMsIGFkanVzdGluZyBob3cgYml0bWFwIHN5c2ZzIGF0dHJpYnV0ZSBncm91cHMgYXJlIHVubWVyZ2VkIGFuZCByZW1vdmVkIGR1cmluZyBtZGRldl91bmxvY2ssIGxvY2F0aW9uX3N0b3JlLCBtZF9iaXRtYXBfZGVzdHJveSwgYW5kIG1kX2JpdG1hcF9zZXRfbm9uZSB0byBwcmV2ZW50IGxvY2svc3lzZnMgZGVhZGxvY2tzIGFuZCByYWNlcy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1kIHN5c2ZzIGF0dHJpYnV0ZXMgYW5kIGlvY3RscyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9NRCYjMzQ7LAogICAgJiMzNDtNRF9CSVRNQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb2NhdGlvbl9zdG9yZSYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfc3lzZnNfZGVsJiMzNDssCiAgICAmIzM0O21kZGV2X3VubG9jayYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfZGVzdHJveSYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfc2V0X25vbmUmIzM0OywKICAgICYjMzQ7c2V0X2JpdG1hcF9maWxlJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9hcnJheV9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGluIGRyaXZlcnMvbWQvbWQuYyBhbmQgZHJpdmVycy9tZC9tZC1iaXRtYXAuYywgYWRqdXN0aW5nIGhvdyBiaXRtYXAgc3lzZnMgYXR0cmlidXRlIGdyb3VwcyBhcmUgdW5tZXJnZWQgYW5kIHJlbW92ZWQgZHVyaW5nIG1kZGV2X3VubG9jaywgbG9jYXRpb25fc3RvcmUsIG1kX2JpdG1hcF9kZXN0cm95LCBhbmQgbWRfYml0bWFwX3NldF9ub25lIHRvIHByZXZlbnQgbG9jay9zeXNmcyBkZWFkbG9ja3MgYW5kIHJhY2VzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWQgc3lzZnMgYXR0cmlidXRlcyBhbmQgaW9jdGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgYXR0cmlidXRlIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBsb2dpYyBpbiB0aGUgTUQgKFNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBtYW5pcHVsYXRpbmcgc3lzZnMgZmlsZXMgdW5kZXIgbWRkZXYtXHUwMDNlcmVjb25maWdfbXV0ZXguIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHN5c2ZzIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBieSByZWNvcmRpbmcgcG9pbnRlcnMgKHRvX3VubWVyZ2UgYW5kIHRvX3JlbW92ZV9ncm91cHMpIGluIHN0cnVjdCBtZGRldiBhbmQgcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9ucyBpbiBtZGRldl91bmxvY2soKSBhZnRlciByZWxlYXNpbmcgcmVjb25maWdfbXV0ZXguXG5cbnN0cnVjdCBtZGRldiBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHZpYSBremFsbG9jLCBhbmQgdGhlIG5ldyBwb2ludGVyIGZpZWxkcyBhcmUgcHJvcGVybHkgbWFuYWdlZCBhbmQgY2xlYXJlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyB0byB1c2Vyc3BhY2UsIGRhdGEgYnVmZmVycywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgZGVyZWZlcmVuY2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YTA0NGIwMmQzNGQzZTIxZjE1OTZiYjYzNzJkMzMxOGNiNGM5YWFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwMDoyMzo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQtYml0bWFwLmMgYi9kcml2ZXJzL21kL21kLWJpdG1hcC5jCmluZGV4IGI4MzI1Y2IwOWEzNzEuLjNhOTdhYTQ2M2VjY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQtYml0bWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC1iaXRtYXAuYwpAQCAtMjYzOCw2ICYjNDM7MjYzOCwxMSBAQCBsb2NhdGlvbl9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJCXJldHVybiBydjsKIAlub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7CiAKJiM0MzsJaWYgKG1kZGV2LSZndDtzeXNmc19hY3RpdmUpIHsKJiM0MzsJCXJ2ID0gLUVCVVNZOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAlpZiAobWRkZXYtJmd0O3BlcnMpIHsKIAkJaWYgKG1kZGV2LSZndDtyZWNvdmVyeSB8fCBtZGRldi0mZ3Q7c3luY190aHJlYWQpIHsKIAkJCXJ2ID0gLUVCVVNZOwpAQCAtMjY1Myw3ICYjNDM7MjY1OCw3IEBAIGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJc3lzZnNfdW5tZXJnZV9ncm91cCgmYW1wO21kZGV2LSZndDtrb2JqLCAmYW1wO21kX2JpdG1hcF9pbnRlcm5hbF9ncm91cCk7CiYjNDM7CQltZGRldi0mZ3Q7dG9fdW5tZXJnZSA9ICZhbXA7bWRfYml0bWFwX2ludGVybmFsX2dyb3VwOwogCQltZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTsKIAkJbWRkZXYtJmd0O2JpdG1hcF9pZCA9IElEX0JJVE1BUF9OT05FOwogCQlpZiAoIW1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMobWRkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDY4MGIzNGE2M2NiM2QuLmU4M2NhZWMwOTYzYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmMKQEAgLTY5NCwxNyAmIzQzOzY5NCwyMCBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYpCiAJCWtvYmplY3RfdWV2ZW50KCZhbXA7bWRkZXYtJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKIH0KIAotc3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2RlbChzdHJ1Y3QgbWRkZXYgKm1kZGV2KQomIzQzO3N0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldiwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKmdyb3VwcykKIHsKIAlpbnQgbnJfZ3JvdXBzID0gMDsKIAotCWZvciAobnJfZ3JvdXBzID0gMDsgbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3Vwc1tucl9ncm91cHNdOyBucl9ncm91cHMmIzQzOyYjNDM7KQomIzQzOwlpZiAoIWdyb3VwcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChucl9ncm91cHMgPSAwOyBncm91cHNbbnJfZ3JvdXBzXTsgbnJfZ3JvdXBzJiM0MzsmIzQzOykKIAkJOwogCiAJd2hpbGUgKC0tbnJfZ3JvdXBzICZndDs9IDEpCi0JCXN5c2ZzX3VubWVyZ2VfZ3JvdXAoJmFtcDttZGRldi0mZ3Q7a29iaiwKLQkJCQkgICAgbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3Vwc1tucl9ncm91cHNdKTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmFtcDttZGRldi0mZ3Q7a29iaiwgbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3Vwc1swXSk7CiYjNDM7CQlzeXNmc191bm1lcmdlX2dyb3VwKCZhbXA7bWRkZXYtJmd0O2tvYmosIGdyb3Vwc1tucl9ncm91cHNdKTsKJiM0MzsJc3lzZnNfcmVtb3ZlX2dyb3VwKCZhbXA7bWRkZXYtJmd0O2tvYmosIGdyb3Vwc1swXSk7CiB9CiAKIGJvb2wgbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2KQpAQCAtOTIxLDcgJiM0Mzs5MjQsNyBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCWlmICghbGlzdF9lbXB0eSgmYW1wO21kZGV2LSZndDtkZWxldGluZykpCiAJCWxpc3Rfc3BsaWNlX2luaXQoJmFtcDttZGRldi0mZ3Q7ZGVsZXRpbmcsICZhbXA7ZGVsZXRlKTsKIAotCWlmIChtZGRldi0mZ3Q7dG9fcmVtb3ZlKSB7CiYjNDM7CWlmIChtZGRldi0mZ3Q7dG9fcmVtb3ZlIHx8IG1kZGV2LSZndDt0b191bm1lcmdlIHx8IG1kZGV2LSZndDt0b19yZW1vdmVfZ3JvdXBzKSB7CiAJCS8qIFRoZXNlIGNhbm5vdCBiZSByZW1vdmVkIHVuZGVyIHJlY29uZmlnX211dGV4IGFzCiAJCSAqIGFuIGFjY2VzcyB0byB0aGUgZmlsZXMgd2lsbCB0cnkgdG8gdGFrZSByZWNvbmZpZ19tdXRleAogCQkgKiB3aGlsZSBob2xkaW5nIHRoZSBmaWxlIHVucmVtb3ZhYmxlLCB3aGljaCBsZWFkcyB0bwpAQCAtOTM1LDEyICYjNDM7OTM4LDIxIEBAIHZvaWQgbWRkZXZfdW5sb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYpCiAJCSAqIGlzIHNlZW4uCiAJCSAqLwogCQljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b19yZW1vdmUgPSBtZGRldi0mZ3Q7dG9fcmVtb3ZlOwomIzQzOwkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdG9fdW5tZXJnZSA9IG1kZGV2LSZndDt0b191bm1lcmdlOwomIzQzOwkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi0mZ3Q7dG9fcmVtb3ZlX2dyb3VwczsKJiM0MzsKIAkJbWRkZXYtJmd0O3RvX3JlbW92ZSA9IE5VTEw7CiYjNDM7CQltZGRldi0mZ3Q7dG9fdW5tZXJnZSA9IE5VTEw7CiYjNDM7CQltZGRldi0mZ3Q7dG9fcmVtb3ZlX2dyb3VwcyA9IE5VTEw7CiAJCW1kZGV2LSZndDtzeXNmc19hY3RpdmUgPSAxOwogCQltdXRleF91bmxvY2soJmFtcDttZGRldi0mZ3Q7cmVjb25maWdfbXV0ZXgpOwogCiAJCWlmIChtZGRldi0mZ3Q7a29iai5zZCkgewotCQkJaWYgKHRvX3JlbW92ZSAhPSAmYW1wO21kX3JlZHVuZGFuY3lfZ3JvdXApCiYjNDM7CQkJaWYgKHRvX3VubWVyZ2UpCiYjNDM7CQkJCXN5c2ZzX3VubWVyZ2VfZ3JvdXAoJmFtcDttZGRldi0mZ3Q7a29iaiwgdG9fdW5tZXJnZSk7CiYjNDM7CQkJaWYgKHRvX3JlbW92ZV9ncm91cHMpCiYjNDM7CQkJCW1kX2JpdG1hcF9zeXNmc19kZWwobWRkZXYsIHRvX3JlbW92ZV9ncm91cHMpOwomIzQzOwkJCWlmICh0b19yZW1vdmUgJmFtcDsmYW1wOyB0b19yZW1vdmUgIT0gJmFtcDttZF9yZWR1bmRhbmN5X2dyb3VwKQogCQkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmYW1wO21kZGV2LSZndDtrb2JqLCB0b19yZW1vdmUpOwogCQkJaWYgKG1kZGV2LSZndDtwZXJzID09IE5VTEwgfHwKIAkJCSAgICBtZGRldi0mZ3Q7cGVycy0mZ3Q7c3luY19yZXF1ZXN0ID09IE5VTEwpIHsKQEAgLTY2MzIsMTMgJiM0Mzs2NjQ0LDE5IEBAIHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9kZXN0cm95KHN0cnVjdCBtZGRldiAqbWRkZXYpCiB7CiAJaWYgKCFtZGRldl9pc19kbShtZGRldikgJmFtcDsmYW1wOyBtZGRldi0mZ3Q7Yml0bWFwX29wcyAmYW1wOyZhbXA7CiAJICAgIG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtncm91cHMpCi0JCW1kX2JpdG1hcF9zeXNmc19kZWwobWRkZXYpOwomIzQzOwkJbWRkZXYtJmd0O3RvX3JlbW92ZV9ncm91cHMgPSBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7Z3JvdXBzOwogCiAJbWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zZXRfbm9uZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogewomIzQzOwlpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSAmYW1wOyZhbXA7IG1kZGV2LSZndDtiaXRtYXBfb3BzICZhbXA7JmFtcDsKJiM0MzsJICAgIG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtncm91cHMgJmFtcDsmYW1wOyBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7Z3JvdXBzWzFdKQomIzQzOwkJbWRkZXYtJmd0O3RvX3VubWVyZ2UgPSBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7Z3JvdXBzWzFdOwomIzQzOwomIzQzOwltZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTsKJiM0MzsKIAltZGRldi0mZ3Q7Yml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7CiAJaWYgKCFtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKG1kZGV2KSkKIAkJcmV0dXJuOwpAQCAtNzg2OCwxMiAmIzQzOzc4ODYsMTAgQEAgc3RhdGljIGludCBzZXRfYml0bWFwX2ZpbGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZkKQogCQkJCWVyciA9IG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtsb2FkKG1kZGV2KTsKIAogCQkJaWYgKGVycikgewotCQkJCW1kX2JpdG1hcF9kZXN0cm95KG1kZGV2KTsKIAkJCQltZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpOwogCQkJCWZkID0gLTE7CiAJCQl9CiAJCX0gZWxzZSBpZiAoZmQgJmx0OyAwKSB7Ci0JCQltZF9iaXRtYXBfZGVzdHJveShtZGRldik7CiAJCQltZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpOwogCQl9CiAJfQpAQCAtODE4Nyw3ICYjNDM7ODIwMyw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbykKIAkJCQlydiA9IG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtsb2FkKG1kZGV2KTsKIAogCQkJaWYgKHJ2KSB7Ci0JCQkJbWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwogCQkJCW1kZGV2LSZndDtiaXRtYXBfaW5mby5vZmZzZXQgPSAwOwogCQkJCW1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7CiAJCQl9CkBAIC04MjE2LDcgJiM0Mzs4MjMxLDYgQEAgc3RhdGljIGludCB1cGRhdGVfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBtZHVfYXJyYXlfaW5mb190ICppbmZvKQogCQkJCXB1dF9jbHVzdGVyX29wcyhtZGRldik7CiAJCQkJbWRkZXYtJmd0O3NhZmVtb2RlX2RlbGF5ID0gREVGQVVMVF9TQUZFTU9ERV9ERUxBWTsKIAkJCX0KLQkJCW1kX2JpdG1hcF9kZXN0cm95KG1kZGV2KTsKIAkJCW1kZGV2LSZndDtiaXRtYXBfaW5mby5vZmZzZXQgPSAwOwogCQkJbWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCmluZGV4IGI2ZDJlODkyOWEwZjkuLmM4NjJkNjUxOWI4MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmgKQEAgLTYwOCw2ICYjNDM7NjA4LDggQEAgc3RydWN0IG1kZGV2IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlhbGxfbWRkZXZzOwogCiAJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqdG9fcmVtb3ZlOwomIzQzOwljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCSp0b191bm1lcmdlOwomIzQzOwljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCSpjb25zdCAqdG9fcmVtb3ZlX2dyb3VwczsKIAogCXN0cnVjdCBiaW9fc2V0CQkJYmlvX3NldDsKIAlzdHJ1Y3QgYmlvX3NldAkJCXN5bmNfc2V0OyAvKiBmb3Igc3luYyBvcGVyYXRpb25zIGxpa2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBsb2NrZGVwIHdhcm5pbmcsIG1vc3QgbGlrZWx5IHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgaXNzdWVzIGR1cmluZyB0aGUgcmVtb3ZhbCBvZiBzeXNmcyBncm91cHMgYW5kIGZpbGVzIHdpdGhpbiB0aGUgTUQgKE11bHRpcGxlIERldmljZSkgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGByZWNvbmZpZ19tdXRleGAuIFRoZSBjb3JlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgZGlyZWN0bHkgcmVtb3ZpbmcgYSBzeXNmcyBhdHRyaWJ1dGUgZ3JvdXAgd2hpbGUgc3lzZnMgY2FsbGJhY2tzIGFyZSB3YWl0aW5nIG9uLCBvciBob2xkaW5nLCB0aGUgYHJlY29uZmlnX211dGV4YCBjYW4gbGVhZCB0byBhIGRlYWRsb2NrIHNpdHVhdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcywgYW5kIHRoZSBwYXRjaCBzZWVtcyB0byBiZSB1c2luZyBhIGRlZmVycmFsIG1lY2hhbmlzbSB0byBhZGRyZXNzIGl0LgoKVGhlIHByaW1hcnkgc3RyYXRlZ3kgZW1wbG95ZWQgaGVyZSBpcyB0byBkZWZlciB0aGUgYHN5c2ZzX3VubWVyZ2VfZ3JvdXBgIGFuZCBgbWRfYml0bWFwX3N5c2ZzX2RlbGAgb3BlcmF0aW9ucy4gSW5zdGVhZCBvZiBwZXJmb3JtaW5nIHRoZW0gZGlyZWN0bHkgdW5kZXIgdGhlIGxvY2ssIHRoZSBwYXRjaCBzZXRzIGZsYWdzIChgbWRkZXYtJmd0O3RvX3VubWVyZ2VgIGFuZCBgbWRkZXYtJmd0O3RvX3JlbW92ZV9ncm91cHNgKSBhbmQgZGVmZXJzIHRoZSBhY3R1YWwgcmVtb3ZhbCB1bnRpbCBhZnRlciB0aGUgYHJlY29uZmlnX211dGV4YCBoYXMgYmVlbiByZWxlYXNlZCwgd2hpY2ggaGFwcGVucyBpbiBgbWRkZXZfdW5sb2NrKClgLiBUaGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIGFwcHJvYWNoLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZSBiZWZvcmUgY29uc2lkZXJpbmcgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBzZWUuLi4KCjEuICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb246KiogVGhlIHBhdGNoIGRvZXNuJiMzOTt0IHNlZW0gdG8gdG91Y2ggYW55IGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4gTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIG91dCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGNvdWxkIGJlIGEgcHJvYmxlbS4gVGhpcyBpcyBnb29kLgoKMi4gICoqQ29uZGl0aW9uYWwgTG9naWMvQnJhbmNoaW5nOioqIFRoZSBjb2RlIGNoZWNrcyBgbWRkZXYtJmd0O3N5c2ZzX2FjdGl2ZWAsIGFuZCB1c2VzIGB0b191bm1lcmdlYCBhbmQgYHRvX3JlbW92ZV9ncm91cHNgIGZvciBkZWZlcnJhbC4gVGhlIGBtZGRldmAgc3RydWN0dXJlIGl0c2VsZiBpcyBremFsbG9jJiMzOTtkIHdoZW4gaXQmIzM5O3MgY3JlYXRlZCwgbWVhbmluZyBpdHMgZmllbGRzIGFyZSB6ZXJvZWQgb3V0LiBUaGUgZGVmZXJyYWwgcG9pbnRlcnMsIGB0b191bm1lcmdlYCBhbmQgYHRvX3JlbW92ZV9ncm91cHNgIGFyZSBpbml0aWFsaXplZCB0byBOVUxMIGFuZCBjbGVhcmVkIHRvIE5VTEwgaW4gYG1kZGV2X3VubG9ja2AuIFRoaXMgcmVkdWNlcyB0aGUgcmlzayBvZiBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IHJlbGllZi4KCjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwb3RlbnRpYWxseSBiZWluZyByZWFkLiBUaGUgZGVmZXJyYWwgbWVjaGFuaXNtcyBsb29rIGNsZWFuIGFuZCBzYWZlIGluIHRoYXQgcmVnYXJkLgoKNC4gICoqQnVmZmVyIEFjY2VzczoqKiBJIGRvbiYjMzk7dCBzZWUgYW55IGNvZGUgaW50cm9kdWNpbmcgYm91bmRzIGNoZWNrcywgbGVuZ3RoIG1hbmlwdWxhdGlvbnMsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gVGhlIHBhdGNoIG1vZGlmaWVzIHN5c2ZzIG9wZXJhdGlvbnMsIG5vdCBkYXRhIGJ1ZmZlcnMsIHdoaWNoIGlzIGEgZ29vZCBzaWduLgoKSW4gc3VtbWFyeSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSB1c2Ugb2Yga3phbGxvYyYjMzk7ZCBgbWRkZXZgIHN0cnVjdCwgTlVMTC1pbml0aWFsaXplZCBkZWZlcnJhbCBwb2ludGVycywgYW5kIGRlZmVycmVkIG9wZXJhdGlvbnMgbG9vayBsaWtlIGEgc29saWQgc29sdXRpb24gdG8gdGhlIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhvdXQgb3BlbmluZyB1cCBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgc3RpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBkZXRhaWxzLCBidXQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHBvc2l0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvbWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL21kLmM9NjMyMT1FWFBPUlRfU1lNQk9MX0dQTChtZF9pbml0X3N0YWNraW5nX2xpbWl0cyk7XG5kcml2ZXJzL21kL21kLmMtNjMyMi1cbmRyaXZlcnMvbWQvbWQuYzo2MzIzOnN0cnVjdCBtZGRldiAqbWRfYWxsb2MoZGV2X3QgZGV2LCBjaGFyICpuYW1lKVxuZHJpdmVycy9tZC9tZC5jLTYzMjQte1xuLS1cbmRyaXZlcnMvbWQvbWQuYy02NDMyLVxuZHJpdmVycy9tZC9tZC5jOjY0MzM6c3RhdGljIGludCBtZF9hbGxvY19hbmRfcHV0KGRldl90IGRldiwgY2hhciAqbmFtZSlcbmRyaXZlcnMvbWQvbWQuYy02NDM0LXtcbmRyaXZlcnMvbWQvbWQuYzo2NDM1Olx0c3RydWN0IG1kZGV2ICptZGRldiA9IG1kX2FsbG9jKGRldiwgbmFtZSk7XG5kcml2ZXJzL21kL21kLmMtNjQzNi1cbi0tXG5kcml2ZXJzL21kL21kLmM9NjQ0Nj1zdGF0aWMgdm9pZCBtZF9wcm9iZShkZXZfdCBkZXYpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTY0NTAtXHRpZiAoY3JlYXRlX29uX29wZW4pXG5kcml2ZXJzL21kL21kLmM6NjQ1MTpcdFx0bWRfYWxsb2NfYW5kX3B1dChkZXYsIE5VTEwpO1xuZHJpdmVycy9tZC9tZC5jLTY0NTItfVxuLS1cbmRyaXZlcnMvbWQvbWQuYz02NDU0PXN0YXRpYyBpbnQgYWRkX25hbWVkX2FycmF5KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy9tZC9tZC5jLTY0NzItXHRpZiAoc3RybmNtcChidWYsIFwmIzM0O21kX1wmIzM0OywgMykgPT0gMClcbmRyaXZlcnMvbWQvbWQuYzo2NDczOlx0XHRyZXR1cm4gbWRfYWxsb2NfYW5kX3B1dCgwLCBidWYpO1xuZHJpdmVycy9tZC9tZC5jLTY0NzQtXHRpZiAoc3RybmNtcChidWYsIFwmIzM0O21kXCYjMzQ7LCAyKSA9PSAwIFx1MDAyNlx1MDAyNlxuLS1cbmRyaXZlcnMvbWQvbWQuYy02NDc3LVx0ICAgIGRldm51bSBcdTAwM2M9IE1JTk9STUFTSylcbmRyaXZlcnMvbWQvbWQuYzo2NDc4Olx0XHRyZXR1cm4gbWRfYWxsb2NfYW5kX3B1dChNS0RFVihNRF9NQUpPUiwgZGV2bnVtKSwgTlVMTCk7XG5kcml2ZXJzL21kL21kLmMtNjQ3OS1cbi0tXG5kcml2ZXJzL21kL21kLmM9NzI4Nj1zdGF0aWMgdm9pZCBhdXRvcnVuX2RldmljZXMoaW50IHBhcnQpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTczMjUtXG5kcml2ZXJzL21kL21kLmM6NzMyNjpcdFx0bWRkZXYgPSBtZF9hbGxvYyhkZXYsIE5VTEwpO1xuZHJpdmVycy9tZC9tZC5jLTczMjctXHRcdGlmIChJU19FUlIobWRkZXYpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBtZF9hbGxvY2AgRGVmaW5pdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgYG1kX2FsbG9jYCBpcyBhY3R1YWxseSBkb2luZy4gU2luY2UgSSBjYW4mIzM5O3QgcmVseSBvbiBtZW1vcnksIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCB0byBwaW5wb2ludCB0aGUgZXhhY3QgZGVmaW5pdGlvbi4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbjsgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3MgY29udHJhY3QgYW5kIGJlaGF2aW9yIGlzIGNydWNpYWwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGVsc2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHBpdGZhbGxzIG9yIGNsZXZlciB0cmlja3MgYnVyaWVkIHdpdGhpbiB0aGUgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlIGNvZGUgZGlyZWN0bHkgaXMgZ29pbmcgdG8gc2F2ZSBtZSB0aW1lIGFuZCBlZmZvcnQgaW4gdGhlIGxvbmcgcnVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMjMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjMyMzpcdHN0cnVjdCBtZGRldiAqbWRfYWxsb2MoZGV2X3QgZGV2LCBjaGFyICpuYW1lKVxuNjMyNDpcdHtcbjYzMjU6XHRcdC8qXG42MzI2Olx0XHQgKiBJZiBkZXYgaXMgemVybywgbmFtZSBpcyB0aGUgbmFtZSBvZiBhIGRldmljZSB0byBhbGxvY2F0ZSB3aXRoXG42MzI3Olx0XHQgKiBhbiBhcmJpdHJhcnkgbWlub3IgbnVtYmVyLiAgSXQgd2lsbCBiZSBcJiMzNDttZF8/Pz9cJiMzNDtcbjYzMjg6XHRcdCAqIElmIGRldiBpcyBub24temVybyBpdCBtdXN0IGJlIGEgZGV2aWNlIG51bWJlciB3aXRoIGEgTUFKT1Igb2ZcbjYzMjk6XHRcdCAqIE1EX01BSk9SIG9yIG1kcF9tYWpvci4gIEluIHRoaXMgY2FzZSwgaWYgXCYjMzQ7bmFtZVwmIzM0OyBpcyBOVUxMLCB0aGVuXG42MzMwOlx0XHQgKiB0aGUgZGV2aWNlIGlzIGJlaW5nIGNyZWF0ZWQgYnkgb3BlbmluZyBhIG5vZGUgaW4gL2Rldi5cbjYzMzE6XHRcdCAqIElmIFwmIzM0O25hbWVcJiMzNDsgaXMgbm90IE5VTEwsIHRoZSBkZXZpY2UgaXMgYmVpbmcgY3JlYXRlZCBieVxuNjMzMjpcdFx0ICogd3JpdGluZyB0byAvc3lzL21vZHVsZS9tZF9tb2QvcGFyYW1ldGVycy9uZXdfYXJyYXkuXG42MzMzOlx0XHQgKi9cbjYzMzQ6XHRcdHN0YXRpYyBERUZJTkVfTVVURVgoZGlza3NfbXV0ZXgpO1xuNjMzNTpcdFx0c3RydWN0IG1kZGV2ICptZGRldjtcbjYzMzY6XHRcdHN0cnVjdCBnZW5kaXNrICpkaXNrO1xuNjMzNzpcdFx0aW50IHBhcnRpdGlvbmVkO1xuNjMzODpcdFx0aW50IHNoaWZ0O1xuNjMzOTpcdFx0aW50IHVuaXQ7XG42MzQwOlx0XHRpbnQgZXJyb3I7XG42MzQxOlx0XG42MzQyOlx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipEaXZpbmcgRGVlcGVyIGludG8gYG1kX2FsbG9jYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiAmIzM0O0NoZWNrIGZ1cnRoZXIgaW4gYG1kX2FsbG9jYC4mIzM0OyBUaGF0JiMzOTtzIHRoZSBjb3JlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgY2xlYXJseSB3YXNuJiMzOTt0IGVub3VnaCwgb3IgcGVyaGFwcyBJJiMzOTttIHNlZWluZyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHRoYXQgc29tZXRoaW5nIGlzIHVuY2xlYXIuIFdlJiMzOTt2ZSBnb3QgYSBzcGVjaWZpYyBmdW5jdGlvbiBvZiBpbnRlcmVzdCBoZXJlLCBgbWRfYWxsb2NgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGNyaXRpY2FsIHRoZXJlLCBzb21ldGhpbmcgbWlzc2VkIG9uIHRoZSBmaXJzdCBwYXNzLCBvciBzb21ldGhpbmcgdGhhdCBuZWVkcyB2ZXJpZmljYXRpb24uIEl0JiMzOTtzIHRpbWUgdG8gemVybyBpbiBhbmQgcmVhbGx5IGRpc3NlY3Qgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBsaWtlbHkgcmVnYXJkaW5nIGEgY2VydGFpbiBhc3BlY3QsIGJlY2F1c2UgaXQgcmVxdWlyZXMgZnVydGhlciBhdHRlbnRpb24uIFRpbWUgdG8gZ3JhYiBteSB0b29scyBhbmQgZGlnIGluLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIHVuY292ZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9tZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjM0MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MzQzOlx0XHQgKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgaW5zdGFuY2Ugb2YgdGhpcyBkZXZpY2UgdG8gYmUgY29tcGxldGVseVxuNjM0NDpcdFx0ICogcmVtb3ZlZCAobWRkZXZfZGVsYXllZF9kZWxldGUpLlxuNjM0NTpcdFx0ICovXG42MzQ2Olx0XHRmbHVzaF93b3JrcXVldWUobWRfbWlzY193cSk7XG42MzQ3Olx0XG42MzQ4Olx0XHRtdXRleF9sb2NrKFx1MDAyNmRpc2tzX211dGV4KTtcbjYzNDk6XHRcdG1kZGV2ID0gbWRkZXZfYWxsb2MoZGV2KTtcbjYzNTA6XHRcdGlmIChJU19FUlIobWRkZXYpKSB7XG42MzUxOlx0XHRcdGVycm9yID0gUFRSX0VSUihtZGRldik7XG42MzUyOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjYzNTM6XHRcdH1cbjYzNTQ6XHRcbjYzNTU6XHRcdHBhcnRpdGlvbmVkID0gKE1BSk9SKG1kZGV2LVx1MDAzZXVuaXQpICE9IE1EX01BSk9SKTtcbjYzNTY6XHRcdHNoaWZ0ID0gcGFydGl0aW9uZWQgPyBNZHBNaW5vclNoaWZ0IDogMDtcbjYzNTc6XHRcdHVuaXQgPSBNSU5PUihtZGRldi1cdTAwM2V1bml0KSBcdTAwM2VcdTAwM2Ugc2hpZnQ7XG42MzU4Olx0XG42MzU5Olx0XHRpZiAobmFtZSBcdTAwMjZcdTAwMjYgIWRldikge1xuNjM2MDpcdFx0XHQvKiBOZWVkIHRvIGVuc3VyZSB0aGF0ICYjMzk7bmFtZSYjMzk7IGlzIG5vdCBhIGR1cGxpY2F0ZS5cbjYzNjE6XHRcdFx0ICovXG42MzYyOlx0XHRcdHN0cnVjdCBtZGRldiAqbWRkZXYyO1xuNjM2MzpcdFx0XHRzcGluX2xvY2soXHUwMDI2YWxsX21kZGV2c19sb2NrKTtcbjYzNjQ6XHRcbjYzNjU6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtZGRldjIsIFx1MDAyNmFsbF9tZGRldnMsIGFsbF9tZGRldnMpXG42MzY2Olx0XHRcdFx0aWYgKG1kZGV2Mi1cdTAwM2VnZW5kaXNrIFx1MDAyNlx1MDAyNlxuNjM2NzpcdFx0XHRcdCAgICBzdHJjbXAobWRkZXYyLVx1MDAzZWdlbmRpc2stXHUwMDNlZGlza19uYW1lLCBuYW1lKSA9PSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBtZGRldl9hbGxvY2AqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbWRkZXZfYWxsb2NgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBgbWRkZXZgIHN0cnVjdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGFsbG9jYXRpb24gd29ya3MsIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZXhwZWN0ZWQgc3VycHJpc2VzIG9yIHBvdGVudGlhbCBnb3RjaGFzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGRpZmZlcmVudCBSQUlEIGxldmVscyBhbmQgYW55IGNvbnNpZGVyYXRpb25zIGZvciBsYXJnZSBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgTlVNQSBhcmNoaXRlY3R1cmVzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGl0JiMzOTtzIGRvaW5nIGFueSBpbml0aWFsaXphdGlvbiBvZiBjcml0aWNhbCBmaWVsZHMgb3Igc2V0dGluZyB1cCBhbnkgaW5pdGlhbCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgYG1kYCBsYXllciBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kZGV2X2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9tZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvbWQuYz04MjY9c3RhdGljIHN0cnVjdCBtZGRldiAqbWRkZXZfZmluZF9sb2NrZWQoZGV2X3QgdW5pdClcbi0tXG5kcml2ZXJzL21kL21kLmMtODM3LS8qIGZpbmQgYW4gdW51c2VkIHVuaXQgbnVtYmVyICovXG5kcml2ZXJzL21kL21kLmM6ODM4OnN0YXRpYyBkZXZfdCBtZGRldl9hbGxvY191bml0KHZvaWQpXG5kcml2ZXJzL21kL21kLmMtODM5LXtcbi0tXG5kcml2ZXJzL21kL21kLmMtODU3LVxuZHJpdmVycy9tZC9tZC5jOjg1ODpzdGF0aWMgc3RydWN0IG1kZGV2ICptZGRldl9hbGxvYyhkZXZfdCB1bml0KVxuZHJpdmVycy9tZC9tZC5jLTg1OS17XG4tLVxuZHJpdmVycy9tZC9tZC5jLTg4Ni1cdFx0ZXJyb3IgPSAtRU5PREVWO1xuZHJpdmVycy9tZC9tZC5jOjg4NzpcdFx0bmV3LVx1MDAzZXVuaXQgPSBtZGRldl9hbGxvY191bml0KCk7XG5kcml2ZXJzL21kL21kLmMtODg4LVx0XHRpZiAoIW5ldy1cdTAwM2V1bml0KVxuLS1cbmRyaXZlcnMvbWQvbWQuYz02MzIzPXN0cnVjdCBtZGRldiAqbWRfYWxsb2MoZGV2X3QgZGV2LCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbWQvbWQuYy02MzQ4LVx0bXV0ZXhfbG9jayhcdTAwMjZkaXNrc19tdXRleCk7XG5kcml2ZXJzL21kL21kLmM6NjM0OTpcdG1kZGV2ID0gbWRkZXZfYWxsb2MoZGV2KTtcbmRyaXZlcnMvbWQvbWQuYy02MzUwLVx0aWYgKElTX0VSUihtZGRldikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTUQgQ29yZSBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgcHJvYmxlbSBsaWtlbHkgcmVzaWRlcyB3aXRoaW4gdGhlIE1EIChNdWx0aXBsZSBEZXZpY2UpIGNvcmUsIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGRyaXZlcnMvbWQvbWQuY2AsIHNwZWNpZmljYWxseSBsaW5lcyA4NTgtODgwLiBUaGlzIGFyZWEgbGlrZWx5IGRlYWxzIHdpdGggYSBjcnVjaWFsIGFzcGVjdCBvZiB3aGF0ZXZlciBpc3N1ZSBJJiMzOTttIGNoYXNpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgdGhlIGNvZGUgd2l0aGluIHRoYXQgcmFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGF0IHNwZWNpZmljIGNvZGUgcGF0aCwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgb24gdGhlIG92ZXJhbGwgc3lzdGVtLiBUaW1lIHRvIHNlZSB3aGF0IHNlY3JldHMgdGhvc2UgbGluZXMgYXJlIGhpZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21kL21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1ODpcdHN0YXRpYyBzdHJ1Y3QgbWRkZXYgKm1kZGV2X2FsbG9jKGRldl90IHVuaXQpXG4gODU5Olx0e1xuIDg2MDpcdFx0c3RydWN0IG1kZGV2ICpuZXc7XG4gODYxOlx0XHRpbnQgZXJyb3I7XG4gODYyOlx0XG4gODYzOlx0XHRpZiAodW5pdCBcdTAwMjZcdTAwMjYgTUFKT1IodW5pdCkgIT0gTURfTUFKT1IpXG4gODY0Olx0XHRcdHVuaXQgXHUwMDI2PSB+KCgxIFx1MDAzY1x1MDAzYyBNZHBNaW5vclNoaWZ0KSAtIDEpO1xuIDg2NTpcdFxuIDg2NjpcdFx0bmV3ID0ga3phbGxvY19vYmooKm5ldyk7XG4gODY3Olx0XHRpZiAoIW5ldylcbiA4Njg6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gODY5Olx0XG4gODcwOlx0XHRlcnJvciA9IG1kZGV2X2luaXQobmV3KTtcbiA4NzE6XHRcdGlmIChlcnJvcilcbiA4NzI6XHRcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4gODczOlx0XG4gODc0Olx0XHRzcGluX2xvY2soXHUwMDI2YWxsX21kZGV2c19sb2NrKTtcbiA4NzU6XHRcdGlmICh1bml0KSB7XG4gODc2Olx0XHRcdGVycm9yID0gLUVFWElTVDtcbiA4Nzc6XHRcdFx0aWYgKG1kZGV2X2ZpbmRfbG9ja2VkKHVuaXQpKVxuIDg3ODpcdFx0XHRcdGdvdG8gb3V0X2Rlc3Ryb3lfbmV3O1xuIDg3OTpcdFx0XHRuZXctXHUwMDNldW5pdCA9IHVuaXQ7XG4gODgwOlx0XHRcdGlmIChNQUpPUih1bml0KSA9PSBNRF9NQUpPUilcbiA4ODE6XHRcdFx0XHRuZXctXHUwMDNlbWRfbWlub3IgPSBNSU5PUih1bml0KTtcbiA4ODI6XHRcdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjcwCgkJCQkJCQlvdXRwdXQ6IDIwNwoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgcHJldHR5IGdvb2QuIEl0IHN0YXJ0cyBieSB6ZXJvLWFsbG9jYXRpbmcgYSBgc3RydWN0IG1kZGV2YCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBpcyBhbHdheXMgYSBwbHVzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IHBvaW50ZXIgZmllbGRzLCBgdG9fdW5tZXJnZWAgYW5kIGB0b19yZW1vdmVfZ3JvdXBzYCwgd2l0aGluIHRoaXMgc3RydWN0dXJlLiBDcnVjaWFsbHksIHRoZXNlIHBvaW50ZXJzIGFyZSBpbml0aWFsaXplZCB0byBOVUxMIGZyb20gdGhlIG91dHNldC4gVGhhdCYjMzk7cyBhIHNvbGlkIGZvdW5kYXRpb24uCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBzeW5jaHJvbml6aW5nIHN5c2ZzIGF0dHJpYnV0ZSBncm91cCByZW1vdmFsLCBhaW1pbmcgdG8gcHJldmVudCBkZWFkbG9ja3MgaW52b2x2aW5nIHRoZSBgcmVjb25maWdfbXV0ZXhgLiBUaGF0IGNvbnRleHQgaXMgaW1wb3J0YW50LiBUaGUgcG9pbnRlcnMgYXJlICpzZXQqIGJlZm9yZSB0aGUgdW5sb2NrIGFuZCAqY2xlYXJlZCogb3IgcHJvY2Vzc2VkIHdpdGhpbiBgbWRkZXZfdW5sb2NrKClgLiBUaGlzIHBhdHRlcm4gaXMgd2hlcmUgdGhpbmdzIGNhbiBnZXQgdHJpY2t5IGlmIG5vdCBpbXBsZW1lbnRlZCBjb3JyZWN0bHksIGJ1dCB0aGUgcHJvdmlkZWQgY29udGV4dCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpGcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MuIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG5vIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBjb3VsZCBjYXVzZSBpc3N1ZXMsIG5vIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGNlcnRhaW5seSBubyBtZW1vcnkgbGVha3Mgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwYXRjaCBpcyB2ZXJ5IGZvY3VzZWQgb24gc3luY2hyb25pemF0aW9uIGNvbmNlcm5zIHJlbGF0ZWQgdG8gdGhlIHJlbW92YWwgb2Ygc3lzZnMgYXR0cmlidXRlIGdyb3VwcywgYW5kIGl0JiMzOTtzIGJ1aWx0IHVwb24gemVyby1pbml0aWFsaXplZCBkYXRhLgoKVGhpcyByZWFsbHkgc3VnZ2VzdHMgdGhlIGlzc3VlcyBhcmUgZ29pbmcgdG8gcmV2b2x2ZSBhcm91bmQgc3luY2hyb25pemF0aW9uLCBsb2NraW5nLCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBCdXQgdGhlIGdvb2QgbmV3cyBoZXJlIGlzIHRoYXQgdGhlc2UgYXJlIHByZWNpc2VseSB0aGUga2luZHMgb2YgcHJvYmxlbXMgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGV0ZWN0b3JzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gS01TQU4sIHdpdGggaXRzIGZvY3VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpc24mIzM5O3QgZ29pbmcgdG8gYmUgdGhlIG1vc3QgcmVsZXZhbnQgdG9vbCBoZXJlLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2gmIzM5O3MgYE5lZWRzS01TQU5gIGlzIHJpZ2h0ZnVsbHkgYGZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIGNoYW5nZXMgYXJlIGZvciBzeXNmcyBncm91cCBjbGVhbnVwIHN5bmNocm9uaXphdGlvbiB0byBwcmV2ZW50IGRlYWRsb2NrcyBhcm91bmQgYHJlY29uZmlnX211dGV4YCwgYHN0cnVjdCBtZGRldmAgaXMga3phbGxvYyYjMzk7ZCwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbWFuaXB1bGF0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgYXJlIGludHJvZHVjZWQ7IGFueSBjb25jdXJyZW5jeSwgTlVMTCBwb2ludGVyLCBvciBVQUYgaXNzdWVzIGFyZSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUC9zdGFuZGFyZCBkZXRlY3RvcnMuCgpUaW1lIHRvIGBzZXQtcmVzdWx0c2AuIExvb2tzIGxpa2UgYSBzb2xpZCBwaWVjZSBvZiB3b3JrIHNvIGZhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgYXR0cmlidXRlIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBsb2dpYyBpbiB0aGUgTUQgKFNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBtYW5pcHVsYXRpbmcgc3lzZnMgZmlsZXMgdW5kZXIgbWRkZXYtXHUwMDNlcmVjb25maWdfbXV0ZXguIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHN5c2ZzIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBieSByZWNvcmRpbmcgcG9pbnRlcnMgKHRvX3VubWVyZ2UgYW5kIHRvX3JlbW92ZV9ncm91cHMpIGluIHN0cnVjdCBtZGRldiBhbmQgcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9ucyBpbiBtZGRldl91bmxvY2soKSBhZnRlciByZWxlYXNpbmcgcmVjb25maWdfbXV0ZXguXG5cbnN0cnVjdCBtZGRldiBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHZpYSBremFsbG9jLCBhbmQgdGhlIG5ldyBwb2ludGVyIGZpZWxkcyBhcmUgcHJvcGVybHkgbWFuYWdlZCBhbmQgY2xlYXJlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyB0byB1c2Vyc3BhY2UsIGRhdGEgYnVmZmVycywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgZGVyZWZlcmVuY2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeXNmcyBhdHRyaWJ1dGUgZ3JvdXAgcmVtb3ZhbCBhbmQgdW5tZXJnaW5nIGxvZ2ljIGluIHRoZSBNRCAoU29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIHRvIGF2b2lkIGRlYWRsb2NrcyB3aGVuIG1hbmlwdWxhdGluZyBzeXNmcyBmaWxlcyB1bmRlciBtZGRldi1cdTAwM2VyZWNvbmZpZ19tdXRleC4gU3BlY2lmaWNhbGx5LCBpdCBkZWZlcnMgc3lzZnMgZ3JvdXAgcmVtb3ZhbCBhbmQgdW5tZXJnaW5nIGJ5IHJlY29yZGluZyBwb2ludGVycyAodG9fdW5tZXJnZSBhbmQgdG9fcmVtb3ZlX2dyb3VwcykgaW4gc3RydWN0IG1kZGV2IGFuZCBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb25zIGluIG1kZGV2X3VubG9jaygpIGFmdGVyIHJlbGVhc2luZyByZWNvbmZpZ19tdXRleC5cblxuc3RydWN0IG1kZGV2IGluc3RhbmNlcyBhcmUgemVyby1hbGxvY2F0ZWQgdmlhIGt6YWxsb2MsIGFuZCB0aGUgbmV3IHBvaW50ZXIgZmllbGRzIGFyZSBwcm9wZXJseSBtYW5hZ2VkIGFuZCBjbGVhcmVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29waWVzIHRvIHVzZXJzcGFjZSwgZGF0YSBidWZmZXJzLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciBkZXJlZmVyZW5jaW5nLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjM6NTAuNjY0MDQ0OTQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMjI3NDAzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURcIixcbiAgICBcIkJMS19ERVZfTURcIixcbiAgICBcIk1EX0JJVE1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvY2F0aW9uX3N0b3JlXCIsXG4gICAgXCJtZF9iaXRtYXBfc3lzZnNfZGVsXCIsXG4gICAgXCJtZGRldl91bmxvY2tcIixcbiAgICBcIm1kX2JpdG1hcF9kZXN0cm95XCIsXG4gICAgXCJtZF9iaXRtYXBfc2V0X25vbmVcIixcbiAgICBcInNldF9iaXRtYXBfZmlsZVwiLFxuICAgIFwidXBkYXRlX2FycmF5X2luZm9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN5c2ZzIGF0dHJpYnV0ZSBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgbG9naWMgaW4gdGhlIE1EIChTb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gbWFuaXB1bGF0aW5nIHN5c2ZzIGZpbGVzIHVuZGVyIG1kZGV2LVxcdTAwM2VyZWNvbmZpZ19tdXRleC4gU3BlY2lmaWNhbGx5LCBpdCBkZWZlcnMgc3lzZnMgZ3JvdXAgcmVtb3ZhbCBhbmQgdW5tZXJnaW5nIGJ5IHJlY29yZGluZyBwb2ludGVycyAodG9fdW5tZXJnZSBhbmQgdG9fcmVtb3ZlX2dyb3VwcykgaW4gc3RydWN0IG1kZGV2IGFuZCBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb25zIGluIG1kZGV2X3VubG9jaygpIGFmdGVyIHJlbGVhc2luZyByZWNvbmZpZ19tdXRleC5cXG5cXG5zdHJ1Y3QgbWRkZXYgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvYywgYW5kIHRoZSBuZXcgcG9pbnRlciBmaWVsZHMgYXJlIHByb3Blcmx5IG1hbmFnZWQgYW5kIGNsZWFyZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBkYXRhIGJ1ZmZlcnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIGRlcmVmZXJlbmNpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGluIGRyaXZlcnMvbWQvbWQuYyBhbmQgZHJpdmVycy9tZC9tZC1iaXRtYXAuYywgYWRqdXN0aW5nIGhvdyBiaXRtYXAgc3lzZnMgYXR0cmlidXRlIGdyb3VwcyBhcmUgdW5tZXJnZWQgYW5kIHJlbW92ZWQgZHVyaW5nIG1kZGV2X3VubG9jaywgbG9jYXRpb25fc3RvcmUsIG1kX2JpdG1hcF9kZXN0cm95LCBhbmQgbWRfYml0bWFwX3NldF9ub25lIHRvIHByZXZlbnQgbG9jay9zeXNmcyBkZWFkbG9ja3MgYW5kIHJhY2VzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWQgc3lzZnMgYXR0cmlidXRlcyBhbmQgaW9jdGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyMzo1MC42NjQwNDk2MDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTk2OTg1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YTA0NGIwMmQzNGQzZTIxZjE1OTZiYjYzNzJkMzMxOGNiNGM5YWFlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDA6MjM6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1iaXRtYXAuYyBiL2RyaXZlcnMvbWQvbWQtYml0bWFwLmNcXG5pbmRleCBiODMyNWNiMDlhMzcxLi4zYTk3YWE0NjNlY2NmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYml0bWFwLmNcXG4rKysgYi9kcml2ZXJzL21kL21kLWJpdG1hcC5jXFxuQEAgLTI2MzgsNiArMjYzOCwxMSBAQCBsb2NhdGlvbl9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuIFxcdFxcdHJldHVybiBydjtcXG4gXFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbiBcXG4rXFx0aWYgKG1kZGV2LVxcdTAwM2VzeXNmc19hY3RpdmUpIHtcXG4rXFx0XFx0cnYgPSAtRUJVU1k7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHRpZiAobWRkZXYtXFx1MDAzZXBlcnMpIHtcXG4gXFx0XFx0aWYgKG1kZGV2LVxcdTAwM2VyZWNvdmVyeSB8fCBtZGRldi1cXHUwMDNlc3luY190aHJlYWQpIHtcXG4gXFx0XFx0XFx0cnYgPSAtRUJVU1k7XFxuQEAgLTI2NTMsNyArMjY1OCw3IEBAIGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCBcXHUwMDI2bWRfYml0bWFwX2ludGVybmFsX2dyb3VwKTtcXG4rXFx0XFx0bWRkZXYtXFx1MDAzZXRvX3VubWVyZ2UgPSBcXHUwMDI2bWRfYml0bWFwX2ludGVybmFsX2dyb3VwO1xcbiBcXHRcXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcXG4gXFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9pZCA9IElEX0JJVE1BUF9OT05FO1xcbiBcXHRcXHRpZiAoIW1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMobWRkZXYpKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcXG5pbmRleCA2ODBiMzRhNjNjYjNkLi5lODNjYWVjMDk2M2M1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQuY1xcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xcbkBAIC02OTQsMTcgKzY5NCwyMCBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuIFxcdFxcdGtvYmplY3RfdWV2ZW50KFxcdTAwMjZtZGRldi1cXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfZGVsKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuK3N0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldixcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKmdyb3VwcylcXG4ge1xcbiBcXHRpbnQgbnJfZ3JvdXBzID0gMDtcXG4gXFxuLVxcdGZvciAobnJfZ3JvdXBzID0gMDsgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3Vwc1tucl9ncm91cHNdOyBucl9ncm91cHMrKylcXG4rXFx0aWYgKCFncm91cHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcysrKVxcbiBcXHRcXHQ7XFxuIFxcbiBcXHR3aGlsZSAoLS1ucl9ncm91cHMgXFx1MDAzZT0gMSlcXG4tXFx0XFx0c3lzZnNfdW5tZXJnZV9ncm91cChcXHUwMDI2bWRkZXYtXFx1MDAzZWtvYmosXFxuLVxcdFxcdFxcdFxcdCAgICBtZGRldi1cXHUwMDNlYml0bWFwX29wcy1cXHUwMDNlZ3JvdXBzW25yX2dyb3Vwc10pO1xcbi1cXHRzeXNmc19yZW1vdmVfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCBtZGRldi1cXHUwMDNlYml0bWFwX29wcy1cXHUwMDNlZ3JvdXBzWzBdKTtcXG4rXFx0XFx0c3lzZnNfdW5tZXJnZV9ncm91cChcXHUwMDI2bWRkZXYtXFx1MDAzZWtvYmosIGdyb3Vwc1tucl9ncm91cHNdKTtcXG4rXFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFxcdTAwMjZtZGRldi1cXHUwMDNla29iaiwgZ3JvdXBzWzBdKTtcXG4gfVxcbiBcXG4gYm9vbCBtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuQEAgLTkyMSw3ICs5MjQsNyBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbiBcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNm1kZGV2LVxcdTAwM2VkZWxldGluZykpXFxuIFxcdFxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNm1kZGV2LVxcdTAwM2VkZWxldGluZywgXFx1MDAyNmRlbGV0ZSk7XFxuIFxcbi1cXHRpZiAobWRkZXYtXFx1MDAzZXRvX3JlbW92ZSkge1xcbitcXHRpZiAobWRkZXYtXFx1MDAzZXRvX3JlbW92ZSB8fCBtZGRldi1cXHUwMDNldG9fdW5tZXJnZSB8fCBtZGRldi1cXHUwMDNldG9fcmVtb3ZlX2dyb3Vwcykge1xcbiBcXHRcXHQvKiBUaGVzZSBjYW5ub3QgYmUgcmVtb3ZlZCB1bmRlciByZWNvbmZpZ19tdXRleCBhc1xcbiBcXHRcXHQgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXhcXG4gXFx0XFx0ICogd2hpbGUgaG9sZGluZyB0aGUgZmlsZSB1bnJlbW92YWJsZSwgd2hpY2ggbGVhZHMgdG9cXG5AQCAtOTM1LDEyICs5MzgsMjEgQEAgdm9pZCBtZGRldl91bmxvY2soc3RydWN0IG1kZGV2ICptZGRldilcXG4gXFx0XFx0ICogaXMgc2Vlbi5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3JlbW92ZSA9IG1kZGV2LVxcdTAwM2V0b19yZW1vdmU7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3VubWVyZ2UgPSBtZGRldi1cXHUwMDNldG9fdW5tZXJnZTtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cXHUwMDNldG9fcmVtb3ZlX2dyb3VwcztcXG4rXFxuIFxcdFxcdG1kZGV2LVxcdTAwM2V0b19yZW1vdmUgPSBOVUxMO1xcbitcXHRcXHRtZGRldi1cXHUwMDNldG9fdW5tZXJnZSA9IE5VTEw7XFxuK1xcdFxcdG1kZGV2LVxcdTAwM2V0b19yZW1vdmVfZ3JvdXBzID0gTlVMTDtcXG4gXFx0XFx0bWRkZXYtXFx1MDAzZXN5c2ZzX2FjdGl2ZSA9IDE7XFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRkZXYtXFx1MDAzZXJlY29uZmlnX211dGV4KTtcXG4gXFxuIFxcdFxcdGlmIChtZGRldi1cXHUwMDNla29iai5zZCkge1xcbi1cXHRcXHRcXHRpZiAodG9fcmVtb3ZlICE9IFxcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKVxcbitcXHRcXHRcXHRpZiAodG9fdW5tZXJnZSlcXG4rXFx0XFx0XFx0XFx0c3lzZnNfdW5tZXJnZV9ncm91cChcXHUwMDI2bWRkZXYtXFx1MDAzZWtvYmosIHRvX3VubWVyZ2UpO1xcbitcXHRcXHRcXHRpZiAodG9fcmVtb3ZlX2dyb3VwcylcXG4rXFx0XFx0XFx0XFx0bWRfYml0bWFwX3N5c2ZzX2RlbChtZGRldiwgdG9fcmVtb3ZlX2dyb3Vwcyk7XFxuK1xcdFxcdFxcdGlmICh0b19yZW1vdmUgXFx1MDAyNlxcdTAwMjYgdG9fcmVtb3ZlICE9IFxcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKVxcbiBcXHRcXHRcXHRcXHRzeXNmc19yZW1vdmVfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCB0b19yZW1vdmUpO1xcbiBcXHRcXHRcXHRpZiAobWRkZXYtXFx1MDAzZXBlcnMgPT0gTlVMTCB8fFxcbiBcXHRcXHRcXHQgICAgbWRkZXYtXFx1MDAzZXBlcnMtXFx1MDAzZXN5bmNfcmVxdWVzdCA9PSBOVUxMKSB7XFxuQEAgLTY2MzIsMTMgKzY2NDQsMTkgQEAgc3RhdGljIHZvaWQgbWRfYml0bWFwX2Rlc3Ryb3koc3RydWN0IG1kZGV2ICptZGRldilcXG4ge1xcbiBcXHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSBcXHUwMDI2XFx1MDAyNiBtZGRldi1cXHUwMDNlYml0bWFwX29wcyBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3VwcylcXG4tXFx0XFx0bWRfYml0bWFwX3N5c2ZzX2RlbChtZGRldik7XFxuK1xcdFxcdG1kZGV2LVxcdTAwM2V0b19yZW1vdmVfZ3JvdXBzID0gbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3VwcztcXG4gXFxuIFxcdG1kX2JpdG1hcF9kZXN0cm95X25vc3lzZnMobWRkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc2V0X25vbmUoc3RydWN0IG1kZGV2ICptZGRldilcXG4ge1xcbitcXHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSBcXHUwMDI2XFx1MDAyNiBtZGRldi1cXHUwMDNlYml0bWFwX29wcyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3VwcyBcXHUwMDI2XFx1MDAyNiBtZGRldi1cXHUwMDNlYml0bWFwX29wcy1cXHUwMDNlZ3JvdXBzWzFdKVxcbitcXHRcXHRtZGRldi1cXHUwMDNldG9fdW5tZXJnZSA9IG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2Vncm91cHNbMV07XFxuK1xcbitcXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcXG4rXFxuIFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcXG4gXFx0aWYgKCFtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKG1kZGV2KSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC03ODY4LDEyICs3ODg2LDEwIEBAIHN0YXRpYyBpbnQgc2V0X2JpdG1hcF9maWxlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCBmZClcXG4gXFx0XFx0XFx0XFx0ZXJyID0gbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWxvYWQobWRkZXYpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRcXHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XFxuIFxcdFxcdFxcdFxcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XFxuIFxcdFxcdFxcdFxcdGZkID0gLTE7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIGlmIChmZCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0bWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpO1xcbiBcXHRcXHRcXHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtODE4Nyw3ICs4MjAzLDYgQEAgc3RhdGljIGludCB1cGRhdGVfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBtZHVfYXJyYXlfaW5mb190ICppbmZvKVxcbiBcXHRcXHRcXHRcXHRydiA9IG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2Vsb2FkKG1kZGV2KTtcXG4gXFxuIFxcdFxcdFxcdGlmIChydikge1xcbi1cXHRcXHRcXHRcXHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XFxuIFxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xcbiBcXHRcXHRcXHRcXHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xcbiBcXHRcXHRcXHR9XFxuQEAgLTgyMTYsNyArODIzMSw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbylcXG4gXFx0XFx0XFx0XFx0cHV0X2NsdXN0ZXJfb3BzKG1kZGV2KTtcXG4gXFx0XFx0XFx0XFx0bWRkZXYtXFx1MDAzZXNhZmVtb2RlX2RlbGF5ID0gREVGQVVMVF9TQUZFTU9ERV9ERUxBWTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XFxuIFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xcbiBcXHRcXHRcXHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxcbmluZGV4IGI2ZDJlODkyOWEwZjkuLmM4NjJkNjUxOWI4MWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9tZC5oXFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXFxuQEAgLTYwOCw2ICs2MDgsOCBAQCBzdHJ1Y3QgbWRkZXYge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0YWxsX21kZGV2cztcXG4gXFxuIFxcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXBcXHQqdG9fcmVtb3ZlO1xcbitcXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwXFx0KnRvX3VubWVyZ2U7XFxuK1xcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXBcXHQqY29uc3QgKnRvX3JlbW92ZV9ncm91cHM7XFxuIFxcbiBcXHRzdHJ1Y3QgYmlvX3NldFxcdFxcdFxcdGJpb19zZXQ7XFxuIFxcdHN0cnVjdCBiaW9fc2V0XFx0XFx0XFx0c3luY19zZXQ7IC8qIGZvciBzeW5jIG9wZXJhdGlvbnMgbGlrZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyMzo1Mi4zMjQzMzkwNDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMjQ4Njg4ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1EXCIsXG4gICAgXCJCTEtfREVWX01EXCIsXG4gICAgXCJNRF9CSVRNQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb2NhdGlvbl9zdG9yZVwiLFxuICAgIFwibWRfYml0bWFwX3N5c2ZzX2RlbFwiLFxuICAgIFwibWRkZXZfdW5sb2NrXCIsXG4gICAgXCJtZF9iaXRtYXBfZGVzdHJveVwiLFxuICAgIFwibWRfYml0bWFwX3NldF9ub25lXCIsXG4gICAgXCJzZXRfYml0bWFwX2ZpbGVcIixcbiAgICBcInVwZGF0ZV9hcnJheV9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gaW4gZHJpdmVycy9tZC9tZC5jIGFuZCBkcml2ZXJzL21kL21kLWJpdG1hcC5jLCBhZGp1c3RpbmcgaG93IGJpdG1hcCBzeXNmcyBhdHRyaWJ1dGUgZ3JvdXBzIGFyZSB1bm1lcmdlZCBhbmQgcmVtb3ZlZCBkdXJpbmcgbWRkZXZfdW5sb2NrLCBsb2NhdGlvbl9zdG9yZSwgbWRfYml0bWFwX2Rlc3Ryb3ksIGFuZCBtZF9iaXRtYXBfc2V0X25vbmUgdG8gcHJldmVudCBsb2NrL3N5c2ZzIGRlYWRsb2NrcyBhbmQgcmFjZXMuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtZCBzeXNmcyBhdHRyaWJ1dGVzIGFuZCBpb2N0bHMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWEwNDRiMDJkMzRkM2UyMWYxNTk2YmI2MzcyZDMzMThjYjRjOWFhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDA6MjM6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWJpdG1hcC5jIGIvZHJpdmVycy9tZC9tZC1iaXRtYXAuY1xuaW5kZXggYjgzMjVjYjA5YTM3MS4uM2E5N2FhNDYzZWNjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYml0bWFwLmNcbisrKyBiL2RyaXZlcnMvbWQvbWQtYml0bWFwLmNcbkBAIC0yNjM4LDYgKzI2MzgsMTEgQEAgbG9jYXRpb25fc3RvcmUoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0XHRyZXR1cm4gcnY7XG4gXHRub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG4gXG4rXHRpZiAobWRkZXYtXHUwMDNlc3lzZnNfYWN0aXZlKSB7XG4rXHRcdHJ2ID0gLUVCVVNZO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdGlmIChtZGRldi1cdTAwM2VwZXJzKSB7XG4gXHRcdGlmIChtZGRldi1cdTAwM2VyZWNvdmVyeSB8fCBtZGRldi1cdTAwM2VzeW5jX3RocmVhZCkge1xuIFx0XHRcdHJ2ID0gLUVCVVNZO1xuQEAgLTI2NTMsNyArMjY1OCw3IEBAIGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIFx1MDAyNm1kX2JpdG1hcF9pbnRlcm5hbF9ncm91cCk7XG4rXHRcdG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgPSBcdTAwMjZtZF9iaXRtYXBfaW50ZXJuYWxfZ3JvdXA7XG4gXHRcdG1kX2JpdG1hcF9kZXN0cm95X25vc3lzZnMobWRkZXYpO1xuIFx0XHRtZGRldi1cdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcbiBcdFx0aWYgKCFtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKG1kZGV2KSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcbmluZGV4IDY4MGIzNGE2M2NiM2QuLmU4M2NhZWMwOTYzYzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLmNcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xuQEAgLTY5NCwxNyArNjk0LDIwIEBAIHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19hZGQoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfZGVsKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4rc3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2RlbChzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKmdyb3VwcylcbiB7XG4gXHRpbnQgbnJfZ3JvdXBzID0gMDtcbiBcbi1cdGZvciAobnJfZ3JvdXBzID0gMDsgbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHNbbnJfZ3JvdXBzXTsgbnJfZ3JvdXBzKyspXG4rXHRpZiAoIWdyb3VwcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChucl9ncm91cHMgPSAwOyBncm91cHNbbnJfZ3JvdXBzXTsgbnJfZ3JvdXBzKyspXG4gXHRcdDtcbiBcbiBcdHdoaWxlICgtLW5yX2dyb3VwcyBcdTAwM2U9IDEpXG4tXHRcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaixcbi1cdFx0XHRcdCAgICBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1tucl9ncm91cHNdKTtcbi1cdHN5c2ZzX3JlbW92ZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1swXSk7XG4rXHRcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgZ3JvdXBzW25yX2dyb3Vwc10pO1xuK1x0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIGdyb3Vwc1swXSk7XG4gfVxuIFxuIGJvb2wgbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuQEAgLTkyMSw3ICs5MjQsNyBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm1kZGV2LVx1MDAzZWRlbGV0aW5nKSlcbiBcdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZtZGRldi1cdTAwM2VkZWxldGluZywgXHUwMDI2ZGVsZXRlKTtcbiBcbi1cdGlmIChtZGRldi1cdTAwM2V0b19yZW1vdmUpIHtcbitcdGlmIChtZGRldi1cdTAwM2V0b19yZW1vdmUgfHwgbWRkZXYtXHUwMDNldG9fdW5tZXJnZSB8fCBtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzKSB7XG4gXHRcdC8qIFRoZXNlIGNhbm5vdCBiZSByZW1vdmVkIHVuZGVyIHJlY29uZmlnX211dGV4IGFzXG4gXHRcdCAqIGFuIGFjY2VzcyB0byB0aGUgZmlsZXMgd2lsbCB0cnkgdG8gdGFrZSByZWNvbmZpZ19tdXRleFxuIFx0XHQgKiB3aGlsZSBob2xkaW5nIHRoZSBmaWxlIHVucmVtb3ZhYmxlLCB3aGljaCBsZWFkcyB0b1xuQEAgLTkzNSwxMiArOTM4LDIxIEBAIHZvaWQgbWRkZXZfdW5sb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4gXHRcdCAqIGlzIHNlZW4uXG4gXHRcdCAqL1xuIFx0XHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b19yZW1vdmUgPSBtZGRldi1cdTAwM2V0b19yZW1vdmU7XG4rXHRcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3VubWVyZ2UgPSBtZGRldi1cdTAwM2V0b191bm1lcmdlO1xuK1x0XHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpjb25zdCAqdG9fcmVtb3ZlX2dyb3VwcyA9IG1kZGV2LVx1MDAzZXRvX3JlbW92ZV9ncm91cHM7XG4rXG4gXHRcdG1kZGV2LVx1MDAzZXRvX3JlbW92ZSA9IE5VTEw7XG4rXHRcdG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgPSBOVUxMO1xuK1x0XHRtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzID0gTlVMTDtcbiBcdFx0bWRkZXYtXHUwMDNlc3lzZnNfYWN0aXZlID0gMTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZGV2LVx1MDAzZXJlY29uZmlnX211dGV4KTtcbiBcbiBcdFx0aWYgKG1kZGV2LVx1MDAzZWtvYmouc2QpIHtcbi1cdFx0XHRpZiAodG9fcmVtb3ZlICE9IFx1MDAyNm1kX3JlZHVuZGFuY3lfZ3JvdXApXG4rXHRcdFx0aWYgKHRvX3VubWVyZ2UpXG4rXHRcdFx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIHRvX3VubWVyZ2UpO1xuK1x0XHRcdGlmICh0b19yZW1vdmVfZ3JvdXBzKVxuK1x0XHRcdFx0bWRfYml0bWFwX3N5c2ZzX2RlbChtZGRldiwgdG9fcmVtb3ZlX2dyb3Vwcyk7XG4rXHRcdFx0aWYgKHRvX3JlbW92ZSBcdTAwMjZcdTAwMjYgdG9fcmVtb3ZlICE9IFx1MDAyNm1kX3JlZHVuZGFuY3lfZ3JvdXApXG4gXHRcdFx0XHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgdG9fcmVtb3ZlKTtcbiBcdFx0XHRpZiAobWRkZXYtXHUwMDNlcGVycyA9PSBOVUxMIHx8XG4gXHRcdFx0ICAgIG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0ID09IE5VTEwpIHtcbkBAIC02NjMyLDEzICs2NjQ0LDE5IEBAIHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9kZXN0cm95KHN0cnVjdCBtZGRldiAqbWRkZXYpXG4ge1xuIFx0aWYgKCFtZGRldl9pc19kbShtZGRldikgXHUwMDI2XHUwMDI2IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMgXHUwMDI2XHUwMDI2XG4gXHQgICAgbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHMpXG4tXHRcdG1kX2JpdG1hcF9zeXNmc19kZWwobWRkZXYpO1xuK1x0XHRtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHM7XG4gXG4gXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWRfYml0bWFwX3NldF9ub25lKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4ge1xuK1x0aWYgKCFtZGRldl9pc19kbShtZGRldikgXHUwMDI2XHUwMDI2IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMgXHUwMDI2XHUwMDI2XG4rXHQgICAgbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHMgXHUwMDI2XHUwMDI2IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzWzFdKVxuK1x0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHNbMV07XG4rXG4rXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcbitcbiBcdG1kZGV2LVx1MDAzZWJpdG1hcF9pZCA9IElEX0JJVE1BUF9OT05FO1xuIFx0aWYgKCFtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKG1kZGV2KSlcbiBcdFx0cmV0dXJuO1xuQEAgLTc4NjgsMTIgKzc4ODYsMTAgQEAgc3RhdGljIGludCBzZXRfYml0bWFwX2ZpbGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZkKVxuIFx0XHRcdFx0ZXJyID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vsb2FkKG1kZGV2KTtcbiBcbiBcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuIFx0XHRcdFx0ZmQgPSAtMTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoZmQgXHUwMDNjIDApIHtcbi1cdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0fVxuIFx0fVxuQEAgLTgxODcsNyArODIwMyw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbylcbiBcdFx0XHRcdHJ2ID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vsb2FkKG1kZGV2KTtcbiBcbiBcdFx0XHRpZiAocnYpIHtcbi1cdFx0XHRcdG1kX2JpdG1hcF9kZXN0cm95KG1kZGV2KTtcbiBcdFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7XG4gXHRcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuIFx0XHRcdH1cbkBAIC04MjE2LDcgKzgyMzEsNiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIG1kdV9hcnJheV9pbmZvX3QgKmluZm8pXG4gXHRcdFx0XHRwdXRfY2x1c3Rlcl9vcHMobWRkZXYpO1xuIFx0XHRcdFx0bWRkZXYtXHUwMDNlc2FmZW1vZGVfZGVsYXkgPSBERUZBVUxUX1NBRkVNT0RFX0RFTEFZO1xuIFx0XHRcdH1cbi1cdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID0gMDtcbiBcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oXG5pbmRleCBiNmQyZTg5MjlhMGY5Li5jODYyZDY1MTliODFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5oXG4rKysgYi9kcml2ZXJzL21kL21kLmhcbkBAIC02MDgsNiArNjA4LDggQEAgc3RydWN0IG1kZGV2IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0YWxsX21kZGV2cztcbiBcbiBcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXBcdCp0b19yZW1vdmU7XG4rXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwXHQqdG9fdW5tZXJnZTtcbitcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXBcdCpjb25zdCAqdG9fcmVtb3ZlX2dyb3VwcztcbiBcbiBcdHN0cnVjdCBiaW9fc2V0XHRcdFx0YmlvX3NldDtcbiBcdHN0cnVjdCBiaW9fc2V0XHRcdFx0c3luY19zZXQ7IC8qIGZvciBzeW5jIG9wZXJhdGlvbnMgbGlrZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjM6NTIuMzI0MzQwMjE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODA5MTkyNTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpbnV4IFNvZnR3YXJlIFJBSUQgKG1kKSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwncyBNRCBzdWJzeXN0ZW0uIEl0J3MgdG91Y2hpbmcgYGRyaXZlcnMvbWQvbWQtYml0bWFwLmNgLCBgZHJpdmVycy9tZC9tZC5jYCwgYW5kIGBkcml2ZXJzL21kL21kLmhgLCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvcmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgTUQgYml0bWFwIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHN5c2ZzIGludGVyYWN0aW9uLiBUaGlzIGhpbnRzIGF0IHNvbWUgcmVmaW5lbWVudHMgaW4gaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBiaXRtYXAgbGlmZWN5Y2xlIGFuZCBob3cgc3lzZnMgZ3JvdXBzIGFyZSBhZGRlZCwgcmVtb3ZlZCwgYW5kIHVubWVyZ2VkLCBlc3BlY2lhbGx5IGR1cmluZyBsb2NrL3VubG9jayBvcGVyYXRpb25zLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOlxuXG4xLiAgKipgZHJpdmVycy9tZC9tZC1iaXRtYXAuY2A6KiogVGhlIGBsb2NhdGlvbl9zdG9yZWAgZnVuY3Rpb24gbm93IGhhcyBhIHZpdGFsIGNoZWNrOiBgaWYgKG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSkgeyBydiA9IC1FQlVTWTsgZ290byBvdXQ7IH1gLiBUaGlzIHByZXZlbnRzIG1vZGlmaWNhdGlvbiB3aGVuIHRoZSBzeXN0ZW0gaXMgYWN0aXZlbHkgdXNpbmcgc3lzZnMuIFRoaXMgaXMgZ29vZCwgZW5zdXJpbmcgbm8gY29uY3VycmVudCBvcGVyYXRpb25zLiBBbHNvLCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHVubWVyZ2luZyB0aGUgZ3JvdXAsIGBzeXNmc191bm1lcmdlX2dyb3VwYCB3ZSBub3cgaGF2ZSBgbWRkZXYtXHUwMDNldG9fdW5tZXJnZSA9IFx1MDAyNm1kX2JpdG1hcF9pbnRlcm5hbF9ncm91cDtgLiBUaGF0IG1lYW5zIHdlIGFyZSBkZWZlcnJpbmcgdGhlIHVubWVyZ2Ugb3BlcmF0aW9uLlxuXG4yLiAgKipgZHJpdmVycy9tZC9tZC5jYDoqKiBTaWduaWZpY2FudCBjaGFuZ2VzIGhlcmUuIFRoZSBgbWRfYml0bWFwX3N5c2ZzX2RlbGAgZnVuY3Rpb24gaGFzIGJlZW4gcmVmYWN0b3JlZCB0byBhY2NlcHQgYSBncm91cCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEga2V5IHVwZGF0ZS4gVGhlIGBtZGRldl91bmxvY2tgIGZ1bmN0aW9uIG5vdyBoYW5kbGVzIGBtZGRldi1cdTAwM2V0b191bm1lcmdlYCBhbmQgYG1kZGV2LVx1MDAzZXRvX3JlbW92ZV9ncm91cHNgIG91dHNpZGUgdGhlIGByZWNvbmZpZ19tdXRleGAgaWYgYHN5c2ZzX2FjdGl2ZWAgaXMgMSwgd2hpY2ggaW1wbGllcyBzb21lIGltcHJvdmVtZW50cyBpbiBsb2NraW5nL2NvbmN1cnJlbmN5LiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG1kX2JpdG1hcF9zeXNmc19kZWxgLCB0aGUgZnVuY3Rpb25zIGBtZF9iaXRtYXBfZGVzdHJveWAsIGBtZF9iaXRtYXBfc2V0X25vbmVgLCBgc2V0X2JpdG1hcF9maWxlYCBhbmQgYHVwZGF0ZV9hcnJheV9pbmZvYCBhcmUgbm93IHNldHRpbmcgdGhlIGBtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzYCBvciBgbWRkZXYtXHUwMDNldG9fdW5tZXJnZWAgcGFyYW1ldGVycy4gU2VlbXMgbW9yZSBlZmZpY2llbnQuXG5cbjMuICAqKmBkcml2ZXJzL21kL21kLmhgOioqIFRoZSBhZGRpdGlvbiBvZiBgdG9fdW5tZXJnZWAgYW5kIGB0b19yZW1vdmVfZ3JvdXBzYCB0byB0aGUgYHN0cnVjdCBtZGRldmAgaXMgdGhlIHN1cHBvcnRpbmcgc3RydWN0dXJlLiBUaGVzZSBhcmUgdXNlZCB0byBkZWZlciB0aGUgc3lzZnMgZ3JvdXAgdW5tZXJnZSBhbmQgcmVtb3ZhbCBvcGVyYXRpb25zLlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyBmb3IgYm90aCBgbWQuY2AgYW5kIGBtZC1iaXRtYXAuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGNoYW5nZXMgYXJlIGV4cG9zZWQgdG8gdGhlIHVzZXIgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaGlzIHBhdGNoIGxvb2tzIGNsZWFuIGFuZCBpcyBsaWtlbHkgYWltZWQgYXQgaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBNRCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDowMC40MTYyNjgwNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI3MzA2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQkxLX0RFVl9NRHxDT05GSUdfTURfQklUTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9NYWtlZmlsZT0zMD1tZC1tb2QteVxcdCs9IG1kLm9cXG5kcml2ZXJzL21kL01ha2VmaWxlOjMxOm1kLW1vZC0kKENPTkZJR19NRF9CSVRNQVApXFx0Kz0gbWQtYml0bWFwLm9cXG5kcml2ZXJzL21kL01ha2VmaWxlLTMyLW1kLW1vZC0kKENPTkZJR19NRF9MTEJJVE1BUClcXHQrPSBtZC1sbGJpdG1hcC5vXFxuLS1cXG5kcml2ZXJzL21kL01ha2VmaWxlPTQ3PW9iai0kKENPTkZJR19CQ0FDSEUpXFx0XFx0Kz0gYmNhY2hlL1xcbmRyaXZlcnMvbWQvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX0JMS19ERVZfTUQpXFx0Kz0gbWQtbW9kLm9cXG5kcml2ZXJzL21kL01ha2VmaWxlOjQ5OmlmZXEgKCQoQ09ORklHX0JMS19ERVZfTUQpLHkpXFxuZHJpdmVycy9tZC9NYWtlZmlsZS01MC1vYmoteVxcdFxcdFxcdFxcdCs9IG1kLWF1dG9kZXRlY3Qub1xcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01MDI9c3RhdGljIHZvaWQgbWRfYml0bWFwX2ZpbGVfa2ljayhzdHJ1Y3QgYml0bWFwICpiaXRtYXApO1xcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNTAzLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NTA0OiNpZmRlZiBDT05GSUdfTURfQklUTUFQX0ZJTEVcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTUwNS1zdGF0aWMgdm9pZCBlbmRfYml0bWFwX3dyaXRlKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9NTU4PXN0YXRpYyBpbnQgcmVhZF9maWxlX3BhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgaW5kZXgsXFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYxOC19XFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzo2MTk6I2Vsc2UgLyogQ09ORklHX01EX0JJVE1BUF9GSUxFICovXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02MjAtc3RhdGljIHZvaWQgd3JpdGVfZmlsZV9wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB3YWl0KVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz02Mjg9c3RhdGljIHZvaWQgZnJlZV9idWZmZXJzKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02MzEtfVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NjMyOiNlbmRpZiAvKiBDT05GSUdfTURfQklUTUFQX0ZJTEUgKi9cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYzMy1cXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmg9MTcxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZF9iaXRtYXBfZW5kX3N5bmMoc3RydWN0IG1kZGV2ICptZGRldiwgc2VjdG9yX3Qgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuaC0xODEtXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuaDoxODI6I2lmZGVmIENPTkZJR19NRF9CSVRNQVBcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5oLTE4My1pbnQgbWRfYml0bWFwX2luaXQodm9pZCk7XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NzQzPWludCBtZGRldl9pbml0KHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtNzQ2LVxcbmRyaXZlcnMvbWQvbWQuYzo3NDc6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRF9CSVRNQVApKVxcbmRyaXZlcnMvbWQvbWQuYy03NDgtXFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9pZCA9IElEX0JJVE1BUF9OT05FO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTY2Njg9aW50IG1kX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTY4NzQtXFxuZHJpdmVycy9tZC9tZC5jOjY4NzU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01EX0JJVE1BUCkgXFx1MDAyNlxcdTAwMjYgIW1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5maWxlIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9tZC5jLTY4NzYtXFx0ICAgICFtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTc4MjA9c3RhdGljIGludCBzZXRfYml0bWFwX2ZpbGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZkKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTc4NDItXFxuZHJpdmVycy9tZC9tZC5jOjc4NDM6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRF9CSVRNQVBfRklMRSkpIHtcXG5kcml2ZXJzL21kL21kLmMtNzg0NC1cXHRcXHRcXHRwcl93YXJuKFxcXCIlczogYml0bWFwIGZpbGVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjAwLjQ2NzU0NzM4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTczNDEzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzICpjb25maWd1cmFibGUqIGhlcmUuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzLCBvZiBjb3Vyc2UsIGBkcml2ZXJzL21kL0tjb25maWdgLiBJdOKAmXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEknbSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRocm91Z2ggdGhhdCBmaWxlLiBJ4oCZbSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFdoYXQgZmVhdHVyZXMgYXJlIGdhdGVrZXB0IGJ5IHRob3NlIGNvbmZpZ3M/IFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgdGhlIGNvZGUgaGF2ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBrbm9icyBhbmQgZGlhbHMgYXQgbXkgZGlzcG9zYWwgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFzc3VtcHRpb25zIG9yIGRpZ2dpbmcgaW50byBjb2RlIHRoYXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvdXQgYW55d2F5LiBUaW1lIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg4MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjAyLjMyNDg5MDQyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU3MTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKE1EX0JJVE1BUHxCTEtfREVWX01EfE1EX0JJVE1BUF9GSUxFKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9LY29uZmlnPTEzPWlmIE1EXFxuZHJpdmVycy9tZC9LY29uZmlnLTE0LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxNTpjb25maWcgQkxLX0RFVl9NRFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiUkFJRCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTM5LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo0MDpjb25maWcgTURfQklUTUFQXFxuZHJpdmVycy9tZC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIk1EIFJBSUQgYml0bWFwIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWc9NjY9Y29uZmlnIE1EX0FVVE9ERVRFQ1RcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy03OS1cXG5kcml2ZXJzL21kL0tjb25maWc6ODA6Y29uZmlnIE1EX0JJVE1BUF9GSUxFXFxuZHJpdmVycy9tZC9LY29uZmlnLTgxLVxcdGJvb2wgXFxcIk1EIGJpdG1hcCBmaWxlIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDowMi4zNzI0NjczNzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDM4NjI0NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1EL1NvZnR3YXJlIFJBSUQ6IEEgUHJpbWUgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsIG9mIE1EL1NvZnR3YXJlIFJBSUQuIEZpcnN0LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBldmVuIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIHNldHVwcyBvciwgbW9yZSBpbXBvcnRhbnRseSwgdGhyb3VnaCBzeXprYWxsZXI/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gTUQgaXMgZW50aXJlbHkgdmlydHVhbCwgYSBibG9jayBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW5nIHZpYSBpb2N0bHMgKGxpa2UgYFNFVF9BUlJBWV9JTkZPYCwgYFJVTl9BUlJBWWAsIGV0Yy4pIGFuZCBzeXNmcyBhdHRyaWJ1dGVzIChlLmcuLCBgbWQvYml0bWFwL2xvY2F0aW9uYCkuIEFuZCBjcml0aWNhbGx5LCBzeXprYWxsZXIgKmFscmVhZHkqIGFjdGl2ZWx5IHRlc3RzIGl0LiBXZSdyZSBzZWVpbmcgdGVzdHMgd2l0aCB0aGUgYHN5el9tZF8qYCBwc2V1ZG8tc3lzY2FsbHMgYW5kIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgYC9kZXYvbWQqYCBkZXZpY2VzIHZpYSBpb2N0bHMsIHBsdXMgc3lzZnMgaW50ZXJhY3Rpb24uXG5cblNvLCBjb2RlIGNvdmVyYWdlIGlzIHRoZXJlOyB0aGUgbmV4dCBxdWVzdGlvbiwgYXJlIHRoZXNlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgd29ydGggb3VyIHRpbWU/IEFic29sdXRlbHksIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgdGhlc2UgYXJlICpleGFjdGx5KiB0aGUga2luZCBvZiBtb2RpZmljYXRpb25zIHRoYXQgcGlxdWUgbXkgaW50ZXJlc3QuIFdlJ3JlIHRhbGtpbmcgZGVhZGxvY2sgYW5kIHJhY2UgY29uZGl0aW9uIGZpeGVzLCBwbHVzIHJlc3RydWN0dXJpbmcgcmV2b2x2aW5nIGFyb3VuZCBzeXNmcyB1bm1lcmdpbmcvcmVtb3ZhbCBhbmQgbXV0ZXggbG9ja2luZywgd2hpY2ggc291bmRzIGNvbXBsZXgsIGJ1dCB2dWxuZXJhYmxlLiBUaGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoZXkgbWVudGlvbiwgbGlrZSBgbG9jYXRpb25fc3RvcmVgLCBgbWRkZXZfdW5sb2NrYCwgYG1kX2JpdG1hcF9kZXN0cm95YCwgYG1kX2JpdG1hcF9zZXRfbm9uZWAsIGBzZXRfYml0bWFwX2ZpbGVgLCBhbmQgYHVwZGF0ZV9hcnJheV9pbmZvYCBhcmUgYWxsIGludm9sdmVkIGluIGNyaXRpY2FsIG9wZXJhdGlvbnMgYW5kIGFyZSBoaWdoLXZhbHVlIHRhcmdldHMuXG5cblRoaXMgc2NyZWFtcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9tZC9tZC5jYCBhbmQgYGRyaXZlcnMvbWQvbWQtYml0bWFwLmNgLiBJJ20gZ29pbmcgdG8gc3RhcnQgcmVhZGluZyBhcm91bmQgdGhlIGxpbmVzIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQuIFRoaXMgc2hvdWxkIGFsbG93IG1lIHRvIGZvcm11bGF0ZSBzb21lIGh5cG90aGVzZXMgYWJvdXQgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MDYuODExMDk0MTY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0XFx0LypcXG4gNjkxOlxcdFxcdFxcdCAqIEluZm9ybSB1c2VyIHdpdGggS09CSl9DSEFOR0UgYWJvdXQgbmV3IGJpdG1hcFxcbiA2OTI6XFx0XFx0XFx0ICogYXR0cmlidXRlcy5cXG4gNjkzOlxcdFxcdFxcdCAqL1xcbiA2OTQ6XFx0XFx0XFx0a29iamVjdF91ZXZlbnQoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIDY5NTpcXHR9XFxuIDY5NjpcXHRcXG4gNjk3OlxcdHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldixcXG4gNjk4OlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNvbnN0ICpncm91cHMpXFxuIDY5OTpcXHR7XFxuIDcwMDpcXHRcXHRpbnQgbnJfZ3JvdXBzID0gMDtcXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0aWYgKCFncm91cHMpXFxuIDcwMzpcXHRcXHRcXHRyZXR1cm47XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdGZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcysrKVxcbiA3MDY6XFx0XFx0XFx0O1xcbiA3MDc6XFx0XFxuIDcwODpcXHRcXHR3aGlsZSAoLS1ucl9ncm91cHMgXFx1MDAzZT0gMSlcXG4gNzA5OlxcdFxcdFxcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCBncm91cHNbbnJfZ3JvdXBzXSk7XFxuIDcxMDpcXHRcXHRzeXNmc19yZW1vdmVfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCBncm91cHNbMF0pO1xcbiA3MTE6XFx0fVxcbiA3MTI6XFx0XFxuIDcxMzpcXHRib29sIG1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldilcXG4gNzE0OlxcdHtcXG4gNzE1OlxcdFxcdHN0cnVjdCBtZF9zdWJtb2R1bGVfaGVhZCAqaGVhZDtcXG4gNzE2OlxcdFxcbiA3MTc6XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzIFxcdTAwMjZcXHUwMDI2XFxuIDcxODpcXHRcXHQgICAgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWhlYWQuaWQgPT0gbWRkZXYtXFx1MDAzZWJpdG1hcF9pZClcXG4gNzE5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA3MjA6XFx0XFxuIDcyMTpcXHRcXHR4YV9sb2NrKFxcdTAwMjZtZF9zdWJtb2R1bGUpO1xcbiA3MjI6XFx0XFx0aGVhZCA9IHhhX2xvYWQoXFx1MDAyNm1kX3N1Ym1vZHVsZSwgbWRkZXYtXFx1MDAzZWJpdG1hcF9pZCk7XFxuIDcyMzpcXHRcXG4gNzI0OlxcdFxcdGlmICghaGVhZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDowNi44MTE0MTMxMThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ0MjE3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYG1kZGV2X3VubG9ja2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGBtZGRldl91bmxvY2tgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBpbiB0aGUgYGRyaXZlcnMvbWQvbWQuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHVubG9ja2luZyBhIG11bHRpLWRldmljZSBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1ldGFkYXRhLCBhbmQgd2hhdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2stcmVsYXRlZCBpc3N1ZXMgbWlnaHQgZXhpc3Qgd2l0aGluIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIHNlcXVlbmNlcyBhbmQgc2VlIGhvdyB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gdGhlIHVubG9jayBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6ODY3MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MDguODU1NjMyNjU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTI3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZC9tZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkyMDpcXHRcXHRzdHJ1Y3QgbWRfcmRldiAqcmRldjtcXG4gOTIxOlxcdFxcdHN0cnVjdCBtZF9yZGV2ICp0bXA7XFxuIDkyMjpcXHRcXHRMSVNUX0hFQUQoZGVsZXRlKTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZtZGRldi1cXHUwMDNlZGVsZXRpbmcpKVxcbiA5MjU6XFx0XFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2bWRkZXYtXFx1MDAzZWRlbGV0aW5nLCBcXHUwMDI2ZGVsZXRlKTtcXG4gOTI2OlxcdFxcbiA5Mjc6XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2V0b19yZW1vdmUgfHwgbWRkZXYtXFx1MDAzZXRvX3VubWVyZ2UgfHwgbWRkZXYtXFx1MDAzZXRvX3JlbW92ZV9ncm91cHMpIHtcXG4gOTI4OlxcdFxcdFxcdC8qIFRoZXNlIGNhbm5vdCBiZSByZW1vdmVkIHVuZGVyIHJlY29uZmlnX211dGV4IGFzXFxuIDkyOTpcXHRcXHRcXHQgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXhcXG4gOTMwOlxcdFxcdFxcdCAqIHdoaWxlIGhvbGRpbmcgdGhlIGZpbGUgdW5yZW1vdmFibGUsIHdoaWNoIGxlYWRzIHRvXFxuIDkzMTpcXHRcXHRcXHQgKiBhIGRlYWRsb2NrLlxcbiA5MzI6XFx0XFx0XFx0ICogU28gaG9sZCBzZXQgc3lzZnNfYWN0aXZlIHdoaWxlIHRoZSByZW1vdmUgaW4gaGFwcGVpbmcsXFxuIDkzMzpcXHRcXHRcXHQgKiBhbmQgYW55dGhpbmcgZWxzZSB3aGljaCBtaWdodCBzZXQgLVxcdTAwM2V0b19yZW1vdmUgb3IgbXlcXG4gOTM0OlxcdFxcdFxcdCAqIG90aGVyd2lzZSBjaGFuZ2UgdGhlIHN5c2ZzIG5hbWVzcGFjZSB3aWxsIGZhaWwgd2l0aFxcbiA5MzU6XFx0XFx0XFx0ICogLUVCVVNZIGlmIHN5c2ZzX2FjdGl2ZSBpcyBzdGlsbCBzZXQuXFxuIDkzNjpcXHRcXHRcXHQgKiBXZSBzZXQgc3lzZnNfYWN0aXZlIHVuZGVyIHJlY29uZmlnX211dGV4IGFuZCBlbHNld2hlcmVcXG4gOTM3OlxcdFxcdFxcdCAqIHRlc3QgaXQgdW5kZXIgdGhlIHNhbWUgbXV0ZXggdG8gZW5zdXJlIGl0cyBjb3JyZWN0IHZhbHVlXFxuIDkzODpcXHRcXHRcXHQgKiBpcyBzZWVuLlxcbiA5Mzk6XFx0XFx0XFx0ICovXFxuIDk0MDpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b19yZW1vdmUgPSBtZGRldi1cXHUwMDNldG9fcmVtb3ZlO1xcbiA5NDE6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdG9fdW5tZXJnZSA9IG1kZGV2LVxcdTAwM2V0b191bm1lcmdlO1xcbiA5NDI6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cXHUwMDNldG9fcmVtb3ZlX2dyb3VwcztcXG4gOTQzOlxcdFxcbiA5NDQ6XFx0XFx0XFx0bWRkZXYtXFx1MDAzZXRvX3JlbW92ZSA9IE5VTEw7XFxuIDk0NTpcXHRcXHRcXHRtZGRldi1cXHUwMDNldG9fdW5tZXJnZSA9IE5VTEw7XFxuIDk0NjpcXHRcXHRcXHRtZGRldi1cXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IE5VTEw7XFxuIDk0NzpcXHRcXHRcXHRtZGRldi1cXHUwMDNlc3lzZnNfYWN0aXZlID0gMTtcXG4gOTQ4OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRkZXYtXFx1MDAzZXJlY29uZmlnX211dGV4KTtcXG4gOTQ5OlxcdFxcbiA5NTA6XFx0XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2Vrb2JqLnNkKSB7XFxuIDk1MTpcXHRcXHRcXHRcXHRpZiAodG9fdW5tZXJnZSlcXG4gOTUyOlxcdFxcdFxcdFxcdFxcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCB0b191bm1lcmdlKTtcXG4gOTUzOlxcdFxcdFxcdFxcdGlmICh0b19yZW1vdmVfZ3JvdXBzKVxcbiA5NTQ6XFx0XFx0XFx0XFx0XFx0bWRfYml0bWFwX3N5c2ZzX2RlbChtZGRldiwgdG9fcmVtb3ZlX2dyb3Vwcyk7XFxuIDk1NTpcXHRcXHRcXHRcXHRpZiAodG9fcmVtb3ZlIFxcdTAwMjZcXHUwMDI2IHRvX3JlbW92ZSAhPSBcXHUwMDI2bWRfcmVkdW5kYW5jeV9ncm91cClcXG4gOTU2OlxcdFxcdFxcdFxcdFxcdHN5c2ZzX3JlbW92ZV9ncm91cChcXHUwMDI2bWRkZXYtXFx1MDAzZWtvYmosIHRvX3JlbW92ZSk7XFxuIDk1NzpcXHRcXHRcXHRcXHRpZiAobWRkZXYtXFx1MDAzZXBlcnMgPT0gTlVMTCB8fFxcbiA5NTg6XFx0XFx0XFx0XFx0ICAgIG1kZGV2LVxcdTAwM2VwZXJzLVxcdTAwM2VzeW5jX3JlcXVlc3QgPT0gTlVMTCkge1xcbiA5NTk6XFx0XFx0XFx0XFx0XFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFxcdTAwMjZtZGRldi1cXHUwMDNla29iaiwgXFx1MDAyNm1kX3JlZHVuZGFuY3lfZ3JvdXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDowOC44NTY3NTAzMThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzODQ3NTY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1kLWJpdG1hcC5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBCYXNlZCBvbiB0aGUgdGFzaywgSSB0aGluayB0aGUgaXNzdWUgbWlnaHQgbGllIHdpdGhpbiBgbWQtYml0bWFwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgbG9jYXRpb25fc3RvcmVgIGZ1bmN0aW9uIChvciBhIGZ1bmN0aW9uIGNsb3NlbHkgcmVsYXRlZCB0byB0aGF0IG9uZSkuIFRoaXMgc3VnZ2VzdHMgdGhhdCBzb21ldGhpbmcgaXMgZ29pbmcgd3Jvbmcgd2hlbiB3ZSdyZSB0cnlpbmcgdG8gc3RvcmUgb3IgdXBkYXRlIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGJpdG1hcCBzdHJ1Y3R1cmUuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24sIGEgYnVnIGluIGhvdyB3ZSdyZSBjYWxjdWxhdGluZyBvZmZzZXRzLCBzb21lIG1lbW9yeSBjb3JydXB0aW9uLCBvciBldmVuIGFuIGluY29ycmVjdCBiaXRtYXAgZm9ybWF0LiBHaXZlbiB0aGUgbmF0dXJlIG9mIGJpdG1hcCBoYW5kbGluZywgaXQncyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBhcmVhIGludm9sdmVzIGNyaXRpY2FsIG9wZXJhdGlvbnMgYXJvdW5kIGJsb2NrIG1hcHBpbmcgYW5kIG1ldGFkYXRhLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBjbHVlcyBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiBjYWxscy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBiZWluZyB1c2VkIChvciAqbm90KiB1c2VkISksIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIHRoYXQgc2VjdGlvbiBvZiBjb2RlLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGNoZWNraW5nIGhvdyB3ZSBhcmUgZW5zdXJpbmcgYXRvbWljaXR5IHdoZW4gd2UgYXJlIHdyaXRpbmcgdG8gdGhlIGJpdG1hcC4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJpdG1hcCBtZXRhZGF0YSBpcyBwcm9wZXJseSBzeW5jaHJvbml6ZWQuIExldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgZnVuY3Rpb24gYW5kIGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgc3RhcnQgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY0NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MTEuMjk1MjI4NTE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21kL21kLWJpdG1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2MzA6XFx0c3RhdGljIHNzaXplX3RcXG4yNjMxOlxcdGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4yNjMyOlxcdHtcXG4yNjMzOlxcdFxcdGludCBydjtcXG4yNjM0OlxcdFxcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzO1xcbjI2MzU6XFx0XFxuMjYzNjpcXHRcXHRydiA9IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpO1xcbjI2Mzc6XFx0XFx0aWYgKHJ2KVxcbjI2Mzg6XFx0XFx0XFx0cmV0dXJuIHJ2O1xcbjI2Mzk6XFx0XFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbjI2NDA6XFx0XFxuMjY0MTpcXHRcXHRpZiAobWRkZXYtXFx1MDAzZXN5c2ZzX2FjdGl2ZSkge1xcbjI2NDI6XFx0XFx0XFx0cnYgPSAtRUJVU1k7XFxuMjY0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjQ0OlxcdFxcdH1cXG4yNjQ1OlxcdFxcbjI2NDY6XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2VwZXJzKSB7XFxuMjY0NzpcXHRcXHRcXHRpZiAobWRkZXYtXFx1MDAzZXJlY292ZXJ5IHx8IG1kZGV2LVxcdTAwM2VzeW5jX3RocmVhZCkge1xcbjI2NDg6XFx0XFx0XFx0XFx0cnYgPSAtRUJVU1k7XFxuMjY0OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjUwOlxcdFxcdFxcdH1cXG4yNjUxOlxcdFxcdH1cXG4yNjUyOlxcdFxcbjI2NTM6XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2ViaXRtYXAgfHwgbWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLmZpbGUgfHxcXG4yNjU0OlxcdFxcdCAgICBtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0KSB7XFxuMjY1NTpcXHRcXHRcXHQvKiBiaXRtYXAgYWxyZWFkeSBjb25maWd1cmVkLiAgT25seSBvcHRpb24gaXMgdG8gY2xlYXIgaXQgKi9cXG4yNjU2OlxcdFxcdFxcdGlmIChzdHJuY21wKGJ1ZiwgXFxcIm5vbmVcXFwiLCA0KSAhPSAwKSB7XFxuMjY1NzpcXHRcXHRcXHRcXHRydiA9IC1FQlVTWTtcXG4yNjU4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2NTk6XFx0XFx0XFx0fVxcbjI2NjA6XFx0XFxuMjY2MTpcXHRcXHRcXHRtZGRldi1cXHUwMDNldG9fdW5tZXJnZSA9IFxcdTAwMjZtZF9iaXRtYXBfaW50ZXJuYWxfZ3JvdXA7XFxuMjY2MjpcXHRcXHRcXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcXG4yNjYzOlxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcXG4yNjY0OlxcdFxcdFxcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXFxuMjY2NTpcXHRcXHRcXHRcXHRnb3RvIG5vbmVfZXJyO1xcbjI2NjY6XFx0XFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7XFxuMjY2NzpcXHRcXHRcXHRpZiAobWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLmZpbGUpIHtcXG4yNjY4OlxcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmID0gbWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLmZpbGU7XFxuMjY2OTpcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlYml0bWFwX2luZm8uZmlsZSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjExLjI5NTM1NjIwNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI3OTMyMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBCaXRtYXAgTWFuYWdlbWVudCBhbmQgRmlsZSBVcGRhdGVzKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9ucy4gTGV0J3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgYml0bWFwcywgcGFydGljdWxhcmx5IGFyb3VuZCBudWxsaWZpY2F0aW9uIGFuZCBkZXN0cnVjdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmV2aXNpdCBgbWRfYml0bWFwX3NldF9ub25lYCwgZW5zdXJpbmcgaXQncyBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgbm90IGxlYXZpbmcgYW55IHVuZXhwZWN0ZWQgYXJ0aWZhY3RzLiBUaGVuLCBvZiBjb3Vyc2UsIGEgdGhvcm91Z2ggbG9vayBhdCBgbWRfYml0bWFwX2Rlc3Ryb3lgIGlzIG5lY2Vzc2FyeSB0byBndWFyYW50ZWUgcHJvcGVyIHJlc291cmNlIHJlbGVhc2UsIGF2b2lkaW5nIGFueSBwb3RlbnRpYWwgbGVha3MuIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZmlsZSBpdHNlbGYgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgdG8gZW5zdXJlIGBzZXRfYml0bWFwX2ZpbGVgIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBGaW5hbGx5LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGB1cGRhdGVfYXJyYXlfaW5mb2AgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVmbGVjdGluZyBhbnkgY2hhbmdlcyB0byB0aGUgYml0bWFwcyBvciB0aGUgZmlsZS4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgdHJhY2luZyB0aGUgZGF0YSBmbG93IHRvIGNvbmZpcm0gdGhlIHN5c3RlbSdzIGludGVncml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjEzLjQyMzI5MTEwMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTc4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZC9tZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY2MzA6XFx0XFxuNjYzMTpcXHRcXHRyZXR1cm4gMDtcXG42NjMyOlxcdH1cXG42NjMzOlxcdFxcbjY2MzQ6XFx0dm9pZCBtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuNjYzNTpcXHR7XFxuNjYzNjpcXHRcXHRpZiAoIW1kX2JpdG1hcF9yZWdpc3RlcmVkKG1kZGV2KSlcXG42NjM3OlxcdFxcdFxcdHJldHVybjtcXG42NjM4OlxcdFxcbjY2Mzk6XFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWRlc3Ryb3kobWRkZXYpO1xcbjY2NDA6XFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMgPSBOVUxMO1xcbjY2NDE6XFx0fVxcbjY2NDI6XFx0XFxuNjY0MzpcXHRzdGF0aWMgdm9pZCBtZF9iaXRtYXBfZGVzdHJveShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbjY2NDQ6XFx0e1xcbjY2NDU6XFx0XFx0aWYgKCFtZGRldl9pc19kbShtZGRldikgXFx1MDAyNlxcdTAwMjYgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMgXFx1MDAyNlxcdTAwMjZcXG42NjQ2OlxcdFxcdCAgICBtZGRldi1cXHUwMDNlYml0bWFwX29wcy1cXHUwMDNlZ3JvdXBzKVxcbjY2NDc6XFx0XFx0XFx0bWRkZXYtXFx1MDAzZXRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cXHUwMDNlYml0bWFwX29wcy1cXHUwMDNlZ3JvdXBzO1xcbjY2NDg6XFx0XFxuNjY0OTpcXHRcXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcXG42NjUwOlxcdH1cXG42NjUxOlxcdFxcbjY2NTI6XFx0c3RhdGljIHZvaWQgbWRfYml0bWFwX3NldF9ub25lKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuNjY1MzpcXHR7XFxuNjY1NDpcXHRcXHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSBcXHUwMDI2XFx1MDAyNiBtZGRldi1cXHUwMDNlYml0bWFwX29wcyBcXHUwMDI2XFx1MDAyNlxcbjY2NTU6XFx0XFx0ICAgIG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2Vncm91cHMgXFx1MDAyNlxcdTAwMjYgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3Vwc1sxXSlcXG42NjU2OlxcdFxcdFxcdG1kZGV2LVxcdTAwM2V0b191bm1lcmdlID0gbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3Vwc1sxXTtcXG42NjU3OlxcdFxcbjY2NTg6XFx0XFx0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XFxuNjY1OTpcXHRcXG42NjYwOlxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcXG42NjYxOlxcdFxcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXFxuNjY2MjpcXHRcXHRcXHRyZXR1cm47XFxuNjY2MzpcXHRcXG42NjY0OlxcdFxcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFxcdTAwMjZcXHUwMDI2IG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2Vncm91cHMpXFxuNjY2NTpcXHRcXHRcXHRtZF9iaXRtYXBfc3lzZnNfYWRkKG1kZGV2KTtcXG42NjY2OlxcdH1cXG42NjY3OlxcdFxcbjY2Njg6XFx0aW50IG1kX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbjY2Njk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoxMy40MjM1OTAyNDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzNjAyMjY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgc2V0X2JpdG1hcF9maWxlYC4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBpdCdzIGhhbmRsaW5nIGZpbGUgb3BlcmF0aW9ucyBjb3JyZWN0bHksIHNwZWNpZmljYWxseSBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBiaXRtYXAgZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4gYW5kIGxvYWRlZCBhY2NvcmRpbmcgdG8gdGhlIGV4cGVjdGVkIGZvcm1hdCBhbmQgdGhhdCBubyBtZW1vcnkgbGVha3MgYXJlIGhhcHBlbmluZyBkdXJpbmcgdGhhdCBvcGVyYXRpb24uIE5leHQgdXAgaXMgYHVwZGF0ZV9hcnJheV9pbmZvYC4gVGhpcyBvbmUgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCdzIGNvcnJlY3RseSByZWZsZWN0aW5nIGNoYW5nZXMgbWFkZSB0byB0aGUgYml0bWFwIGZpbGUncyBhc3NvY2lhdGVkIGRhdGEgd2l0aGluIHRoZSBhcnJheSwgZW5zdXJpbmcgc3luY2hyb25pemF0aW9uLCBhbmQgdGhhdCBpdCBpc24ndCBnZW5lcmF0aW5nIGFueSBpbmNvbnNpc3RlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoxNS4yNTk2MTQ3NjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3ODYwOlxcdFxcdFxcdGlmICghU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjc4NjE6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiJXM6IGVycm9yOiBiaXRtYXAgZmlsZSBtdXN0IGJlIGEgcmVndWxhciBmaWxlXFxcXG5cXFwiLFxcbjc4NjI6XFx0XFx0XFx0XFx0XFx0bWRuYW1lKG1kZGV2KSk7XFxuNzg2MzpcXHRcXHRcXHRcXHRlcnIgPSAtRUJBREY7XFxuNzg2NDpcXHRcXHRcXHR9IGVsc2UgaWYgKCEoZi1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEUpKSB7XFxuNzg2NTpcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCIlczogZXJyb3I6IGJpdG1hcCBmaWxlIG11c3Qgb3BlbiBmb3Igd3JpdGVcXFxcblxcXCIsXFxuNzg2NjpcXHRcXHRcXHRcXHRcXHRtZG5hbWUobWRkZXYpKTtcXG43ODY3OlxcdFxcdFxcdFxcdGVyciA9IC1FQkFERjtcXG43ODY4OlxcdFxcdFxcdH0gZWxzZSBpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmlub2RlLVxcdTAwM2VpX3dyaXRlY291bnQpICE9IDEpIHtcXG43ODY5OlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIiVzOiBlcnJvcjogYml0bWFwIGZpbGUgaXMgYWxyZWFkeSBpbiB1c2VcXFxcblxcXCIsXFxuNzg3MDpcXHRcXHRcXHRcXHRcXHRtZG5hbWUobWRkZXYpKTtcXG43ODcxOlxcdFxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG43ODcyOlxcdFxcdFxcdH1cXG43ODczOlxcdFxcdFxcdGlmIChlcnIpIHtcXG43ODc0OlxcdFxcdFxcdFxcdGZwdXQoZik7XFxuNzg3NTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjc4NzY6XFx0XFx0XFx0fVxcbjc4Nzc6XFx0XFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLmZpbGUgPSBmO1xcbjc4Nzg6XFx0XFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7IC8qIGZpbGUgb3ZlcnJpZGVzIG9mZnNldCAqL1xcbjc4Nzk6XFx0XFx0fSBlbHNlIGlmIChtZGRldi1cXHUwMDNlYml0bWFwID09IE5VTEwpXFxuNzg4MDpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDsgLyogY2Fubm90IHJlbW92ZSB3aGF0IGlzbid0IHRoZXJlICovXFxuNzg4MTpcXHRcXHRlcnIgPSAwO1xcbjc4ODI6XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2VwZXJzKSB7XFxuNzg4MzpcXHRcXHRcXHRpZiAoZmQgXFx1MDAzZT0gMCkge1xcbjc4ODQ6XFx0XFx0XFx0XFx0ZXJyID0gbWRfYml0bWFwX2NyZWF0ZShtZGRldik7XFxuNzg4NTpcXHRcXHRcXHRcXHRpZiAoIWVycilcXG43ODg2OlxcdFxcdFxcdFxcdFxcdGVyciA9IG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2Vsb2FkKG1kZGV2KTtcXG43ODg3OlxcdFxcbjc4ODg6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjc4ODk6XFx0XFx0XFx0XFx0XFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcXG43ODkwOlxcdFxcdFxcdFxcdFxcdGZkID0gLTE7XFxuNzg5MTpcXHRcXHRcXHRcXHR9XFxuNzg5MjpcXHRcXHRcXHR9IGVsc2UgaWYgKGZkIFxcdTAwM2MgMCkge1xcbjc4OTM6XFx0XFx0XFx0XFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcXG43ODk0OlxcdFxcdFxcdH1cXG43ODk1OlxcdFxcdH1cXG43ODk2OlxcdFxcbjc4OTc6XFx0XFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbjc4OTg6XFx0XFx0XFx0c3RydWN0IGZpbGUgKmYgPSBtZGRldi1cXHUwMDNlYml0bWFwX2luZm8uZmlsZTtcXG43ODk5OlxcdFxcdFxcdGlmIChmKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjE1LjI2MDEzMzA1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDUzOTM1ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYHVwZGF0ZV9hcnJheV9pbmZvYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB1cGRhdGVfYXJyYXlfaW5mb2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGFuZCBzY29wZS4gV2hhdCBleGFjdGx5IGlzIGl0IHVwZGF0aW5nPyBCYXNlZCBvbiB0aGUgbmFtZSwgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIHNvbWUgbWV0YWRhdGEgYWJvdXQgYW4gYXJyYXkuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ7IGlzIGl0IGEgc2ltcGxlIGFycmF5LCBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXksIGEgZHluYW1pY2FsbHktc2l6ZWQgYXJyYXksIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSBhIHNwYXJzZSBtYXRyaXg/IFRoZSBjb250ZXh0IG9mIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBtYXR0ZXJzIHRvby4gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBzeXN0ZW0gZm9yIGRhdGEgcHJvY2Vzc2luZywgZGF0YWJhc2UgbWFuYWdlbWVudCwgb3IgcGVyaGFwcyBhIG1vcmUgc3BlY2lhbGl6ZWQgYWxnb3JpdGhtP1xuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgcG90ZW50aWFsIGlzc3Vlcy4gQ291bGQgaXQgYmUgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGlmIGNhbGxlZCBmcmVxdWVudGx5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyBpZiBtdWx0aXBsZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBhcmUgbW9kaWZ5aW5nIHRoZSBhcnJheSBpbmZvcm1hdGlvbiBjb25jdXJyZW50bHk/IE1lbW9yeSB1c2FnZSBpcyBhbHNvIGEga2V5IGNvbmNlcm4uIERvZXMgdGhlIHVwZGF0ZSBwcm9jZXNzIGVmZmljaWVudGx5IHV0aWxpemUgbWVtb3J5LCBvciBjb3VsZCBpdCBsZWFkIHRvIGV4Y2Vzc2l2ZSBmcmFnbWVudGF0aW9uIG9yIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzPyBFcnJvciBoYW5kbGluZyBpcywgYXMgYWx3YXlzLCBwYXJhbW91bnQuIERvZXMgaXQgcm9idXN0bHkgaGFuZGxlIGVkZ2UgY2FzZXMsIHN1Y2ggYXMgaW52YWxpZCBhcnJheSBpbmRpY2VzLCBudWxsIHBvaW50ZXJzLCBvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcz8gQW5kIGZpbmFsbHksIGhvdyB3ZWxsIGRvZXMgdGhlIGNvZGUgaGFuZGxlIGNoYW5nZXMgdG8gdGhlIGFycmF5PyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgdGhlIGluZm9ybWF0aW9uIGlzIHZhbGlkP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI5MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MTcuNzE0MDcwNzc5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21kL21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODE4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODE4MDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG44MTgxOlxcdFxcdFxcdH1cXG44MTgyOlxcdFxcdFxcdGlmIChtZGRldi1cXHUwMDNlcmVjb3ZlcnkgfHwgbWRkZXYtXFx1MDAzZXN5bmNfdGhyZWFkKSB7XFxuODE4MzpcXHRcXHRcXHRcXHRydiA9IC1FQlVTWTtcXG44MTg0OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjgxODU6XFx0XFx0XFx0fVxcbjgxODY6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZXN0YXRlIFxcdTAwMjYgKDFcXHUwMDNjXFx1MDAzY01EX1NCX0JJVE1BUF9QUkVTRU5UKSkge1xcbjgxODc6XFx0XFx0XFx0XFx0LyogYWRkIHRoZSBiaXRtYXAgKi9cXG44MTg4OlxcdFxcdFxcdFxcdGlmIChtZGRldi1cXHUwMDNlYml0bWFwKSB7XFxuODE4OTpcXHRcXHRcXHRcXHRcXHRydiA9IC1FRVhJU1Q7XFxuODE5MDpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG44MTkxOlxcdFxcdFxcdFxcdH1cXG44MTkyOlxcdFxcdFxcdFxcdGlmIChtZGRldi1cXHUwMDNlYml0bWFwX2luZm8uZGVmYXVsdF9vZmZzZXQgPT0gMCkge1xcbjgxOTM6XFx0XFx0XFx0XFx0XFx0cnYgPSAtRUlOVkFMO1xcbjgxOTQ6XFx0XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuODE5NTpcXHRcXHRcXHRcXHR9XFxuODE5NjpcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID1cXG44MTk3OlxcdFxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5kZWZhdWx0X29mZnNldDtcXG44MTk4OlxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5zcGFjZSA9XFxuODE5OTpcXHRcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlYml0bWFwX2luZm8uZGVmYXVsdF9zcGFjZTtcXG44MjAwOlxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVA7XFxuODIwMTpcXHRcXHRcXHRcXHRydiA9IG1kX2JpdG1hcF9jcmVhdGUobWRkZXYpO1xcbjgyMDI6XFx0XFx0XFx0XFx0aWYgKCFydilcXG44MjAzOlxcdFxcdFxcdFxcdFxcdHJ2ID0gbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWxvYWQobWRkZXYpO1xcbjgyMDQ6XFx0XFxuODIwNTpcXHRcXHRcXHRcXHRpZiAocnYpIHtcXG44MjA2OlxcdFxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xcbjgyMDc6XFx0XFx0XFx0XFx0XFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcXG44MjA4OlxcdFxcdFxcdFxcdH1cXG44MjA5OlxcdFxcdFxcdH0gZWxzZSB7XFxuODIxMDpcXHRcXHRcXHRcXHRzdHJ1Y3QgbWRfYml0bWFwX3N0YXRzIHN0YXRzO1xcbjgyMTE6XFx0XFxuODIxMjpcXHRcXHRcXHRcXHRydiA9IG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2VnZXRfc3RhdHMobWRkZXYtXFx1MDAzZWJpdG1hcCwgXFx1MDAyNnN0YXRzKTtcXG44MjEzOlxcdFxcdFxcdFxcdGlmIChydilcXG44MjE0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjgyMTU6XFx0XFxuODIxNjpcXHRcXHRcXHRcXHRpZiAoc3RhdHMuZmlsZSkge1xcbjgyMTc6XFx0XFx0XFx0XFx0XFx0cnYgPSAtRUlOVkFMO1xcbjgyMTg6XFx0XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuODIxOTpcXHRcXHRcXHRcXHR9XFxuODIyMDpcXHRcXG44MjIxOlxcdFxcdFxcdFxcdGlmIChtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ubm9kZXMpIHtcXG44MjIyOlxcdFxcdFxcdFxcdFxcdC8qIGhvbGQgUFcgb24gYWxsIHRoZSBiaXRtYXAgbG9jayAqL1xcbjgyMjM6XFx0XFx0XFx0XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2VjbHVzdGVyX29wcy1cXHUwMDNlbG9ja19hbGxfYml0bWFwcyhtZGRldikgXFx1MDAzYz0gMCkge1xcbjgyMjQ6XFx0XFx0XFx0XFx0XFx0XFx0cHJfd2FybihcXFwibWQ6IGNhbid0IGNoYW5nZSBiaXRtYXAgdG8gbm9uZSBzaW5jZSB0aGUgYXJyYXkgaXMgaW4gdXNlIGJ5IG1vcmUgdGhhbiBvbmUgbm9kZVxcXFxuXFxcIik7XFxuODIyNTpcXHRcXHRcXHRcXHRcXHRcXHRydiA9IC1FUEVSTTtcXG44MjI2OlxcdFxcdFxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2VjbHVzdGVyX29wcy1cXHUwMDNldW5sb2NrX2FsbF9iaXRtYXBzKG1kZGV2KTtcXG44MjI3OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjgyMjg6XFx0XFx0XFx0XFx0XFx0fVxcbjgyMjk6XFx0XFxuODIzMDpcXHRcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ubm9kZXMgPSAwO1xcbjgyMzE6XFx0XFx0XFx0XFx0XFx0cHV0X2NsdXN0ZXJfb3BzKG1kZGV2KTtcXG44MjMyOlxcdFxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2VzYWZlbW9kZV9kZWxheSA9IERFRkFVTFRfU0FGRU1PREVfREVMQVk7XFxuODIzMzpcXHRcXHRcXHRcXHR9XFxuODIzNDpcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID0gMDtcXG44MjM1OlxcdFxcdFxcdFxcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XFxuODIzNjpcXHRcXHRcXHR9XFxuODIzNzpcXHRcXHR9XFxuODIzODpcXHRcXHRtZF91cGRhdGVfc2IobWRkZXYsIDEpO1xcbjgyMzk6XFx0XFx0cmV0dXJuIHJ2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoxNy43MTQ2MTEwMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTc2MTk0NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBSQUlEIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIG1ha2Ugc3VyZSB0aGlzIFJBSUQgc2V0dXAgaXMga29zaGVyLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBMZXQncyBtYWtlIHN1cmUgYENPTkZJR19CTEtfREVWX01EYCBhbmQgYENPTkZJR19NRF9CSVRNQVBgIGFyZSBzZXQgY29ycmVjdGx5LiBUaGVzZSBhcmUgdGhlIGZvdW5kYXRpb24sIHRoZSBiZWRyb2NrIGZvciB0aGUgd2hvbGUgdGhpbmcuIFdpdGhvdXQgdGhlc2UsIHdlJ3JlIG5vdCBnb2luZyBhbnl3aGVyZS5cblxuTm93IHRoYXQgSSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgY29uZmlncywgSSdsbCBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBgQkxLX0RFVl9NRGAgYW5kIGBNRF9CSVRNQVBgIGhhdmUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCAqbmVlZCogdG8gYmUgZW5hYmxlZCBmb3IgdGhlc2UgdG8gd29yayBwcm9wZXJseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBpcyBhYm91dCBlbnN1cmluZyBhIGNsZWFuIGFuZCBzdGFibGUgYnVpbGQsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGlzIGNydWNpYWwuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0OTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjE5LjY5MDgwNzgxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0ODI5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChNRHxCTEtfREVWX01EfE1EX0JJVE1BUClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZy01LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTURcXG5kcml2ZXJzL21kL0tjb25maWctNy1cXHRib29sIFxcXCJNdWx0aXBsZSBkZXZpY2VzIGRyaXZlciBzdXBwb3J0IChSQUlEIGFuZCBMVk0pXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnPTEzPWlmIE1EXFxuZHJpdmVycy9tZC9LY29uZmlnLTE0LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxNTpjb25maWcgQkxLX0RFVl9NRFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiUkFJRCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTM5LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo0MDpjb25maWcgTURfQklUTUFQXFxuZHJpdmVycy9tZC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIk1EIFJBSUQgYml0bWFwIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctNTQtXFxuZHJpdmVycy9tZC9LY29uZmlnOjU1OmNvbmZpZyBNRF9MTEJJVE1BUFxcbmRyaXZlcnMvbWQvS2NvbmZpZy01Ni1cXHRib29sIFxcXCJNRCBSQUlEIGxvY2tsZXNzIGJpdG1hcCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTY1LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo2Njpjb25maWcgTURfQVVUT0RFVEVDVFxcbmRyaXZlcnMvbWQvS2NvbmZpZy02Ny1cXHRib29sIFxcXCJBdXRvZGV0ZWN0IFJBSUQgYXJyYXlzIGR1cmluZyBrZXJuZWwgYm9vdFxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy03OS1cXG5kcml2ZXJzL21kL0tjb25maWc6ODA6Y29uZmlnIE1EX0JJVE1BUF9GSUxFXFxuZHJpdmVycy9tZC9LY29uZmlnLTgxLVxcdGJvb2wgXFxcIk1EIGJpdG1hcCBmaWxlIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTkwLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo5MTpjb25maWcgTURfTElORUFSXFxuZHJpdmVycy9tZC9LY29uZmlnLTkyLVxcdHRyaXN0YXRlIFxcXCJMaW5lYXIgKGFwcGVuZCkgbW9kZVxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMDMtXFxuZHJpdmVycy9tZC9LY29uZmlnOjEwNDpjb25maWcgTURfUkFJRDBcXG5kcml2ZXJzL21kL0tjb25maWctMTA1LVxcdHRyaXN0YXRlIFxcXCJSQUlELTAgKHN0cmlwaW5nKSBtb2RlXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTEyMy1cXG5kcml2ZXJzL21kL0tjb25maWc6MTI0OmNvbmZpZyBNRF9SQUlEMVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcIlJBSUQtMSAobWlycm9yaW5nKSBtb2RlXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTE0NS1cXG5kcml2ZXJzL21kL0tjb25maWc6MTQ2OmNvbmZpZyBNRF9SQUlEMTBcXG5kcml2ZXJzL21kL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJSQUlELTEwIChtaXJyb3JlZCBzdHJpcGluZykgbW9kZVxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNjQtXFxuZHJpdmVycy9tZC9LY29uZmlnOjE2NTpjb25maWcgTURfUkFJRDQ1NlxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNjYtXFx0dHJpc3RhdGUgXFxcIlJBSUQtNC9SQUlELTUvUkFJRC02IG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMjAxLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoyMDI6Y29uZmlnIE1EX0NMVVNURVJcXG5kcml2ZXJzL21kL0tjb25maWctMjAzLVxcdHRyaXN0YXRlIFxcXCJDbHVzdGVyIFN1cHBvcnQgZm9yIE1EXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoxOS43MzQyOTM0NjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2Njc3MTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTUQgU3Vic3lzdGVtIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgTURgIGxlYWRzIHRvIGBCTEtfREVWX01EYCwgd2hpY2ggdGhlbiBsZWFkcyB0byBgTURfQklUTUFQYC4gVGhpcyBnaXZlcyBtZSBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSByZWxldmFudCBrZXJuZWwgbW9kdWxlczogYE1EYCwgYEJMS19ERVZfTURgLCBhbmQgYE1EX0JJVE1BUGAuXG5cbk5leHQsIEknbSByZXZpZXdpbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBpZGVudGlmeSBrZXkgRm9jdXNTeW1ib2xzLiBUaGUgbGlzdCBpbmNsdWRlczogYGxvY2F0aW9uX3N0b3JlYCwgYG1kX2JpdG1hcF9zeXNmc19kZWxgLCBgbWRkZXZfdW5sb2NrYCwgYG1kX2JpdG1hcF9kZXN0cm95YCwgYG1kX2JpdG1hcF9zZXRfbm9uZWAsIGBzZXRfYml0bWFwX2ZpbGVgLCBhbmQgYHVwZGF0ZV9hcnJheV9pbmZvYC4gUmlnaHQgYXdheSwgSSBub3RlIHRoYXQgYG1kZGV2X3VubG9ja2AgaXMgZGVmaW5pdGVseSBNRCAoc29mdHdhcmUgUkFJRCkgc3BlY2lmaWMsIG5vdCBzb21lIGdsb2JhbGx5IHVzZWQga2VybmVsIGZ1bmN0aW9uLiBJbiBmYWN0LCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgTUQgc3Vic3lzdGVtLlxuXG5Ob3csIEknbSBkb3VibGUtY2hlY2tpbmcgd2hldGhlciB0aGlzIGlzIGZ1enppbmctd29ydGh5LiBMZXQncyBzZWU6IFRoZSBzdWJzeXN0ZW0gaXMgTGludXggTUQgKHNvZnR3YXJlIFJBSUQpLCBhIHZpcnR1YWwgYmxvY2sgZGV2aWNlIGV4cG9zZWQgdmlhIGBpb2N0bGAgYW5kIGBzeXNmc2AsIGFuZCBpdCBpcyBmdWxseSBlbXVsYXRlZC9zb2Z0d2FyZSBkZXZpY2UuIFRoZSBtb2RpZmljYXRpb25zIGludm9sdmUgc3lzZnMgYXR0cmlidXRlIGhhbmRsaW5nLCBiaXRtYXAgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGFuZCBtdXRleCB1bmxvY2tpbmcgbG9naWMuIEdpdmVuIHRoZXNlIGZhY3RvcnMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEknbGwgY29uc3RydWN0IG15IGZpbmFsIHJlc3BvbnNlIHVzaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDQ2LCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoyMy41MDEwNjY2NzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk1ODk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURcIixcbiAgICBcIkJMS19ERVZfTURcIixcbiAgICBcIk1EX0JJVE1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvY2F0aW9uX3N0b3JlXCIsXG4gICAgXCJtZF9iaXRtYXBfc3lzZnNfZGVsXCIsXG4gICAgXCJtZGRldl91bmxvY2tcIixcbiAgICBcIm1kX2JpdG1hcF9kZXN0cm95XCIsXG4gICAgXCJtZF9iaXRtYXBfc2V0X25vbmVcIixcbiAgICBcInNldF9iaXRtYXBfZmlsZVwiLFxuICAgIFwidXBkYXRlX2FycmF5X2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBpbiBkcml2ZXJzL21kL21kLmMgYW5kIGRyaXZlcnMvbWQvbWQtYml0bWFwLmMsIGFkanVzdGluZyBob3cgYml0bWFwIHN5c2ZzIGF0dHJpYnV0ZSBncm91cHMgYXJlIHVubWVyZ2VkIGFuZCByZW1vdmVkIGR1cmluZyBtZGRldl91bmxvY2ssIGxvY2F0aW9uX3N0b3JlLCBtZF9iaXRtYXBfZGVzdHJveSwgYW5kIG1kX2JpdG1hcF9zZXRfbm9uZSB0byBwcmV2ZW50IGxvY2svc3lzZnMgZGVhZGxvY2tzIGFuZCByYWNlcy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1kIHN5c2ZzIGF0dHJpYnV0ZXMgYW5kIGlvY3RscyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRFwiLFxuICAgIFwiQkxLX0RFVl9NRFwiLFxuICAgIFwiTURfQklUTUFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYXRpb25fc3RvcmVcIixcbiAgICBcIm1kX2JpdG1hcF9zeXNmc19kZWxcIixcbiAgICBcIm1kZGV2X3VubG9ja1wiLFxuICAgIFwibWRfYml0bWFwX2Rlc3Ryb3lcIixcbiAgICBcIm1kX2JpdG1hcF9zZXRfbm9uZVwiLFxuICAgIFwic2V0X2JpdG1hcF9maWxlXCIsXG4gICAgXCJ1cGRhdGVfYXJyYXlfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGluIGRyaXZlcnMvbWQvbWQuYyBhbmQgZHJpdmVycy9tZC9tZC1iaXRtYXAuYywgYWRqdXN0aW5nIGhvdyBiaXRtYXAgc3lzZnMgYXR0cmlidXRlIGdyb3VwcyBhcmUgdW5tZXJnZWQgYW5kIHJlbW92ZWQgZHVyaW5nIG1kZGV2X3VubG9jaywgbG9jYXRpb25fc3RvcmUsIG1kX2JpdG1hcF9kZXN0cm95LCBhbmQgbWRfYml0bWFwX3NldF9ub25lIHRvIHByZXZlbnQgbG9jay9zeXNmcyBkZWFkbG9ja3MgYW5kIHJhY2VzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWQgc3lzZnMgYXR0cmlidXRlcyBhbmQgaW9jdGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoyMy41NzMwMzA3MjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjEzNzQ1ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MjMuNTczNDI0MDg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTcyMTMzNDg4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN5c2ZzIGF0dHJpYnV0ZSBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgbG9naWMgaW4gdGhlIE1EIChTb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gbWFuaXB1bGF0aW5nIHN5c2ZzIGZpbGVzIHVuZGVyIG1kZGV2LVxcdTAwM2VyZWNvbmZpZ19tdXRleC4gU3BlY2lmaWNhbGx5LCBpdCBkZWZlcnMgc3lzZnMgZ3JvdXAgcmVtb3ZhbCBhbmQgdW5tZXJnaW5nIGJ5IHJlY29yZGluZyBwb2ludGVycyAodG9fdW5tZXJnZSBhbmQgdG9fcmVtb3ZlX2dyb3VwcykgaW4gc3RydWN0IG1kZGV2IGFuZCBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb25zIGluIG1kZGV2X3VubG9jaygpIGFmdGVyIHJlbGVhc2luZyByZWNvbmZpZ19tdXRleC5cXG5cXG5zdHJ1Y3QgbWRkZXYgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvYywgYW5kIHRoZSBuZXcgcG9pbnRlciBmaWVsZHMgYXJlIHByb3Blcmx5IG1hbmFnZWQgYW5kIGNsZWFyZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBkYXRhIGJ1ZmZlcnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIGRlcmVmZXJlbmNpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlhMDQ0YjAyZDM0ZDNlMjFmMTU5NmJiNjM3MmQzMzE4Y2I0YzlhYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAwOjIzOjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1iaXRtYXAuYyBiL2RyaXZlcnMvbWQvbWQtYml0bWFwLmNcbmluZGV4IGI4MzI1Y2IwOWEzNzEuLjNhOTdhYTQ2M2VjY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLWJpdG1hcC5jXG4rKysgYi9kcml2ZXJzL21kL21kLWJpdG1hcC5jXG5AQCAtMjYzOCw2ICsyNjM4LDExIEBAIGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdFx0cmV0dXJuIHJ2O1xuIFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuIFxuK1x0aWYgKG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSkge1xuK1x0XHRydiA9IC1FQlVTWTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHRpZiAobWRkZXYtXHUwMDNlcGVycykge1xuIFx0XHRpZiAobWRkZXYtXHUwMDNlcmVjb3ZlcnkgfHwgbWRkZXYtXHUwMDNlc3luY190aHJlYWQpIHtcbiBcdFx0XHRydiA9IC1FQlVTWTtcbkBAIC0yNjUzLDcgKzI2NTgsNyBAQCBsb2NhdGlvbl9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0c3lzZnNfdW5tZXJnZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBcdTAwMjZtZF9iaXRtYXBfaW50ZXJuYWxfZ3JvdXApO1xuK1x0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gXHUwMDI2bWRfYml0bWFwX2ludGVybmFsX2dyb3VwO1xuIFx0XHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcbiBcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7XG4gXHRcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jXG5pbmRleCA2ODBiMzRhNjNjYjNkLi5lODNjYWVjMDk2M2M1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXG4rKysgYi9kcml2ZXJzL21kL21kLmNcbkBAIC02OTQsMTcgKzY5NCwyMCBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4gXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2RlbChzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuK3N0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldixcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNvbnN0ICpncm91cHMpXG4ge1xuIFx0aW50IG5yX2dyb3VwcyA9IDA7XG4gXG4tXHRmb3IgKG5yX2dyb3VwcyA9IDA7IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcysrKVxuK1x0aWYgKCFncm91cHMpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcysrKVxuIFx0XHQ7XG4gXG4gXHR3aGlsZSAoLS1ucl9ncm91cHMgXHUwMDNlPSAxKVxuLVx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosXG4tXHRcdFx0XHQgICAgbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHNbbnJfZ3JvdXBzXSk7XG4tXHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHNbMF0pO1xuK1x0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIGdyb3Vwc1tucl9ncm91cHNdKTtcbitcdHN5c2ZzX3JlbW92ZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBncm91cHNbMF0pO1xuIH1cbiBcbiBib29sIG1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldilcbkBAIC05MjEsNyArOTI0LDcgQEAgdm9pZCBtZGRldl91bmxvY2soc3RydWN0IG1kZGV2ICptZGRldilcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtZGRldi1cdTAwM2VkZWxldGluZykpXG4gXHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2bWRkZXYtXHUwMDNlZGVsZXRpbmcsIFx1MDAyNmRlbGV0ZSk7XG4gXG4tXHRpZiAobWRkZXYtXHUwMDNldG9fcmVtb3ZlKSB7XG4rXHRpZiAobWRkZXYtXHUwMDNldG9fcmVtb3ZlIHx8IG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgfHwgbWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3Vwcykge1xuIFx0XHQvKiBUaGVzZSBjYW5ub3QgYmUgcmVtb3ZlZCB1bmRlciByZWNvbmZpZ19tdXRleCBhc1xuIFx0XHQgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXhcbiBcdFx0ICogd2hpbGUgaG9sZGluZyB0aGUgZmlsZSB1bnJlbW92YWJsZSwgd2hpY2ggbGVhZHMgdG9cbkBAIC05MzUsMTIgKzkzOCwyMSBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0XHQgKiBpcyBzZWVuLlxuIFx0XHQgKi9cbiBcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdG9fcmVtb3ZlID0gbWRkZXYtXHUwMDNldG9fcmVtb3ZlO1xuK1x0XHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b191bm1lcmdlID0gbWRkZXYtXHUwMDNldG9fdW5tZXJnZTtcbitcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzO1xuK1xuIFx0XHRtZGRldi1cdTAwM2V0b19yZW1vdmUgPSBOVUxMO1xuK1x0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gTlVMTDtcbitcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IE5VTEw7XG4gXHRcdG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSA9IDE7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGRldi1cdTAwM2VyZWNvbmZpZ19tdXRleCk7XG4gXG4gXHRcdGlmIChtZGRldi1cdTAwM2Vrb2JqLnNkKSB7XG4tXHRcdFx0aWYgKHRvX3JlbW92ZSAhPSBcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKVxuK1x0XHRcdGlmICh0b191bm1lcmdlKVxuK1x0XHRcdFx0c3lzZnNfdW5tZXJnZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCB0b191bm1lcmdlKTtcbitcdFx0XHRpZiAodG9fcmVtb3ZlX2dyb3VwcylcbitcdFx0XHRcdG1kX2JpdG1hcF9zeXNmc19kZWwobWRkZXYsIHRvX3JlbW92ZV9ncm91cHMpO1xuK1x0XHRcdGlmICh0b19yZW1vdmUgXHUwMDI2XHUwMDI2IHRvX3JlbW92ZSAhPSBcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKVxuIFx0XHRcdFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIHRvX3JlbW92ZSk7XG4gXHRcdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMgPT0gTlVMTCB8fFxuIFx0XHRcdCAgICBtZGRldi1cdTAwM2VwZXJzLVx1MDAzZXN5bmNfcmVxdWVzdCA9PSBOVUxMKSB7XG5AQCAtNjYzMiwxMyArNjY0NCwxOSBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfZGVzdHJveShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIHtcbiBcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzKVxuLVx0XHRtZF9iaXRtYXBfc3lzZnNfZGVsKG1kZGV2KTtcbitcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzO1xuIFxuIFx0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zZXRfbm9uZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIHtcbitcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1sxXSlcbitcdFx0bWRkZXYtXHUwMDNldG9fdW5tZXJnZSA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzWzFdO1xuK1xuK1x0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XG4rXG4gXHRtZGRldi1cdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcbiBcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXG4gXHRcdHJldHVybjtcbkBAIC03ODY4LDEyICs3ODg2LDEwIEBAIHN0YXRpYyBpbnQgc2V0X2JpdG1hcF9maWxlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCBmZClcbiBcdFx0XHRcdGVyciA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlbG9hZChtZGRldik7XG4gXG4gXHRcdFx0aWYgKGVycikge1xuLVx0XHRcdFx0bWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpO1xuIFx0XHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0XHRcdGZkID0gLTE7XG4gXHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKGZkIFx1MDAzYyAwKSB7XG4tXHRcdFx0bWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpO1xuIFx0XHRcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XG4gXHRcdH1cbiBcdH1cbkBAIC04MTg3LDcgKzgyMDMsNiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIG1kdV9hcnJheV9pbmZvX3QgKmluZm8pXG4gXHRcdFx0XHRydiA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlbG9hZChtZGRldik7XG4gXG4gXHRcdFx0aWYgKHJ2KSB7XG4tXHRcdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0XHRtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xuIFx0XHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0XHR9XG5AQCAtODIxNiw3ICs4MjMxLDYgQEAgc3RhdGljIGludCB1cGRhdGVfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBtZHVfYXJyYXlfaW5mb190ICppbmZvKVxuIFx0XHRcdFx0cHV0X2NsdXN0ZXJfb3BzKG1kZGV2KTtcbiBcdFx0XHRcdG1kZGV2LVx1MDAzZXNhZmVtb2RlX2RlbGF5ID0gREVGQVVMVF9TQUZFTU9ERV9ERUxBWTtcbiBcdFx0XHR9XG4tXHRcdFx0bWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpO1xuIFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7XG4gXHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxuaW5kZXggYjZkMmU4OTI5YTBmOS4uYzg2MmQ2NTE5YjgxZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtNjA4LDYgKzYwOCw4IEBAIHN0cnVjdCBtZGRldiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGFsbF9tZGRldnM7XG4gXG4gXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwXHQqdG9fcmVtb3ZlO1xuK1x0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cFx0KnRvX3VubWVyZ2U7XG4rXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwXHQqY29uc3QgKnRvX3JlbW92ZV9ncm91cHM7XG4gXG4gXHRzdHJ1Y3QgYmlvX3NldFx0XHRcdGJpb19zZXQ7XG4gXHRzdHJ1Y3QgYmlvX3NldFx0XHRcdHN5bmNfc2V0OyAvKiBmb3Igc3luYyBvcGVyYXRpb25zIGxpa2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjIzLjU3MzQyNTEzNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjgwMDEwOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2tkZXAgd2FybmluZywgbW9zdCBsaWtlbHkgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBpc3N1ZXMgZHVyaW5nIHRoZSByZW1vdmFsIG9mIHN5c2ZzIGdyb3VwcyBhbmQgZmlsZXMgd2l0aGluIHRoZSBNRCAoTXVsdGlwbGUgRGV2aWNlKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgYHJlY29uZmlnX211dGV4YC4gVGhlIGNvcmUgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCBkaXJlY3RseSByZW1vdmluZyBhIHN5c2ZzIGF0dHJpYnV0ZSBncm91cCB3aGlsZSBzeXNmcyBjYWxsYmFja3MgYXJlIHdhaXRpbmcgb24sIG9yIGhvbGRpbmcsIHRoZSBgcmVjb25maWdfbXV0ZXhgIGNhbiBsZWFkIHRvIGEgZGVhZGxvY2sgc2l0dWF0aW9uLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBhbmQgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHVzaW5nIGEgZGVmZXJyYWwgbWVjaGFuaXNtIHRvIGFkZHJlc3MgaXQuXG5cblRoZSBwcmltYXJ5IHN0cmF0ZWd5IGVtcGxveWVkIGhlcmUgaXMgdG8gZGVmZXIgdGhlIGBzeXNmc191bm1lcmdlX2dyb3VwYCBhbmQgYG1kX2JpdG1hcF9zeXNmc19kZWxgIG9wZXJhdGlvbnMuIEluc3RlYWQgb2YgcGVyZm9ybWluZyB0aGVtIGRpcmVjdGx5IHVuZGVyIHRoZSBsb2NrLCB0aGUgcGF0Y2ggc2V0cyBmbGFncyAoYG1kZGV2LVx1MDAzZXRvX3VubWVyZ2VgIGFuZCBgbWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3Vwc2ApIGFuZCBkZWZlcnMgdGhlIGFjdHVhbCByZW1vdmFsIHVudGlsIGFmdGVyIHRoZSBgcmVjb25maWdfbXV0ZXhgIGhhcyBiZWVuIHJlbGVhc2VkLCB3aGljaCBoYXBwZW5zIGluIGBtZGRldl91bmxvY2soKWAuIFRoaXMgbG9va3MgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2guXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZSBiZWZvcmUgY29uc2lkZXJpbmcgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIHNlZS4uLlxuXG4xLiAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uOioqIFRoZSBwYXRjaCBkb2Vzbid0IHNlZW0gdG8gdG91Y2ggYW55IGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4gTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIG91dCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGNvdWxkIGJlIGEgcHJvYmxlbS4gVGhpcyBpcyBnb29kLlxuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYy9CcmFuY2hpbmc6KiogVGhlIGNvZGUgY2hlY2tzIGBtZGRldi1cdTAwM2VzeXNmc19hY3RpdmVgLCBhbmQgdXNlcyBgdG9fdW5tZXJnZWAgYW5kIGB0b19yZW1vdmVfZ3JvdXBzYCBmb3IgZGVmZXJyYWwuIFRoZSBgbWRkZXZgIHN0cnVjdHVyZSBpdHNlbGYgaXMga3phbGxvYydkIHdoZW4gaXQncyBjcmVhdGVkLCBtZWFuaW5nIGl0cyBmaWVsZHMgYXJlIHplcm9lZCBvdXQuIFRoZSBkZWZlcnJhbCBwb2ludGVycywgYHRvX3VubWVyZ2VgIGFuZCBgdG9fcmVtb3ZlX2dyb3Vwc2AgYXJlIGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIGNsZWFyZWQgdG8gTlVMTCBpbiBgbWRkZXZfdW5sb2NrYC4gVGhpcyByZWR1Y2VzIHRoZSByaXNrIG9mIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgcmVsaWVmLlxuXG4zLiAgKipEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBJJ20gbm90IHNlZWluZyBhbnkgbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwb3RlbnRpYWxseSBiZWluZyByZWFkLiBUaGUgZGVmZXJyYWwgbWVjaGFuaXNtcyBsb29rIGNsZWFuIGFuZCBzYWZlIGluIHRoYXQgcmVnYXJkLlxuXG40LiAgKipCdWZmZXIgQWNjZXNzOioqIEkgZG9uJ3Qgc2VlIGFueSBjb2RlIGludHJvZHVjaW5nIGJvdW5kcyBjaGVja3MsIGxlbmd0aCBtYW5pcHVsYXRpb25zLCBvciBsb2dpYyB0aGF0IHdvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuIFRoZSBwYXRjaCBtb2RpZmllcyBzeXNmcyBvcGVyYXRpb25zLCBub3QgZGF0YSBidWZmZXJzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi5cblxuSW4gc3VtbWFyeSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHVzZSBvZiBremFsbG9jJ2QgYG1kZGV2YCBzdHJ1Y3QsIE5VTEwtaW5pdGlhbGl6ZWQgZGVmZXJyYWwgcG9pbnRlcnMsIGFuZCBkZWZlcnJlZCBvcGVyYXRpb25zIGxvb2sgbGlrZSBhIHNvbGlkIHNvbHV0aW9uIHRvIHRoZSBjb25jdXJyZW5jeSBpc3N1ZSB3aXRob3V0IG9wZW5pbmcgdXAgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMuIEknbGwgc3RpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBkZXRhaWxzLCBidXQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHBvc2l0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDIyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MjguODUzNDM5NDUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI0OTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kL21kLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9tZC5jPTYzMjE9RVhQT1JUX1NZTUJPTF9HUEwobWRfaW5pdF9zdGFja2luZ19saW1pdHMpO1xcbmRyaXZlcnMvbWQvbWQuYy02MzIyLVxcbmRyaXZlcnMvbWQvbWQuYzo2MzIzOnN0cnVjdCBtZGRldiAqbWRfYWxsb2MoZGV2X3QgZGV2LCBjaGFyICpuYW1lKVxcbmRyaXZlcnMvbWQvbWQuYy02MzI0LXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy02NDMyLVxcbmRyaXZlcnMvbWQvbWQuYzo2NDMzOnN0YXRpYyBpbnQgbWRfYWxsb2NfYW5kX3B1dChkZXZfdCBkZXYsIGNoYXIgKm5hbWUpXFxuZHJpdmVycy9tZC9tZC5jLTY0MzQte1xcbmRyaXZlcnMvbWQvbWQuYzo2NDM1OlxcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSBtZF9hbGxvYyhkZXYsIG5hbWUpO1xcbmRyaXZlcnMvbWQvbWQuYy02NDM2LVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTY0NDY9c3RhdGljIHZvaWQgbWRfcHJvYmUoZGV2X3QgZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTY0NTAtXFx0aWYgKGNyZWF0ZV9vbl9vcGVuKVxcbmRyaXZlcnMvbWQvbWQuYzo2NDUxOlxcdFxcdG1kX2FsbG9jX2FuZF9wdXQoZGV2LCBOVUxMKTtcXG5kcml2ZXJzL21kL21kLmMtNjQ1Mi19XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NjQ1ND1zdGF0aWMgaW50IGFkZF9uYW1lZF9hcnJheShjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTY0NzItXFx0aWYgKHN0cm5jbXAoYnVmLCBcXFwibWRfXFxcIiwgMykgPT0gMClcXG5kcml2ZXJzL21kL21kLmM6NjQ3MzpcXHRcXHRyZXR1cm4gbWRfYWxsb2NfYW5kX3B1dCgwLCBidWYpO1xcbmRyaXZlcnMvbWQvbWQuYy02NDc0LVxcdGlmIChzdHJuY21wKGJ1ZiwgXFxcIm1kXFxcIiwgMikgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTY0NzctXFx0ICAgIGRldm51bSBcXHUwMDNjPSBNSU5PUk1BU0spXFxuZHJpdmVycy9tZC9tZC5jOjY0Nzg6XFx0XFx0cmV0dXJuIG1kX2FsbG9jX2FuZF9wdXQoTUtERVYoTURfTUFKT1IsIGRldm51bSksIE5VTEwpO1xcbmRyaXZlcnMvbWQvbWQuYy02NDc5LVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTcyODY9c3RhdGljIHZvaWQgYXV0b3J1bl9kZXZpY2VzKGludCBwYXJ0KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTczMjUtXFxuZHJpdmVycy9tZC9tZC5jOjczMjY6XFx0XFx0bWRkZXYgPSBtZF9hbGxvYyhkZXYsIE5VTEwpO1xcbmRyaXZlcnMvbWQvbWQuYy03MzI3LVxcdFxcdGlmIChJU19FUlIobWRkZXYpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoyOC44OTg2OTMyMjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwOTQ3NjMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBtZF9hbGxvY2AgRGVmaW5pdGlvbioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBgbWRfYWxsb2NgIGlzIGFjdHVhbGx5IGRvaW5nLiBTaW5jZSBJIGNhbid0IHJlbHkgb24gbWVtb3J5LCBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBwaW5wb2ludCB0aGUgZXhhY3QgZGVmaW5pdGlvbi4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbjsgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24ncyBjb250cmFjdCBhbmQgYmVoYXZpb3IgaXMgY3J1Y2lhbCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBwaXRmYWxscyBvciBjbGV2ZXIgdHJpY2tzIGJ1cmllZCB3aXRoaW4gdGhlIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZSBjb2RlIGRpcmVjdGx5IGlzIGdvaW5nIHRvIHNhdmUgbWUgdGltZSBhbmQgZWZmb3J0IGluIHRoZSBsb25nIHJ1bi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjMwLjkwODE3MjA4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZC9tZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzMjMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYzMjM6XFx0c3RydWN0IG1kZGV2ICptZF9hbGxvYyhkZXZfdCBkZXYsIGNoYXIgKm5hbWUpXFxuNjMyNDpcXHR7XFxuNjMyNTpcXHRcXHQvKlxcbjYzMjY6XFx0XFx0ICogSWYgZGV2IGlzIHplcm8sIG5hbWUgaXMgdGhlIG5hbWUgb2YgYSBkZXZpY2UgdG8gYWxsb2NhdGUgd2l0aFxcbjYzMjc6XFx0XFx0ICogYW4gYXJiaXRyYXJ5IG1pbm9yIG51bWJlci4gIEl0IHdpbGwgYmUgXFxcIm1kXz8/P1xcXCJcXG42MzI4OlxcdFxcdCAqIElmIGRldiBpcyBub24temVybyBpdCBtdXN0IGJlIGEgZGV2aWNlIG51bWJlciB3aXRoIGEgTUFKT1Igb2ZcXG42MzI5OlxcdFxcdCAqIE1EX01BSk9SIG9yIG1kcF9tYWpvci4gIEluIHRoaXMgY2FzZSwgaWYgXFxcIm5hbWVcXFwiIGlzIE5VTEwsIHRoZW5cXG42MzMwOlxcdFxcdCAqIHRoZSBkZXZpY2UgaXMgYmVpbmcgY3JlYXRlZCBieSBvcGVuaW5nIGEgbm9kZSBpbiAvZGV2LlxcbjYzMzE6XFx0XFx0ICogSWYgXFxcIm5hbWVcXFwiIGlzIG5vdCBOVUxMLCB0aGUgZGV2aWNlIGlzIGJlaW5nIGNyZWF0ZWQgYnlcXG42MzMyOlxcdFxcdCAqIHdyaXRpbmcgdG8gL3N5cy9tb2R1bGUvbWRfbW9kL3BhcmFtZXRlcnMvbmV3X2FycmF5LlxcbjYzMzM6XFx0XFx0ICovXFxuNjMzNDpcXHRcXHRzdGF0aWMgREVGSU5FX01VVEVYKGRpc2tzX211dGV4KTtcXG42MzM1OlxcdFxcdHN0cnVjdCBtZGRldiAqbWRkZXY7XFxuNjMzNjpcXHRcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaztcXG42MzM3OlxcdFxcdGludCBwYXJ0aXRpb25lZDtcXG42MzM4OlxcdFxcdGludCBzaGlmdDtcXG42MzM5OlxcdFxcdGludCB1bml0O1xcbjYzNDA6XFx0XFx0aW50IGVycm9yO1xcbjYzNDE6XFx0XFxuNjM0MjpcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDozMC45MDg2NzcwOTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyMzI3OTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbWRfYWxsb2NgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBcIkNoZWNrIGZ1cnRoZXIgaW4gYG1kX2FsbG9jYC5cIiBUaGF0J3MgdGhlIGNvcmUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBjbGVhcmx5IHdhc24ndCBlbm91Z2gsIG9yIHBlcmhhcHMgSSdtIHNlZWluZyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHRoYXQgc29tZXRoaW5nIGlzIHVuY2xlYXIuIFdlJ3ZlIGdvdCBhIHNwZWNpZmljIGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUsIGBtZF9hbGxvY2AuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGVyZSdzIHNvbWV0aGluZyBjcml0aWNhbCB0aGVyZSwgc29tZXRoaW5nIG1pc3NlZCBvbiB0aGUgZmlyc3QgcGFzcywgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgdmVyaWZpY2F0aW9uLiBJdCdzIHRpbWUgdG8gemVybyBpbiBhbmQgcmVhbGx5IGRpc3NlY3Qgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHksIGxpa2VseSByZWdhcmRpbmcgYSBjZXJ0YWluIGFzcGVjdCwgYmVjYXVzZSBpdCByZXF1aXJlcyBmdXJ0aGVyIGF0dGVudGlvbi4gVGltZSB0byBncmFiIG15IHRvb2xzIGFuZCBkaWcgaW4uIExldCdzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDozMi44MzE5NTk0NTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzQzLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MzQzOlxcdFxcdCAqIFdhaXQgZm9yIGFueSBwcmV2aW91cyBpbnN0YW5jZSBvZiB0aGlzIGRldmljZSB0byBiZSBjb21wbGV0ZWx5XFxuNjM0NDpcXHRcXHQgKiByZW1vdmVkIChtZGRldl9kZWxheWVkX2RlbGV0ZSkuXFxuNjM0NTpcXHRcXHQgKi9cXG42MzQ2OlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShtZF9taXNjX3dxKTtcXG42MzQ3OlxcdFxcbjYzNDg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlza3NfbXV0ZXgpO1xcbjYzNDk6XFx0XFx0bWRkZXYgPSBtZGRldl9hbGxvYyhkZXYpO1xcbjYzNTA6XFx0XFx0aWYgKElTX0VSUihtZGRldikpIHtcXG42MzUxOlxcdFxcdFxcdGVycm9yID0gUFRSX0VSUihtZGRldik7XFxuNjM1MjpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuNjM1MzpcXHRcXHR9XFxuNjM1NDpcXHRcXG42MzU1OlxcdFxcdHBhcnRpdGlvbmVkID0gKE1BSk9SKG1kZGV2LVxcdTAwM2V1bml0KSAhPSBNRF9NQUpPUik7XFxuNjM1NjpcXHRcXHRzaGlmdCA9IHBhcnRpdGlvbmVkID8gTWRwTWlub3JTaGlmdCA6IDA7XFxuNjM1NzpcXHRcXHR1bml0ID0gTUlOT1IobWRkZXYtXFx1MDAzZXVuaXQpIFxcdTAwM2VcXHUwMDNlIHNoaWZ0O1xcbjYzNTg6XFx0XFxuNjM1OTpcXHRcXHRpZiAobmFtZSBcXHUwMDI2XFx1MDAyNiAhZGV2KSB7XFxuNjM2MDpcXHRcXHRcXHQvKiBOZWVkIHRvIGVuc3VyZSB0aGF0ICduYW1lJyBpcyBub3QgYSBkdXBsaWNhdGUuXFxuNjM2MTpcXHRcXHRcXHQgKi9cXG42MzYyOlxcdFxcdFxcdHN0cnVjdCBtZGRldiAqbWRkZXYyO1xcbjYzNjM6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZhbGxfbWRkZXZzX2xvY2spO1xcbjYzNjQ6XFx0XFxuNjM2NTpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1kZGV2MiwgXFx1MDAyNmFsbF9tZGRldnMsIGFsbF9tZGRldnMpXFxuNjM2NjpcXHRcXHRcXHRcXHRpZiAobWRkZXYyLVxcdTAwM2VnZW5kaXNrIFxcdTAwMjZcXHUwMDI2XFxuNjM2NzpcXHRcXHRcXHRcXHQgICAgc3RyY21wKG1kZGV2Mi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlZGlza19uYW1lLCBuYW1lKSA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjMyLjgzMjUyNTM1MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA0OTcxMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYG1kZGV2X2FsbG9jYCoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgbWRkZXZfYWxsb2NgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBgbWRkZXZgIHN0cnVjdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGFsbG9jYXRpb24gd29ya3MsIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZXhwZWN0ZWQgc3VycHJpc2VzIG9yIHBvdGVudGlhbCBnb3RjaGFzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGlmZmVyZW50IFJBSUQgbGV2ZWxzIGFuZCBhbnkgY29uc2lkZXJhdGlvbnMgZm9yIGxhcmdlIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBOVU1BIGFyY2hpdGVjdHVyZXMuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgaXQncyBkb2luZyBhbnkgaW5pdGlhbGl6YXRpb24gb2YgY3JpdGljYWwgZmllbGRzIG9yIHNldHRpbmcgdXAgYW55IGluaXRpYWwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgYG1kYCBsYXllciBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNDQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjM0LjczNzQ5ODg3M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzODIwODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRkZXZfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9tZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvbWQuYz04MjY9c3RhdGljIHN0cnVjdCBtZGRldiAqbWRkZXZfZmluZF9sb2NrZWQoZGV2X3QgdW5pdClcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy04MzctLyogZmluZCBhbiB1bnVzZWQgdW5pdCBudW1iZXIgKi9cXG5kcml2ZXJzL21kL21kLmM6ODM4OnN0YXRpYyBkZXZfdCBtZGRldl9hbGxvY191bml0KHZvaWQpXFxuZHJpdmVycy9tZC9tZC5jLTgzOS17XFxuLS1cXG5kcml2ZXJzL21kL21kLmMtODU3LVxcbmRyaXZlcnMvbWQvbWQuYzo4NTg6c3RhdGljIHN0cnVjdCBtZGRldiAqbWRkZXZfYWxsb2MoZGV2X3QgdW5pdClcXG5kcml2ZXJzL21kL21kLmMtODU5LXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy04ODYtXFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbmRyaXZlcnMvbWQvbWQuYzo4ODc6XFx0XFx0bmV3LVxcdTAwM2V1bml0ID0gbWRkZXZfYWxsb2NfdW5pdCgpO1xcbmRyaXZlcnMvbWQvbWQuYy04ODgtXFx0XFx0aWYgKCFuZXctXFx1MDAzZXVuaXQpXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NjMyMz1zdHJ1Y3QgbWRkZXYgKm1kX2FsbG9jKGRldl90IGRldiwgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy02MzQ4LVxcdG11dGV4X2xvY2soXFx1MDAyNmRpc2tzX211dGV4KTtcXG5kcml2ZXJzL21kL21kLmM6NjM0OTpcXHRtZGRldiA9IG1kZGV2X2FsbG9jKGRldik7XFxuZHJpdmVycy9tZC9tZC5jLTYzNTAtXFx0aWYgKElTX0VSUihtZGRldikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MzQuNzc5ODg2ODY3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDg1MDg0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNRCBDb3JlIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHByb2JsZW0gbGlrZWx5IHJlc2lkZXMgd2l0aGluIHRoZSBNRCAoTXVsdGlwbGUgRGV2aWNlKSBjb3JlLCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgZHJpdmVycy9tZC9tZC5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDg1OC04ODAuIFRoaXMgYXJlYSBsaWtlbHkgZGVhbHMgd2l0aCBhIGNydWNpYWwgYXNwZWN0IG9mIHdoYXRldmVyIGlzc3VlIEknbSBjaGFzaW5nLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgdGhlIGNvZGUgd2l0aGluIHRoYXQgcmFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUsIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoYXQgc3BlY2lmaWMgY29kZSBwYXRoLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBpcyBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFRpbWUgdG8gc2VlIHdoYXQgc2VjcmV0cyB0aG9zZSBsaW5lcyBhcmUgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MzYuNDg4Mzk3NjIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21kL21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODU4LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODU4OlxcdHN0YXRpYyBzdHJ1Y3QgbWRkZXYgKm1kZGV2X2FsbG9jKGRldl90IHVuaXQpXFxuIDg1OTpcXHR7XFxuIDg2MDpcXHRcXHRzdHJ1Y3QgbWRkZXYgKm5ldztcXG4gODYxOlxcdFxcdGludCBlcnJvcjtcXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0aWYgKHVuaXQgXFx1MDAyNlxcdTAwMjYgTUFKT1IodW5pdCkgIT0gTURfTUFKT1IpXFxuIDg2NDpcXHRcXHRcXHR1bml0IFxcdTAwMjY9IH4oKDEgXFx1MDAzY1xcdTAwM2MgTWRwTWlub3JTaGlmdCkgLSAxKTtcXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0bmV3ID0ga3phbGxvY19vYmooKm5ldyk7XFxuIDg2NzpcXHRcXHRpZiAoIW5ldylcXG4gODY4OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHRlcnJvciA9IG1kZGV2X2luaXQobmV3KTtcXG4gODcxOlxcdFxcdGlmIChlcnJvcilcXG4gODcyOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfbmV3O1xcbiA4NzM6XFx0XFxuIDg3NDpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmFsbF9tZGRldnNfbG9jayk7XFxuIDg3NTpcXHRcXHRpZiAodW5pdCkge1xcbiA4NzY6XFx0XFx0XFx0ZXJyb3IgPSAtRUVYSVNUO1xcbiA4Nzc6XFx0XFx0XFx0aWYgKG1kZGV2X2ZpbmRfbG9ja2VkKHVuaXQpKVxcbiA4Nzg6XFx0XFx0XFx0XFx0Z290byBvdXRfZGVzdHJveV9uZXc7XFxuIDg3OTpcXHRcXHRcXHRuZXctXFx1MDAzZXVuaXQgPSB1bml0O1xcbiA4ODA6XFx0XFx0XFx0aWYgKE1BSk9SKHVuaXQpID09IE1EX01BSk9SKVxcbiA4ODE6XFx0XFx0XFx0XFx0bmV3LVxcdTAwM2VtZF9taW5vciA9IE1JTk9SKHVuaXQpO1xcbiA4ODI6XFx0XFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDozNi40ODg5MDE5MDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI5Nzg1Mzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHByZXR0eSBnb29kLiBJdCBzdGFydHMgYnkgemVyby1hbGxvY2F0aW5nIGEgYHN0cnVjdCBtZGRldmAgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgYWx3YXlzIGEgcGx1cy4gVGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBwb2ludGVyIGZpZWxkcywgYHRvX3VubWVyZ2VgIGFuZCBgdG9fcmVtb3ZlX2dyb3Vwc2AsIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gQ3J1Y2lhbGx5LCB0aGVzZSBwb2ludGVycyBhcmUgaW5pdGlhbGl6ZWQgdG8gTlVMTCBmcm9tIHRoZSBvdXRzZXQuIFRoYXQncyBhIHNvbGlkIGZvdW5kYXRpb24uXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHN5bmNocm9uaXppbmcgc3lzZnMgYXR0cmlidXRlIGdyb3VwIHJlbW92YWwsIGFpbWluZyB0byBwcmV2ZW50IGRlYWRsb2NrcyBpbnZvbHZpbmcgdGhlIGByZWNvbmZpZ19tdXRleGAuIFRoYXQgY29udGV4dCBpcyBpbXBvcnRhbnQuIFRoZSBwb2ludGVycyBhcmUgKnNldCogYmVmb3JlIHRoZSB1bmxvY2sgYW5kICpjbGVhcmVkKiBvciBwcm9jZXNzZWQgd2l0aGluIGBtZGRldl91bmxvY2soKWAuIFRoaXMgcGF0dGVybiBpcyB3aGVyZSB0aGluZ3MgY2FuIGdldCB0cmlja3kgaWYgbm90IGltcGxlbWVudGVkIGNvcnJlY3RseSwgYnV0IHRoZSBwcm92aWRlZCBjb250ZXh0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuRnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLCBJIHNlZSBubyBpbW1lZGlhdGUgcmVkIGZsYWdzLiBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG5vIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBjb3VsZCBjYXVzZSBpc3N1ZXMsIG5vIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGNlcnRhaW5seSBubyBtZW1vcnkgbGVha3Mgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwYXRjaCBpcyB2ZXJ5IGZvY3VzZWQgb24gc3luY2hyb25pemF0aW9uIGNvbmNlcm5zIHJlbGF0ZWQgdG8gdGhlIHJlbW92YWwgb2Ygc3lzZnMgYXR0cmlidXRlIGdyb3VwcywgYW5kIGl0J3MgYnVpbHQgdXBvbiB6ZXJvLWluaXRpYWxpemVkIGRhdGEuXG5cblRoaXMgcmVhbGx5IHN1Z2dlc3RzIHRoZSBpc3N1ZXMgYXJlIGdvaW5nIHRvIHJldm9sdmUgYXJvdW5kIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gQnV0IHRoZSBnb29kIG5ld3MgaGVyZSBpcyB0aGF0IHRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIGtpbmRzIG9mIHByb2JsZW1zIHRoYXQgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIEtNU0FOLCB3aXRoIGl0cyBmb2N1cyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXNuJ3QgZ29pbmcgdG8gYmUgdGhlIG1vc3QgcmVsZXZhbnQgdG9vbCBoZXJlLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCdzIGBOZWVkc0tNU0FOYCBpcyByaWdodGZ1bGx5IGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjaGFuZ2VzIGFyZSBmb3Igc3lzZnMgZ3JvdXAgY2xlYW51cCBzeW5jaHJvbml6YXRpb24gdG8gcHJldmVudCBkZWFkbG9ja3MgYXJvdW5kIGByZWNvbmZpZ19tdXRleGAsIGBzdHJ1Y3QgbWRkZXZgIGlzIGt6YWxsb2MnZCwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbWFuaXB1bGF0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgYXJlIGludHJvZHVjZWQ7IGFueSBjb25jdXJyZW5jeSwgTlVMTCBwb2ludGVyLCBvciBVQUYgaXNzdWVzIGFyZSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUC9zdGFuZGFyZCBkZXRlY3RvcnMuXG5cblRpbWUgdG8gYHNldC1yZXN1bHRzYC4gTG9va3MgbGlrZSBhIHNvbGlkIHBpZWNlIG9mIHdvcmsgc28gZmFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjcwLCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjQwLjc4Njc1ODQzOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgYXR0cmlidXRlIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBsb2dpYyBpbiB0aGUgTUQgKFNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBtYW5pcHVsYXRpbmcgc3lzZnMgZmlsZXMgdW5kZXIgbWRkZXYtXFx1MDAzZXJlY29uZmlnX211dGV4LiBTcGVjaWZpY2FsbHksIGl0IGRlZmVycyBzeXNmcyBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgYnkgcmVjb3JkaW5nIHBvaW50ZXJzICh0b191bm1lcmdlIGFuZCB0b19yZW1vdmVfZ3JvdXBzKSBpbiBzdHJ1Y3QgbWRkZXYgYW5kIHBlcmZvcm1pbmcgdGhlIG9wZXJhdGlvbnMgaW4gbWRkZXZfdW5sb2NrKCkgYWZ0ZXIgcmVsZWFzaW5nIHJlY29uZmlnX211dGV4LlxcblxcbnN0cnVjdCBtZGRldiBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHZpYSBremFsbG9jLCBhbmQgdGhlIG5ldyBwb2ludGVyIGZpZWxkcyBhcmUgcHJvcGVybHkgbWFuYWdlZCBhbmQgY2xlYXJlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyB0byB1c2Vyc3BhY2UsIGRhdGEgYnVmZmVycywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgZGVyZWZlcmVuY2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgYXR0cmlidXRlIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBsb2dpYyBpbiB0aGUgTUQgKFNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBtYW5pcHVsYXRpbmcgc3lzZnMgZmlsZXMgdW5kZXIgbWRkZXYtXFx1MDAzZXJlY29uZmlnX211dGV4LiBTcGVjaWZpY2FsbHksIGl0IGRlZmVycyBzeXNmcyBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgYnkgcmVjb3JkaW5nIHBvaW50ZXJzICh0b191bm1lcmdlIGFuZCB0b19yZW1vdmVfZ3JvdXBzKSBpbiBzdHJ1Y3QgbWRkZXYgYW5kIHBlcmZvcm1pbmcgdGhlIG9wZXJhdGlvbnMgaW4gbWRkZXZfdW5sb2NrKCkgYWZ0ZXIgcmVsZWFzaW5nIHJlY29uZmlnX211dGV4LlxcblxcbnN0cnVjdCBtZGRldiBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHZpYSBremFsbG9jLCBhbmQgdGhlIG5ldyBwb2ludGVyIGZpZWxkcyBhcmUgcHJvcGVybHkgbWFuYWdlZCBhbmQgY2xlYXJlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyB0byB1c2Vyc3BhY2UsIGRhdGEgYnVmZmVycywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgZGVyZWZlcmVuY2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjdt6p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 00:22:14 +0000 UTC FinishedAt: 2026-09-07 00:24:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD", "BLK_DEV_MD", "MD_BITMAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MD", "BLK_DEV_MD", "MD_BITMAP" ], "series_id": "2f40b633-e673-4a59-8001-b17a1ddde93b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "location_store", "md_bitmap_sysfs_del", "mddev_unlock", "md_bitmap_destroy", "md_bitmap_set_none", "set_bitmap_file", "update_array_info" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01EJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7TURfQklUTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYXRpb25fc3RvcmUmIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX3N5c2ZzX2RlbCYjMzQ7LAogICAgJiMzNDttZGRldl91bmxvY2smIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX3NldF9ub25lJiMzNDssCiAgICAmIzM0O3NldF9iaXRtYXBfZmlsZSYjMzQ7LAogICAgJiMzNDt1cGRhdGVfYXJyYXlfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5c2ZzIGF0dHJpYnV0ZSBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgbG9naWMgaW4gdGhlIE1EIChTb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gbWFuaXB1bGF0aW5nIHN5c2ZzIGZpbGVzIHVuZGVyIG1kZGV2LVx1MDAzZXJlY29uZmlnX211dGV4LiBTcGVjaWZpY2FsbHksIGl0IGRlZmVycyBzeXNmcyBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgYnkgcmVjb3JkaW5nIHBvaW50ZXJzICh0b191bm1lcmdlIGFuZCB0b19yZW1vdmVfZ3JvdXBzKSBpbiBzdHJ1Y3QgbWRkZXYgYW5kIHBlcmZvcm1pbmcgdGhlIG9wZXJhdGlvbnMgaW4gbWRkZXZfdW5sb2NrKCkgYWZ0ZXIgcmVsZWFzaW5nIHJlY29uZmlnX211dGV4LlxuXG5zdHJ1Y3QgbWRkZXYgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvYywgYW5kIHRoZSBuZXcgcG9pbnRlciBmaWVsZHMgYXJlIHByb3Blcmx5IG1hbmFnZWQgYW5kIGNsZWFyZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBkYXRhIGJ1ZmZlcnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIGRlcmVmZXJlbmNpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBpbiBkcml2ZXJzL21kL21kLmMgYW5kIGRyaXZlcnMvbWQvbWQtYml0bWFwLmMsIGFkanVzdGluZyBob3cgYml0bWFwIHN5c2ZzIGF0dHJpYnV0ZSBncm91cHMgYXJlIHVubWVyZ2VkIGFuZCByZW1vdmVkIGR1cmluZyBtZGRldl91bmxvY2ssIGxvY2F0aW9uX3N0b3JlLCBtZF9iaXRtYXBfZGVzdHJveSwgYW5kIG1kX2JpdG1hcF9zZXRfbm9uZSB0byBwcmV2ZW50IGxvY2svc3lzZnMgZGVhZGxvY2tzIGFuZCByYWNlcy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1kIHN5c2ZzIGF0dHJpYnV0ZXMgYW5kIGlvY3RscyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlhMDQ0YjAyZDM0ZDNlMjFmMTU5NmJiNjM3MmQzMzE4Y2I0YzlhYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAwOjIzOjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQtYml0bWFwLmMgYi9kcml2ZXJzL21kL21kLWJpdG1hcC5jXG5pbmRleCBiODMyNWNiMDlhMzcxLi4zYTk3YWE0NjNlY2NmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC1iaXRtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC1iaXRtYXAuY1xuQEAgLTI2MzgsNiAmIzQzOzI2MzgsMTEgQEAgbG9jYXRpb25fc3RvcmUoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0XHRyZXR1cm4gcnY7XG4gXHRub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG4gXG4mIzQzO1x0aWYgKG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSkge1xuJiM0MztcdFx0cnYgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMpIHtcbiBcdFx0aWYgKG1kZGV2LVx1MDAzZXJlY292ZXJ5IHx8IG1kZGV2LVx1MDAzZXN5bmNfdGhyZWFkKSB7XG4gXHRcdFx0cnYgPSAtRUJVU1k7XG5AQCAtMjY1Myw3ICYjNDM7MjY1OCw3IEBAIGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIFx1MDAyNm1kX2JpdG1hcF9pbnRlcm5hbF9ncm91cCk7XG4mIzQzO1x0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gXHUwMDI2bWRfYml0bWFwX2ludGVybmFsX2dyb3VwO1xuIFx0XHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcbiBcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7XG4gXHRcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jXG5pbmRleCA2ODBiMzRhNjNjYjNkLi5lODNjYWVjMDk2M2M1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmNcbkBAIC02OTQsMTcgJiM0Mzs2OTQsMjAgQEAgc3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldilcbiYjNDM7c3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2RlbChzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNvbnN0ICpncm91cHMpXG4ge1xuIFx0aW50IG5yX2dyb3VwcyA9IDA7XG4gXG4tXHRmb3IgKG5yX2dyb3VwcyA9IDA7IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcyYjNDM7JiM0MzspXG4mIzQzO1x0aWYgKCFncm91cHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcyYjNDM7JiM0MzspXG4gXHRcdDtcbiBcbiBcdHdoaWxlICgtLW5yX2dyb3VwcyBcdTAwM2U9IDEpXG4tXHRcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaixcbi1cdFx0XHRcdCAgICBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1tucl9ncm91cHNdKTtcbi1cdHN5c2ZzX3JlbW92ZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1swXSk7XG4mIzQzO1x0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIGdyb3Vwc1tucl9ncm91cHNdKTtcbiYjNDM7XHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgZ3JvdXBzWzBdKTtcbiB9XG4gXG4gYm9vbCBtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpXG5AQCAtOTIxLDcgJiM0Mzs5MjQsNyBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm1kZGV2LVx1MDAzZWRlbGV0aW5nKSlcbiBcdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZtZGRldi1cdTAwM2VkZWxldGluZywgXHUwMDI2ZGVsZXRlKTtcbiBcbi1cdGlmIChtZGRldi1cdTAwM2V0b19yZW1vdmUpIHtcbiYjNDM7XHRpZiAobWRkZXYtXHUwMDNldG9fcmVtb3ZlIHx8IG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgfHwgbWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3Vwcykge1xuIFx0XHQvKiBUaGVzZSBjYW5ub3QgYmUgcmVtb3ZlZCB1bmRlciByZWNvbmZpZ19tdXRleCBhc1xuIFx0XHQgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXhcbiBcdFx0ICogd2hpbGUgaG9sZGluZyB0aGUgZmlsZSB1bnJlbW92YWJsZSwgd2hpY2ggbGVhZHMgdG9cbkBAIC05MzUsMTIgJiM0Mzs5MzgsMjEgQEAgdm9pZCBtZGRldl91bmxvY2soc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0ICogaXMgc2Vlbi5cbiBcdFx0ICovXG4gXHRcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3JlbW92ZSA9IG1kZGV2LVx1MDAzZXRvX3JlbW92ZTtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3VubWVyZ2UgPSBtZGRldi1cdTAwM2V0b191bm1lcmdlO1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzO1xuJiM0MztcbiBcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlID0gTlVMTDtcbiYjNDM7XHRcdG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgPSBOVUxMO1xuJiM0MztcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IE5VTEw7XG4gXHRcdG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSA9IDE7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGRldi1cdTAwM2VyZWNvbmZpZ19tdXRleCk7XG4gXG4gXHRcdGlmIChtZGRldi1cdTAwM2Vrb2JqLnNkKSB7XG4tXHRcdFx0aWYgKHRvX3JlbW92ZSAhPSBcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKVxuJiM0MztcdFx0XHRpZiAodG9fdW5tZXJnZSlcbiYjNDM7XHRcdFx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIHRvX3VubWVyZ2UpO1xuJiM0MztcdFx0XHRpZiAodG9fcmVtb3ZlX2dyb3VwcylcbiYjNDM7XHRcdFx0XHRtZF9iaXRtYXBfc3lzZnNfZGVsKG1kZGV2LCB0b19yZW1vdmVfZ3JvdXBzKTtcbiYjNDM7XHRcdFx0aWYgKHRvX3JlbW92ZSBcdTAwMjZcdTAwMjYgdG9fcmVtb3ZlICE9IFx1MDAyNm1kX3JlZHVuZGFuY3lfZ3JvdXApXG4gXHRcdFx0XHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgdG9fcmVtb3ZlKTtcbiBcdFx0XHRpZiAobWRkZXYtXHUwMDNlcGVycyA9PSBOVUxMIHx8XG4gXHRcdFx0ICAgIG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0ID09IE5VTEwpIHtcbkBAIC02NjMyLDEzICYjNDM7NjY0NCwxOSBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfZGVzdHJveShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIHtcbiBcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzKVxuLVx0XHRtZF9iaXRtYXBfc3lzZnNfZGVsKG1kZGV2KTtcbiYjNDM7XHRcdG1kZGV2LVx1MDAzZXRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3VwcztcbiBcbiBcdG1kX2JpdG1hcF9kZXN0cm95X25vc3lzZnMobWRkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc2V0X25vbmUoc3RydWN0IG1kZGV2ICptZGRldilcbiB7XG4mIzQzO1x0aWYgKCFtZGRldl9pc19kbShtZGRldikgXHUwMDI2XHUwMDI2IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1sxXSlcbiYjNDM7XHRcdG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgPSBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1sxXTtcbiYjNDM7XG4mIzQzO1x0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XG4mIzQzO1xuIFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7XG4gXHRpZiAoIW1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMobWRkZXYpKVxuIFx0XHRyZXR1cm47XG5AQCAtNzg2OCwxMiAmIzQzOzc4ODYsMTAgQEAgc3RhdGljIGludCBzZXRfYml0bWFwX2ZpbGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZkKVxuIFx0XHRcdFx0ZXJyID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vsb2FkKG1kZGV2KTtcbiBcbiBcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuIFx0XHRcdFx0ZmQgPSAtMTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoZmQgXHUwMDNjIDApIHtcbi1cdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0fVxuIFx0fVxuQEAgLTgxODcsNyAmIzQzOzgyMDMsNiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIG1kdV9hcnJheV9pbmZvX3QgKmluZm8pXG4gXHRcdFx0XHRydiA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlbG9hZChtZGRldik7XG4gXG4gXHRcdFx0aWYgKHJ2KSB7XG4tXHRcdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0XHRtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xuIFx0XHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0XHR9XG5AQCAtODIxNiw3ICYjNDM7ODIzMSw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbylcbiBcdFx0XHRcdHB1dF9jbHVzdGVyX29wcyhtZGRldik7XG4gXHRcdFx0XHRtZGRldi1cdTAwM2VzYWZlbW9kZV9kZWxheSA9IERFRkFVTFRfU0FGRU1PREVfREVMQVk7XG4gXHRcdFx0fVxuLVx0XHRcdG1kX2JpdG1hcF9kZXN0cm95KG1kZGV2KTtcbiBcdFx0XHRtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xuIFx0XHRcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmhcbmluZGV4IGI2ZDJlODkyOWEwZjkuLmM4NjJkNjUxOWI4MWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQuaFxuQEAgLTYwOCw2ICYjNDM7NjA4LDggQEAgc3RydWN0IG1kZGV2IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0YWxsX21kZGV2cztcbiBcbiBcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXBcdCp0b19yZW1vdmU7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cFx0KnRvX3VubWVyZ2U7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cFx0KmNvbnN0ICp0b19yZW1vdmVfZ3JvdXBzO1xuIFxuIFx0c3RydWN0IGJpb19zZXRcdFx0XHRiaW9fc2V0O1xuIFx0c3RydWN0IGJpb19zZXRcdFx0XHRzeW5jX3NldDsgLyogZm9yIHN5bmMgb3BlcmF0aW9ucyBsaWtlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9NRCYjMzQ7LAogICAgJiMzNDtNRF9CSVRNQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb2NhdGlvbl9zdG9yZSYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfc3lzZnNfZGVsJiMzNDssCiAgICAmIzM0O21kZGV2X3VubG9jayYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfZGVzdHJveSYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfc2V0X25vbmUmIzM0OywKICAgICYjMzQ7c2V0X2JpdG1hcF9maWxlJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9hcnJheV9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGluIGRyaXZlcnMvbWQvbWQuYyBhbmQgZHJpdmVycy9tZC9tZC1iaXRtYXAuYywgYWRqdXN0aW5nIGhvdyBiaXRtYXAgc3lzZnMgYXR0cmlidXRlIGdyb3VwcyBhcmUgdW5tZXJnZWQgYW5kIHJlbW92ZWQgZHVyaW5nIG1kZGV2X3VubG9jaywgbG9jYXRpb25fc3RvcmUsIG1kX2JpdG1hcF9kZXN0cm95LCBhbmQgbWRfYml0bWFwX3NldF9ub25lIHRvIHByZXZlbnQgbG9jay9zeXNmcyBkZWFkbG9ja3MgYW5kIHJhY2VzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWQgc3lzZnMgYXR0cmlidXRlcyBhbmQgaW9jdGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWEwNDRiMDJkMzRkM2UyMWYxNTk2YmI2MzcyZDMzMThjYjRjOWFhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDA6MjM6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWJpdG1hcC5jIGIvZHJpdmVycy9tZC9tZC1iaXRtYXAuYwppbmRleCBiODMyNWNiMDlhMzcxLi4zYTk3YWE0NjNlY2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLWJpdG1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvbWQtYml0bWFwLmMKQEAgLTI2MzgsNiAmIzQzOzI2MzgsMTEgQEAgbG9jYXRpb25fc3RvcmUoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogCQlyZXR1cm4gcnY7CiAJbm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpOwogCiYjNDM7CWlmIChtZGRldi0mZ3Q7c3lzZnNfYWN0aXZlKSB7CiYjNDM7CQlydiA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJaWYgKG1kZGV2LSZndDtwZXJzKSB7CiAJCWlmIChtZGRldi0mZ3Q7cmVjb3ZlcnkgfHwgbWRkZXYtJmd0O3N5bmNfdGhyZWFkKSB7CiAJCQlydiA9IC1FQlVTWTsKQEAgLTI2NTMsNyAmIzQzOzI2NTgsNyBAQCBsb2NhdGlvbl9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXN5c2ZzX3VubWVyZ2VfZ3JvdXAoJmFtcDttZGRldi0mZ3Q7a29iaiwgJmFtcDttZF9iaXRtYXBfaW50ZXJuYWxfZ3JvdXApOwomIzQzOwkJbWRkZXYtJmd0O3RvX3VubWVyZ2UgPSAmYW1wO21kX2JpdG1hcF9pbnRlcm5hbF9ncm91cDsKIAkJbWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7CiAJCW1kZGV2LSZndDtiaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTsKIAkJaWYgKCFtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKG1kZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCA2ODBiMzRhNjNjYjNkLi5lODNjYWVjMDk2M2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5jCkBAIC02OTQsMTcgJiM0Mzs2OTQsMjAgQEAgc3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2FkZChzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCQlrb2JqZWN0X3VldmVudCgmYW1wO21kZGV2LSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldikKJiM0MztzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfZGVsKHN0cnVjdCBtZGRldiAqbWRkZXYsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNvbnN0ICpncm91cHMpCiB7CiAJaW50IG5yX2dyb3VwcyA9IDA7CiAKLQlmb3IgKG5yX2dyb3VwcyA9IDA7IG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtncm91cHNbbnJfZ3JvdXBzXTsgbnJfZ3JvdXBzJiM0MzsmIzQzOykKJiM0MzsJaWYgKCFncm91cHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcyYjNDM7JiM0MzspCiAJCTsKIAogCXdoaWxlICgtLW5yX2dyb3VwcyAmZ3Q7PSAxKQotCQlzeXNmc191bm1lcmdlX2dyb3VwKCZhbXA7bWRkZXYtJmd0O2tvYmosCi0JCQkJICAgIG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtncm91cHNbbnJfZ3JvdXBzXSk7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZhbXA7bWRkZXYtJmd0O2tvYmosIG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtncm91cHNbMF0pOwomIzQzOwkJc3lzZnNfdW5tZXJnZV9ncm91cCgmYW1wO21kZGV2LSZndDtrb2JqLCBncm91cHNbbnJfZ3JvdXBzXSk7CiYjNDM7CXN5c2ZzX3JlbW92ZV9ncm91cCgmYW1wO21kZGV2LSZndDtrb2JqLCBncm91cHNbMF0pOwogfQogCiBib29sIG1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldikKQEAgLTkyMSw3ICYjNDM7OTI0LDcgQEAgdm9pZCBtZGRldl91bmxvY2soc3RydWN0IG1kZGV2ICptZGRldikKIAlpZiAoIWxpc3RfZW1wdHkoJmFtcDttZGRldi0mZ3Q7ZGVsZXRpbmcpKQogCQlsaXN0X3NwbGljZV9pbml0KCZhbXA7bWRkZXYtJmd0O2RlbGV0aW5nLCAmYW1wO2RlbGV0ZSk7CiAKLQlpZiAobWRkZXYtJmd0O3RvX3JlbW92ZSkgewomIzQzOwlpZiAobWRkZXYtJmd0O3RvX3JlbW92ZSB8fCBtZGRldi0mZ3Q7dG9fdW5tZXJnZSB8fCBtZGRldi0mZ3Q7dG9fcmVtb3ZlX2dyb3VwcykgewogCQkvKiBUaGVzZSBjYW5ub3QgYmUgcmVtb3ZlZCB1bmRlciByZWNvbmZpZ19tdXRleCBhcwogCQkgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXgKIAkJICogd2hpbGUgaG9sZGluZyB0aGUgZmlsZSB1bnJlbW92YWJsZSwgd2hpY2ggbGVhZHMgdG8KQEAgLTkzNSwxMiAmIzQzOzkzOCwyMSBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCQkgKiBpcyBzZWVuLgogCQkgKi8KIAkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdG9fcmVtb3ZlID0gbWRkZXYtJmd0O3RvX3JlbW92ZTsKJiM0MzsJCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3VubWVyZ2UgPSBtZGRldi0mZ3Q7dG9fdW5tZXJnZTsKJiM0MzsJCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNvbnN0ICp0b19yZW1vdmVfZ3JvdXBzID0gbWRkZXYtJmd0O3RvX3JlbW92ZV9ncm91cHM7CiYjNDM7CiAJCW1kZGV2LSZndDt0b19yZW1vdmUgPSBOVUxMOwomIzQzOwkJbWRkZXYtJmd0O3RvX3VubWVyZ2UgPSBOVUxMOwomIzQzOwkJbWRkZXYtJmd0O3RvX3JlbW92ZV9ncm91cHMgPSBOVUxMOwogCQltZGRldi0mZ3Q7c3lzZnNfYWN0aXZlID0gMTsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7bWRkZXYtJmd0O3JlY29uZmlnX211dGV4KTsKIAogCQlpZiAobWRkZXYtJmd0O2tvYmouc2QpIHsKLQkJCWlmICh0b19yZW1vdmUgIT0gJmFtcDttZF9yZWR1bmRhbmN5X2dyb3VwKQomIzQzOwkJCWlmICh0b191bm1lcmdlKQomIzQzOwkJCQlzeXNmc191bm1lcmdlX2dyb3VwKCZhbXA7bWRkZXYtJmd0O2tvYmosIHRvX3VubWVyZ2UpOwomIzQzOwkJCWlmICh0b19yZW1vdmVfZ3JvdXBzKQomIzQzOwkJCQltZF9iaXRtYXBfc3lzZnNfZGVsKG1kZGV2LCB0b19yZW1vdmVfZ3JvdXBzKTsKJiM0MzsJCQlpZiAodG9fcmVtb3ZlICZhbXA7JmFtcDsgdG9fcmVtb3ZlICE9ICZhbXA7bWRfcmVkdW5kYW5jeV9ncm91cCkKIAkJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmFtcDttZGRldi0mZ3Q7a29iaiwgdG9fcmVtb3ZlKTsKIAkJCWlmIChtZGRldi0mZ3Q7cGVycyA9PSBOVUxMIHx8CiAJCQkgICAgbWRkZXYtJmd0O3BlcnMtJmd0O3N5bmNfcmVxdWVzdCA9PSBOVUxMKSB7CkBAIC02NjMyLDEzICYjNDM7NjY0NCwxOSBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfZGVzdHJveShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogewogCWlmICghbWRkZXZfaXNfZG0obWRkZXYpICZhbXA7JmFtcDsgbWRkZXYtJmd0O2JpdG1hcF9vcHMgJmFtcDsmYW1wOwogCSAgICBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7Z3JvdXBzKQotCQltZF9iaXRtYXBfc3lzZnNfZGVsKG1kZGV2KTsKJiM0MzsJCW1kZGV2LSZndDt0b19yZW1vdmVfZ3JvdXBzID0gbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3VwczsKIAogCW1kX2JpdG1hcF9kZXN0cm95X25vc3lzZnMobWRkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc2V0X25vbmUoc3RydWN0IG1kZGV2ICptZGRldikKIHsKJiM0MzsJaWYgKCFtZGRldl9pc19kbShtZGRldikgJmFtcDsmYW1wOyBtZGRldi0mZ3Q7Yml0bWFwX29wcyAmYW1wOyZhbXA7CiYjNDM7CSAgICBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7Z3JvdXBzICZhbXA7JmFtcDsgbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3Vwc1sxXSkKJiM0MzsJCW1kZGV2LSZndDt0b191bm1lcmdlID0gbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3Vwc1sxXTsKJiM0MzsKJiM0MzsJbWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7CiYjNDM7CiAJbWRkZXYtJmd0O2JpdG1hcF9pZCA9IElEX0JJVE1BUF9OT05FOwogCWlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpCiAJCXJldHVybjsKQEAgLTc4NjgsMTIgJiM0Mzs3ODg2LDEwIEBAIHN0YXRpYyBpbnQgc2V0X2JpdG1hcF9maWxlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCBmZCkKIAkJCQllcnIgPSBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7bG9hZChtZGRldik7CiAKIAkJCWlmIChlcnIpIHsKLQkJCQltZF9iaXRtYXBfZGVzdHJveShtZGRldik7CiAJCQkJbWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTsKIAkJCQlmZCA9IC0xOwogCQkJfQogCQl9IGVsc2UgaWYgKGZkICZsdDsgMCkgewotCQkJbWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwogCQkJbWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTsKIAkJfQogCX0KQEAgLTgxODcsNyAmIzQzOzgyMDMsNiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIG1kdV9hcnJheV9pbmZvX3QgKmluZm8pCiAJCQkJcnYgPSBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7bG9hZChtZGRldik7CiAKIAkJCWlmIChydikgewotCQkJCW1kX2JpdG1hcF9kZXN0cm95KG1kZGV2KTsKIAkJCQltZGRldi0mZ3Q7Yml0bWFwX2luZm8ub2Zmc2V0ID0gMDsKIAkJCQltZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpOwogCQkJfQpAQCAtODIxNiw3ICYjNDM7ODIzMSw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbykKIAkJCQlwdXRfY2x1c3Rlcl9vcHMobWRkZXYpOwogCQkJCW1kZGV2LSZndDtzYWZlbW9kZV9kZWxheSA9IERFRkFVTFRfU0FGRU1PREVfREVMQVk7CiAJCQl9Ci0JCQltZF9iaXRtYXBfZGVzdHJveShtZGRldik7CiAJCQltZGRldi0mZ3Q7Yml0bWFwX2luZm8ub2Zmc2V0ID0gMDsKIAkJCW1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCBiNmQyZTg5MjlhMGY5Li5jODYyZDY1MTliODFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC5oCkBAIC02MDgsNiAmIzQzOzYwOCw4IEBAIHN0cnVjdCBtZGRldiB7CiAJc3RydWN0IGxpc3RfaGVhZAkJYWxsX21kZGV2czsKIAogCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJKnRvX3JlbW92ZTsKJiM0MzsJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqdG9fdW5tZXJnZTsKJiM0MzsJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqY29uc3QgKnRvX3JlbW92ZV9ncm91cHM7CiAKIAlzdHJ1Y3QgYmlvX3NldAkJCWJpb19zZXQ7CiAJc3RydWN0IGJpb19zZXQJCQlzeW5jX3NldDsgLyogZm9yIHN5bmMgb3BlcmF0aW9ucyBsaWtlCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMaW51eCBTb2Z0d2FyZSBSQUlEIChtZCkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwmIzM5O3MgTUQgc3Vic3lzdGVtLiBJdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9tZC9tZC1iaXRtYXAuY2AsIGBkcml2ZXJzL21kL21kLmNgLCBhbmQgYGRyaXZlcnMvbWQvbWQuaGAsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvcmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgTUQgYml0bWFwIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHN5c2ZzIGludGVyYWN0aW9uLiBUaGlzIGhpbnRzIGF0IHNvbWUgcmVmaW5lbWVudHMgaW4gaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBiaXRtYXAgbGlmZWN5Y2xlIGFuZCBob3cgc3lzZnMgZ3JvdXBzIGFyZSBhZGRlZCwgcmVtb3ZlZCwgYW5kIHVubWVyZ2VkLCBlc3BlY2lhbGx5IGR1cmluZyBsb2NrL3VubG9jayBvcGVyYXRpb25zLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6CgoxLiAgKipgZHJpdmVycy9tZC9tZC1iaXRtYXAuY2A6KiogVGhlIGBsb2NhdGlvbl9zdG9yZWAgZnVuY3Rpb24gbm93IGhhcyBhIHZpdGFsIGNoZWNrOiBgaWYgKG1kZGV2LSZndDtzeXNmc19hY3RpdmUpIHsgcnYgPSAtRUJVU1k7IGdvdG8gb3V0OyB9YC4gVGhpcyBwcmV2ZW50cyBtb2RpZmljYXRpb24gd2hlbiB0aGUgc3lzdGVtIGlzIGFjdGl2ZWx5IHVzaW5nIHN5c2ZzLiBUaGlzIGlzIGdvb2QsIGVuc3VyaW5nIG5vIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gQWxzbywgaW5zdGVhZCBvZiBkaXJlY3RseSB1bm1lcmdpbmcgdGhlIGdyb3VwLCBgc3lzZnNfdW5tZXJnZV9ncm91cGAgd2Ugbm93IGhhdmUgYG1kZGV2LSZndDt0b191bm1lcmdlID0gJmFtcDttZF9iaXRtYXBfaW50ZXJuYWxfZ3JvdXA7YC4gVGhhdCBtZWFucyB3ZSBhcmUgZGVmZXJyaW5nIHRoZSB1bm1lcmdlIG9wZXJhdGlvbi4KCjIuICAqKmBkcml2ZXJzL21kL21kLmNgOioqIFNpZ25pZmljYW50IGNoYW5nZXMgaGVyZS4gVGhlIGBtZF9iaXRtYXBfc3lzZnNfZGVsYCBmdW5jdGlvbiBoYXMgYmVlbiByZWZhY3RvcmVkIHRvIGFjY2VwdCBhIGdyb3VwIHBhcmFtZXRlciwgd2hpY2ggaXMgYSBrZXkgdXBkYXRlLiBUaGUgYG1kZGV2X3VubG9ja2AgZnVuY3Rpb24gbm93IGhhbmRsZXMgYG1kZGV2LSZndDt0b191bm1lcmdlYCBhbmQgYG1kZGV2LSZndDt0b19yZW1vdmVfZ3JvdXBzYCBvdXRzaWRlIHRoZSBgcmVjb25maWdfbXV0ZXhgIGlmIGBzeXNmc19hY3RpdmVgIGlzIDEsIHdoaWNoIGltcGxpZXMgc29tZSBpbXByb3ZlbWVudHMgaW4gbG9ja2luZy9jb25jdXJyZW5jeS4gSW5zdGVhZCBvZiBjYWxsaW5nIGBtZF9iaXRtYXBfc3lzZnNfZGVsYCwgdGhlIGZ1bmN0aW9ucyBgbWRfYml0bWFwX2Rlc3Ryb3lgLCBgbWRfYml0bWFwX3NldF9ub25lYCwgYHNldF9iaXRtYXBfZmlsZWAgYW5kIGB1cGRhdGVfYXJyYXlfaW5mb2AgYXJlIG5vdyBzZXR0aW5nIHRoZSBgbWRkZXYtJmd0O3RvX3JlbW92ZV9ncm91cHNgIG9yIGBtZGRldi0mZ3Q7dG9fdW5tZXJnZWAgcGFyYW1ldGVycy4gU2VlbXMgbW9yZSBlZmZpY2llbnQuCgozLiAgKipgZHJpdmVycy9tZC9tZC5oYDoqKiBUaGUgYWRkaXRpb24gb2YgYHRvX3VubWVyZ2VgIGFuZCBgdG9fcmVtb3ZlX2dyb3Vwc2AgdG8gdGhlIGBzdHJ1Y3QgbWRkZXZgIGlzIHRoZSBzdXBwb3J0aW5nIHN0cnVjdHVyZS4gVGhlc2UgYXJlIHVzZWQgdG8gZGVmZXIgdGhlIHN5c2ZzIGdyb3VwIHVubWVyZ2UgYW5kIHJlbW92YWwgb3BlcmF0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMgZm9yIGJvdGggYG1kLmNgIGFuZCBgbWQtYml0bWFwLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhpcyBwYXRjaCBsb29rcyBjbGVhbiBhbmQgaXMgbGlrZWx5IGFpbWVkIGF0IGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgTUQgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CTEtfREVWX01EfENPTkZJR19NRF9CSVRNQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvTWFrZWZpbGU9MzA9bWQtbW9kLXlcdCYjNDM7PSBtZC5vXG5kcml2ZXJzL21kL01ha2VmaWxlOjMxOm1kLW1vZC0kKENPTkZJR19NRF9CSVRNQVApXHQmIzQzOz0gbWQtYml0bWFwLm9cbmRyaXZlcnMvbWQvTWFrZWZpbGUtMzItbWQtbW9kLSQoQ09ORklHX01EX0xMQklUTUFQKVx0JiM0Mzs9IG1kLWxsYml0bWFwLm9cbi0tXG5kcml2ZXJzL21kL01ha2VmaWxlPTQ3PW9iai0kKENPTkZJR19CQ0FDSEUpXHRcdCYjNDM7PSBiY2FjaGUvXG5kcml2ZXJzL21kL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19CTEtfREVWX01EKVx0JiM0Mzs9IG1kLW1vZC5vXG5kcml2ZXJzL21kL01ha2VmaWxlOjQ5OmlmZXEgKCQoQ09ORklHX0JMS19ERVZfTUQpLHkpXG5kcml2ZXJzL21kL01ha2VmaWxlLTUwLW9iai15XHRcdFx0XHQmIzQzOz0gbWQtYXV0b2RldGVjdC5vXG4tLVxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01MDI9c3RhdGljIHZvaWQgbWRfYml0bWFwX2ZpbGVfa2ljayhzdHJ1Y3QgYml0bWFwICpiaXRtYXApO1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy01MDMtXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjUwNDojaWZkZWYgQ09ORklHX01EX0JJVE1BUF9GSUxFXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTUwNS1zdGF0aWMgdm9pZCBlbmRfYml0bWFwX3dyaXRlKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jPTU1OD1zdGF0aWMgaW50IHJlYWRfZmlsZV9wYWdlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNjE4LX1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NjE5OiNlbHNlIC8qIENPTkZJR19NRF9CSVRNQVBfRklMRSAqL1xuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02MjAtc3RhdGljIHZvaWQgd3JpdGVfZmlsZV9wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB3YWl0KVxuLS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9NjI4PXN0YXRpYyB2b2lkIGZyZWVfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYzMS19XG5kcml2ZXJzL21kL21kLWJpdG1hcC5jOjYzMjojZW5kaWYgLyogQ09ORklHX01EX0JJVE1BUF9GSUxFICovXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYzMy1cbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5oPTE3MT1zdGF0aWMgaW5saW5lIHZvaWQgbWRfYml0bWFwX2VuZF9zeW5jKHN0cnVjdCBtZGRldiAqbWRkZXYsIHNlY3Rvcl90IG9mZnNldCxcbi0tXG5kcml2ZXJzL21kL21kLWJpdG1hcC5oLTE4MS1cbmRyaXZlcnMvbWQvbWQtYml0bWFwLmg6MTgyOiNpZmRlZiBDT05GSUdfTURfQklUTUFQXG5kcml2ZXJzL21kL21kLWJpdG1hcC5oLTE4My1pbnQgbWRfYml0bWFwX2luaXQodm9pZCk7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTc0Mz1pbnQgbWRkZXZfaW5pdChzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuYy03NDYtXG5kcml2ZXJzL21kL21kLmM6NzQ3Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRF9CSVRNQVApKVxuZHJpdmVycy9tZC9tZC5jLTc0OC1cdFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7XG4tLVxuZHJpdmVycy9tZC9tZC5jPTY2Njg9aW50IG1kX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuLS1cbmRyaXZlcnMvbWQvbWQuYy02ODc0LVxuZHJpdmVycy9tZC9tZC5jOjY4NzU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTURfQklUTUFQKSBcdTAwMjZcdTAwMjYgIW1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmZpbGUgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL21kL21kLmMtNjg3Ni1cdCAgICAhbWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0KVxuLS1cbmRyaXZlcnMvbWQvbWQuYz03ODIwPXN0YXRpYyBpbnQgc2V0X2JpdG1hcF9maWxlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCBmZClcbi0tXG5kcml2ZXJzL21kL21kLmMtNzg0Mi1cbmRyaXZlcnMvbWQvbWQuYzo3ODQzOlx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01EX0JJVE1BUF9GSUxFKSkge1xuZHJpdmVycy9tZC9tZC5jLTc4NDQtXHRcdFx0cHJfd2FybihcJiMzNDslczogYml0bWFwIGZpbGVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcXG5cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg4MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgKmNvbmZpZ3VyYWJsZSogaGVyZS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMsIG9mIGNvdXJzZSwgYGRyaXZlcnMvbWQvS2NvbmZpZ2AuIEl04oCZcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRocm91Z2ggdGhhdCBmaWxlLiBJ4oCZbSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFdoYXQgZmVhdHVyZXMgYXJlIGdhdGVrZXB0IGJ5IHRob3NlIGNvbmZpZ3M/IFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgdGhlIGNvZGUgaGF2ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBrbm9icyBhbmQgZGlhbHMgYXQgbXkgZGlzcG9zYWwgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFzc3VtcHRpb25zIG9yIGRpZ2dpbmcgaW50byBjb2RlIHRoYXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvdXQgYW55d2F5LiBUaW1lIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgKE1EX0JJVE1BUHxCTEtfREVWX01EfE1EX0JJVE1BUF9GSUxFKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL0tjb25maWc9MTM9aWYgTURcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNTpjb25maWcgQkxLX0RFVl9NRFxuZHJpdmVycy9tZC9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTM5LVxuZHJpdmVycy9tZC9LY29uZmlnOjQwOmNvbmZpZyBNRF9CSVRNQVBcbmRyaXZlcnMvbWQvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7TUQgUkFJRCBiaXRtYXAgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZz02Nj1jb25maWcgTURfQVVUT0RFVEVDVFxuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy03OS1cbmRyaXZlcnMvbWQvS2NvbmZpZzo4MDpjb25maWcgTURfQklUTUFQX0ZJTEVcbmRyaXZlcnMvbWQvS2NvbmZpZy04MS1cdGJvb2wgXCYjMzQ7TUQgYml0bWFwIGZpbGUgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjk0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1EL1NvZnR3YXJlIFJBSUQ6IEEgUHJpbWUgRnV6emluZyBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGFzc2VzcyB0aGUgZnV6emluZyBwb3RlbnRpYWwgb2YgTUQvU29mdHdhcmUgUkFJRC4gRmlyc3QsIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgc2V0dXBzIG9yLCBtb3JlIGltcG9ydGFudGx5LCB0aHJvdWdoIHN5emthbGxlcj8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzLiBNRCBpcyBlbnRpcmVseSB2aXJ0dWFsLCBhIGJsb2NrIGRldmljZSBkcml2ZXIgaW50ZXJhY3RpbmcgdmlhIGlvY3RscyAobGlrZSBgU0VUX0FSUkFZX0lORk9gLCBgUlVOX0FSUkFZYCwgZXRjLikgYW5kIHN5c2ZzIGF0dHJpYnV0ZXMgKGUuZy4sIGBtZC9iaXRtYXAvbG9jYXRpb25gKS4gQW5kIGNyaXRpY2FsbHksIHN5emthbGxlciAqYWxyZWFkeSogYWN0aXZlbHkgdGVzdHMgaXQuIFdlJiMzOTtyZSBzZWVpbmcgdGVzdHMgd2l0aCB0aGUgYHN5el9tZF8qYCBwc2V1ZG8tc3lzY2FsbHMgYW5kIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgYC9kZXYvbWQqYCBkZXZpY2VzIHZpYSBpb2N0bHMsIHBsdXMgc3lzZnMgaW50ZXJhY3Rpb24uCgpTbywgY29kZSBjb3ZlcmFnZSBpcyB0aGVyZTsgdGhlIG5leHQgcXVlc3Rpb24sIGFyZSB0aGVzZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zIHdvcnRoIG91ciB0aW1lPyBBYnNvbHV0ZWx5LCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24sIHRoZXNlIGFyZSAqZXhhY3RseSogdGhlIGtpbmQgb2YgbW9kaWZpY2F0aW9ucyB0aGF0IHBpcXVlIG15IGludGVyZXN0LiBXZSYjMzk7cmUgdGFsa2luZyBkZWFkbG9jayBhbmQgcmFjZSBjb25kaXRpb24gZml4ZXMsIHBsdXMgcmVzdHJ1Y3R1cmluZyByZXZvbHZpbmcgYXJvdW5kIHN5c2ZzIHVubWVyZ2luZy9yZW1vdmFsIGFuZCBtdXRleCBsb2NraW5nLCB3aGljaCBzb3VuZHMgY29tcGxleCwgYnV0IHZ1bG5lcmFibGUuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhleSBtZW50aW9uLCBsaWtlIGBsb2NhdGlvbl9zdG9yZWAsIGBtZGRldl91bmxvY2tgLCBgbWRfYml0bWFwX2Rlc3Ryb3lgLCBgbWRfYml0bWFwX3NldF9ub25lYCwgYHNldF9iaXRtYXBfZmlsZWAsIGFuZCBgdXBkYXRlX2FycmF5X2luZm9gIGFyZSBhbGwgaW52b2x2ZWQgaW4gY3JpdGljYWwgb3BlcmF0aW9ucyBhbmQgYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4KClRoaXMgc2NyZWFtcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbWQvbWQuY2AgYW5kIGBkcml2ZXJzL21kL21kLWJpdG1hcC5jYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCByZWFkaW5nIGFyb3VuZCB0aGUgbGluZXMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZC4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gZm9ybXVsYXRlIHNvbWUgaHlwb3RoZXNlcyBhYm91dCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjkwOlx0XHRcdC8qXG4gNjkxOlx0XHRcdCAqIEluZm9ybSB1c2VyIHdpdGggS09CSl9DSEFOR0UgYWJvdXQgbmV3IGJpdG1hcFxuIDY5MjpcdFx0XHQgKiBhdHRyaWJ1dGVzLlxuIDY5MzpcdFx0XHQgKi9cbiA2OTQ6XHRcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIDY5NTpcdH1cbiA2OTY6XHRcbiA2OTc6XHRzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfZGVsKHN0cnVjdCBtZGRldiAqbWRkZXYsXG4gNjk4Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpjb25zdCAqZ3JvdXBzKVxuIDY5OTpcdHtcbiA3MDA6XHRcdGludCBucl9ncm91cHMgPSAwO1xuIDcwMTpcdFxuIDcwMjpcdFx0aWYgKCFncm91cHMpXG4gNzAzOlx0XHRcdHJldHVybjtcbiA3MDQ6XHRcbiA3MDU6XHRcdGZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcyYjNDM7JiM0MzspXG4gNzA2Olx0XHRcdDtcbiA3MDc6XHRcbiA3MDg6XHRcdHdoaWxlICgtLW5yX2dyb3VwcyBcdTAwM2U9IDEpXG4gNzA5Olx0XHRcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgZ3JvdXBzW25yX2dyb3Vwc10pO1xuIDcxMDpcdFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIGdyb3Vwc1swXSk7XG4gNzExOlx0fVxuIDcxMjpcdFxuIDcxMzpcdGJvb2wgbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIDcxNDpcdHtcbiA3MTU6XHRcdHN0cnVjdCBtZF9zdWJtb2R1bGVfaGVhZCAqaGVhZDtcbiA3MTY6XHRcbiA3MTc6XHRcdGlmIChtZGRldi1cdTAwM2ViaXRtYXBfb3BzIFx1MDAyNlx1MDAyNlxuIDcxODpcdFx0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlaGVhZC5pZCA9PSBtZGRldi1cdTAwM2ViaXRtYXBfaWQpXG4gNzE5Olx0XHRcdHJldHVybiB0cnVlO1xuIDcyMDpcdFxuIDcyMTpcdFx0eGFfbG9jayhcdTAwMjZtZF9zdWJtb2R1bGUpO1xuIDcyMjpcdFx0aGVhZCA9IHhhX2xvYWQoXHUwMDI2bWRfc3VibW9kdWxlLCBtZGRldi1cdTAwM2ViaXRtYXBfaWQpO1xuIDcyMzpcdFxuIDcyNDpcdFx0aWYgKCFoZWFkKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYG1kZGV2X3VubG9ja2AgRnVuY3Rpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgYG1kZGV2X3VubG9ja2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBpbiB0aGUgYGRyaXZlcnMvbWQvbWQuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciB1bmxvY2tpbmcgYSBtdWx0aS1kZXZpY2UgYXJyYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBtZXRhZGF0YSwgYW5kIHdoYXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NrLXJlbGF0ZWQgaXNzdWVzIG1pZ2h0IGV4aXN0IHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2Ugc2VxdWVuY2VzIGFuZCBzZWUgaG93IHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGUgdW5sb2NrIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21kL21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkyMDpcdFx0c3RydWN0IG1kX3JkZXYgKnJkZXY7XG4gOTIxOlx0XHRzdHJ1Y3QgbWRfcmRldiAqdG1wO1xuIDkyMjpcdFx0TElTVF9IRUFEKGRlbGV0ZSk7XG4gOTIzOlx0XG4gOTI0Olx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bWRkZXYtXHUwMDNlZGVsZXRpbmcpKVxuIDkyNTpcdFx0XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNm1kZGV2LVx1MDAzZWRlbGV0aW5nLCBcdTAwMjZkZWxldGUpO1xuIDkyNjpcdFxuIDkyNzpcdFx0aWYgKG1kZGV2LVx1MDAzZXRvX3JlbW92ZSB8fCBtZGRldi1cdTAwM2V0b191bm1lcmdlIHx8IG1kZGV2LVx1MDAzZXRvX3JlbW92ZV9ncm91cHMpIHtcbiA5Mjg6XHRcdFx0LyogVGhlc2UgY2Fubm90IGJlIHJlbW92ZWQgdW5kZXIgcmVjb25maWdfbXV0ZXggYXNcbiA5Mjk6XHRcdFx0ICogYW4gYWNjZXNzIHRvIHRoZSBmaWxlcyB3aWxsIHRyeSB0byB0YWtlIHJlY29uZmlnX211dGV4XG4gOTMwOlx0XHRcdCAqIHdoaWxlIGhvbGRpbmcgdGhlIGZpbGUgdW5yZW1vdmFibGUsIHdoaWNoIGxlYWRzIHRvXG4gOTMxOlx0XHRcdCAqIGEgZGVhZGxvY2suXG4gOTMyOlx0XHRcdCAqIFNvIGhvbGQgc2V0IHN5c2ZzX2FjdGl2ZSB3aGlsZSB0aGUgcmVtb3ZlIGluIGhhcHBlaW5nLFxuIDkzMzpcdFx0XHQgKiBhbmQgYW55dGhpbmcgZWxzZSB3aGljaCBtaWdodCBzZXQgLVx1MDAzZXRvX3JlbW92ZSBvciBteVxuIDkzNDpcdFx0XHQgKiBvdGhlcndpc2UgY2hhbmdlIHRoZSBzeXNmcyBuYW1lc3BhY2Ugd2lsbCBmYWlsIHdpdGhcbiA5MzU6XHRcdFx0ICogLUVCVVNZIGlmIHN5c2ZzX2FjdGl2ZSBpcyBzdGlsbCBzZXQuXG4gOTM2Olx0XHRcdCAqIFdlIHNldCBzeXNmc19hY3RpdmUgdW5kZXIgcmVjb25maWdfbXV0ZXggYW5kIGVsc2V3aGVyZVxuIDkzNzpcdFx0XHQgKiB0ZXN0IGl0IHVuZGVyIHRoZSBzYW1lIG11dGV4IHRvIGVuc3VyZSBpdHMgY29ycmVjdCB2YWx1ZVxuIDkzODpcdFx0XHQgKiBpcyBzZWVuLlxuIDkzOTpcdFx0XHQgKi9cbiA5NDA6XHRcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdG9fcmVtb3ZlID0gbWRkZXYtXHUwMDNldG9fcmVtb3ZlO1xuIDk0MTpcdFx0XHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b191bm1lcmdlID0gbWRkZXYtXHUwMDNldG9fdW5tZXJnZTtcbiA5NDI6XHRcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzO1xuIDk0MzpcdFxuIDk0NDpcdFx0XHRtZGRldi1cdTAwM2V0b19yZW1vdmUgPSBOVUxMO1xuIDk0NTpcdFx0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gTlVMTDtcbiA5NDY6XHRcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IE5VTEw7XG4gOTQ3Olx0XHRcdG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSA9IDE7XG4gOTQ4Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGRldi1cdTAwM2VyZWNvbmZpZ19tdXRleCk7XG4gOTQ5Olx0XG4gOTUwOlx0XHRcdGlmIChtZGRldi1cdTAwM2Vrb2JqLnNkKSB7XG4gOTUxOlx0XHRcdFx0aWYgKHRvX3VubWVyZ2UpXG4gOTUyOlx0XHRcdFx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIHRvX3VubWVyZ2UpO1xuIDk1MzpcdFx0XHRcdGlmICh0b19yZW1vdmVfZ3JvdXBzKVxuIDk1NDpcdFx0XHRcdFx0bWRfYml0bWFwX3N5c2ZzX2RlbChtZGRldiwgdG9fcmVtb3ZlX2dyb3Vwcyk7XG4gOTU1Olx0XHRcdFx0aWYgKHRvX3JlbW92ZSBcdTAwMjZcdTAwMjYgdG9fcmVtb3ZlICE9IFx1MDAyNm1kX3JlZHVuZGFuY3lfZ3JvdXApXG4gOTU2Olx0XHRcdFx0XHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgdG9fcmVtb3ZlKTtcbiA5NTc6XHRcdFx0XHRpZiAobWRkZXYtXHUwMDNlcGVycyA9PSBOVUxMIHx8XG4gOTU4Olx0XHRcdFx0ICAgIG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0ID09IE5VTEwpIHtcbiA5NTk6XHRcdFx0XHRcdHN5c2ZzX3JlbW92ZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY0NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbWQtYml0bWFwLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBCYXNlZCBvbiB0aGUgdGFzaywgSSB0aGluayB0aGUgaXNzdWUgbWlnaHQgbGllIHdpdGhpbiBgbWQtYml0bWFwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgbG9jYXRpb25fc3RvcmVgIGZ1bmN0aW9uIChvciBhIGZ1bmN0aW9uIGNsb3NlbHkgcmVsYXRlZCB0byB0aGF0IG9uZSkuIFRoaXMgc3VnZ2VzdHMgdGhhdCBzb21ldGhpbmcgaXMgZ29pbmcgd3Jvbmcgd2hlbiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHN0b3JlIG9yIHVwZGF0ZSB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24gd2l0aGluIHRoZSBiaXRtYXAgc3RydWN0dXJlLiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLCBhIGJ1ZyBpbiBob3cgd2UmIzM5O3JlIGNhbGN1bGF0aW5nIG9mZnNldHMsIHNvbWUgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIGV2ZW4gYW4gaW5jb3JyZWN0IGJpdG1hcCBmb3JtYXQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgYml0bWFwIGhhbmRsaW5nLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBhcmVhIGludm9sdmVzIGNyaXRpY2FsIG9wZXJhdGlvbnMgYXJvdW5kIGJsb2NrIG1hcHBpbmcgYW5kIG1ldGFkYXRhLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgY2x1ZXMgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24gY2FsbHMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGJlaW5nIHVzZWQgKG9yICpub3QqIHVzZWQhKSwgYW5kIGFueSBlcnJvciBoYW5kbGluZyBhcm91bmQgdGhhdCBzZWN0aW9uIG9mIGNvZGUuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGNoZWNraW5nIGhvdyB3ZSBhcmUgZW5zdXJpbmcgYXRvbWljaXR5IHdoZW4gd2UgYXJlIHdyaXRpbmcgdG8gdGhlIGJpdG1hcC4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJpdG1hcCBtZXRhZGF0YSBpcyBwcm9wZXJseSBzeW5jaHJvbml6ZWQuIExldCYjMzk7cyBzdGFydCBieSBzY3J1dGluaXppbmcgdGhlIGZ1bmN0aW9uIGFuZCBleGFtaW5pbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHN0YXJ0IGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9tZC1iaXRtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjYzMDpcdHN0YXRpYyBzc2l6ZV90XG4yNjMxOlx0bG9jYXRpb25fc3RvcmUoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuMjYzMjpcdHtcbjI2MzM6XHRcdGludCBydjtcbjI2MzQ6XHRcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzO1xuMjYzNTpcdFxuMjYzNjpcdFx0cnYgPSBtZGRldl9zdXNwZW5kX2FuZF9sb2NrKG1kZGV2KTtcbjI2Mzc6XHRcdGlmIChydilcbjI2Mzg6XHRcdFx0cmV0dXJuIHJ2O1xuMjYzOTpcdFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuMjY0MDpcdFxuMjY0MTpcdFx0aWYgKG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSkge1xuMjY0MjpcdFx0XHRydiA9IC1FQlVTWTtcbjI2NDM6XHRcdFx0Z290byBvdXQ7XG4yNjQ0Olx0XHR9XG4yNjQ1Olx0XG4yNjQ2Olx0XHRpZiAobWRkZXYtXHUwMDNlcGVycykge1xuMjY0NzpcdFx0XHRpZiAobWRkZXYtXHUwMDNlcmVjb3ZlcnkgfHwgbWRkZXYtXHUwMDNlc3luY190aHJlYWQpIHtcbjI2NDg6XHRcdFx0XHRydiA9IC1FQlVTWTtcbjI2NDk6XHRcdFx0XHRnb3RvIG91dDtcbjI2NTA6XHRcdFx0fVxuMjY1MTpcdFx0fVxuMjY1MjpcdFxuMjY1MzpcdFx0aWYgKG1kZGV2LVx1MDAzZWJpdG1hcCB8fCBtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5maWxlIHx8XG4yNjU0Olx0XHQgICAgbWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0KSB7XG4yNjU1Olx0XHRcdC8qIGJpdG1hcCBhbHJlYWR5IGNvbmZpZ3VyZWQuICBPbmx5IG9wdGlvbiBpcyB0byBjbGVhciBpdCAqL1xuMjY1NjpcdFx0XHRpZiAoc3RybmNtcChidWYsIFwmIzM0O25vbmVcJiMzNDssIDQpICE9IDApIHtcbjI2NTc6XHRcdFx0XHRydiA9IC1FQlVTWTtcbjI2NTg6XHRcdFx0XHRnb3RvIG91dDtcbjI2NTk6XHRcdFx0fVxuMjY2MDpcdFxuMjY2MTpcdFx0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gXHUwMDI2bWRfYml0bWFwX2ludGVybmFsX2dyb3VwO1xuMjY2MjpcdFx0XHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcbjI2NjM6XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7XG4yNjY0Olx0XHRcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXG4yNjY1Olx0XHRcdFx0Z290byBub25lX2VycjtcbjI2NjY6XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID0gMDtcbjI2Njc6XHRcdFx0aWYgKG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmZpbGUpIHtcbjI2Njg6XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZiA9IG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmZpbGU7XG4yNjY5Olx0XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8uZmlsZSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTczCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQml0bWFwIE1hbmFnZW1lbnQgYW5kIEZpbGUgVXBkYXRlcyoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIGJpdG1hcHMsIHBhcnRpY3VsYXJseSBhcm91bmQgbnVsbGlmaWNhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJldmlzaXQgYG1kX2JpdG1hcF9zZXRfbm9uZWAsIGVuc3VyaW5nIGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCBub3QgbGVhdmluZyBhbnkgdW5leHBlY3RlZCBhcnRpZmFjdHMuIFRoZW4sIG9mIGNvdXJzZSwgYSB0aG9yb3VnaCBsb29rIGF0IGBtZF9iaXRtYXBfZGVzdHJveWAgaXMgbmVjZXNzYXJ5IHRvIGd1YXJhbnRlZSBwcm9wZXIgcmVzb3VyY2UgcmVsZWFzZSwgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBsZWFrcy4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byBzZWUgaG93IHRoZSBmaWxlIGl0c2VsZiBpcyBiZWluZyBtYW5pcHVsYXRlZCB0byBlbnN1cmUgYHNldF9iaXRtYXBfZmlsZWAgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIEZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGB1cGRhdGVfYXJyYXlfaW5mb2AgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVmbGVjdGluZyBhbnkgY2hhbmdlcyB0byB0aGUgYml0bWFwcyBvciB0aGUgZmlsZS4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgdHJhY2luZyB0aGUgZGF0YSBmbG93IHRvIGNvbmZpcm0gdGhlIHN5c3RlbSYjMzk7cyBpbnRlZ3JpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9tZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NjMwOlx0XG42NjMxOlx0XHRyZXR1cm4gMDtcbjY2MzI6XHR9XG42NjMzOlx0XG42NjM0Olx0dm9pZCBtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpXG42NjM1Olx0e1xuNjYzNjpcdFx0aWYgKCFtZF9iaXRtYXBfcmVnaXN0ZXJlZChtZGRldikpXG42NjM3Olx0XHRcdHJldHVybjtcbjY2Mzg6XHRcbjY2Mzk6XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZGVzdHJveShtZGRldik7XG42NjQwOlx0XHRtZGRldi1cdTAwM2ViaXRtYXBfb3BzID0gTlVMTDtcbjY2NDE6XHR9XG42NjQyOlx0XG42NjQzOlx0c3RhdGljIHZvaWQgbWRfYml0bWFwX2Rlc3Ryb3koc3RydWN0IG1kZGV2ICptZGRldilcbjY2NDQ6XHR7XG42NjQ1Olx0XHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSBcdTAwMjZcdTAwMjYgbWRkZXYtXHUwMDNlYml0bWFwX29wcyBcdTAwMjZcdTAwMjZcbjY2NDY6XHRcdCAgICBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3VwcylcbjY2NDc6XHRcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzO1xuNjY0ODpcdFxuNjY0OTpcdFx0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XG42NjUwOlx0fVxuNjY1MTpcdFxuNjY1MjpcdHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zZXRfbm9uZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuNjY1MzpcdHtcbjY2NTQ6XHRcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzIFx1MDAyNlx1MDAyNlxuNjY1NTpcdFx0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1sxXSlcbjY2NTY6XHRcdFx0bWRkZXYtXHUwMDNldG9fdW5tZXJnZSA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzWzFdO1xuNjY1NzpcdFxuNjY1ODpcdFx0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XG42NjU5Olx0XG42NjYwOlx0XHRtZGRldi1cdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcbjY2NjE6XHRcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXG42NjYyOlx0XHRcdHJldHVybjtcbjY2NjM6XHRcbjY2NjQ6XHRcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3VwcylcbjY2NjU6XHRcdFx0bWRfYml0bWFwX3N5c2ZzX2FkZChtZGRldik7XG42NjY2Olx0fVxuNjY2NzpcdFxuNjY2ODpcdGludCBtZF9ydW4oc3RydWN0IG1kZGV2ICptZGRldilcbjY2Njk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQ1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlJldmlld2luZyBLZXkgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWhhdmluZyBhcyBleHBlY3RlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgc2V0X2JpdG1hcF9maWxlYC4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBoYW5kbGluZyBmaWxlIG9wZXJhdGlvbnMgY29ycmVjdGx5LCBzcGVjaWZpY2FsbHkgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIGJpdG1hcCBkYXRhLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRhdGEgaXMgYmVpbmcgd3JpdHRlbiBhbmQgbG9hZGVkIGFjY29yZGluZyB0byB0aGUgZXhwZWN0ZWQgZm9ybWF0IGFuZCB0aGF0IG5vIG1lbW9yeSBsZWFrcyBhcmUgaGFwcGVuaW5nIGR1cmluZyB0aGF0IG9wZXJhdGlvbi4gTmV4dCB1cCBpcyBgdXBkYXRlX2FycmF5X2luZm9gLiBUaGlzIG9uZSBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBkYXRhIGludGVncml0eS4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgcmVmbGVjdGluZyBjaGFuZ2VzIG1hZGUgdG8gdGhlIGJpdG1hcCBmaWxlJiMzOTtzIGFzc29jaWF0ZWQgZGF0YSB3aXRoaW4gdGhlIGFycmF5LCBlbnN1cmluZyBzeW5jaHJvbml6YXRpb24sIGFuZCB0aGF0IGl0IGlzbiYjMzk7dCBnZW5lcmF0aW5nIGFueSBpbmNvbnNpc3RlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9tZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODYwOlx0XHRcdGlmICghU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG43ODYxOlx0XHRcdFx0cHJfd2FybihcJiMzNDslczogZXJyb3I6IGJpdG1hcCBmaWxlIG11c3QgYmUgYSByZWd1bGFyIGZpbGVcXG5cJiMzNDssXG43ODYyOlx0XHRcdFx0XHRtZG5hbWUobWRkZXYpKTtcbjc4NjM6XHRcdFx0XHRlcnIgPSAtRUJBREY7XG43ODY0Olx0XHRcdH0gZWxzZSBpZiAoIShmLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpKSB7XG43ODY1Olx0XHRcdFx0cHJfd2FybihcJiMzNDslczogZXJyb3I6IGJpdG1hcCBmaWxlIG11c3Qgb3BlbiBmb3Igd3JpdGVcXG5cJiMzNDssXG43ODY2Olx0XHRcdFx0XHRtZG5hbWUobWRkZXYpKTtcbjc4Njc6XHRcdFx0XHRlcnIgPSAtRUJBREY7XG43ODY4Olx0XHRcdH0gZWxzZSBpZiAoYXRvbWljX3JlYWQoXHUwMDI2aW5vZGUtXHUwMDNlaV93cml0ZWNvdW50KSAhPSAxKSB7XG43ODY5Olx0XHRcdFx0cHJfd2FybihcJiMzNDslczogZXJyb3I6IGJpdG1hcCBmaWxlIGlzIGFscmVhZHkgaW4gdXNlXFxuXCYjMzQ7LFxuNzg3MDpcdFx0XHRcdFx0bWRuYW1lKG1kZGV2KSk7XG43ODcxOlx0XHRcdFx0ZXJyID0gLUVCVVNZO1xuNzg3MjpcdFx0XHR9XG43ODczOlx0XHRcdGlmIChlcnIpIHtcbjc4NzQ6XHRcdFx0XHRmcHV0KGYpO1xuNzg3NTpcdFx0XHRcdHJldHVybiBlcnI7XG43ODc2Olx0XHRcdH1cbjc4Nzc6XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8uZmlsZSA9IGY7XG43ODc4Olx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7IC8qIGZpbGUgb3ZlcnJpZGVzIG9mZnNldCAqL1xuNzg3OTpcdFx0fSBlbHNlIGlmIChtZGRldi1cdTAwM2ViaXRtYXAgPT0gTlVMTClcbjc4ODA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7IC8qIGNhbm5vdCByZW1vdmUgd2hhdCBpc24mIzM5O3QgdGhlcmUgKi9cbjc4ODE6XHRcdGVyciA9IDA7XG43ODgyOlx0XHRpZiAobWRkZXYtXHUwMDNlcGVycykge1xuNzg4MzpcdFx0XHRpZiAoZmQgXHUwMDNlPSAwKSB7XG43ODg0Olx0XHRcdFx0ZXJyID0gbWRfYml0bWFwX2NyZWF0ZShtZGRldik7XG43ODg1Olx0XHRcdFx0aWYgKCFlcnIpXG43ODg2Olx0XHRcdFx0XHRlcnIgPSBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWxvYWQobWRkZXYpO1xuNzg4NzpcdFxuNzg4ODpcdFx0XHRcdGlmIChlcnIpIHtcbjc4ODk6XHRcdFx0XHRcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XG43ODkwOlx0XHRcdFx0XHRmZCA9IC0xO1xuNzg5MTpcdFx0XHRcdH1cbjc4OTI6XHRcdFx0fSBlbHNlIGlmIChmZCBcdTAwM2MgMCkge1xuNzg5MzpcdFx0XHRcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XG43ODk0Olx0XHRcdH1cbjc4OTU6XHRcdH1cbjc4OTY6XHRcbjc4OTc6XHRcdGlmIChmZCBcdTAwM2MgMCkge1xuNzg5ODpcdFx0XHRzdHJ1Y3QgZmlsZSAqZiA9IG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmZpbGU7XG43ODk5Olx0XHRcdGlmIChmKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjkwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGB1cGRhdGVfYXJyYXlfaW5mb2AgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB1cGRhdGVfYXJyYXlfaW5mb2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGFuZCBzY29wZS4gV2hhdCBleGFjdGx5IGlzIGl0IHVwZGF0aW5nPyBCYXNlZCBvbiB0aGUgbmFtZSwgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyBzb21lIG1ldGFkYXRhIGFib3V0IGFuIGFycmF5LiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZDsgaXMgaXQgYSBzaW1wbGUgYXJyYXksIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheSwgYSBkeW5hbWljYWxseS1zaXplZCBhcnJheSwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIGEgc3BhcnNlIG1hdHJpeD8gVGhlIGNvbnRleHQgb2Ygd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIG1hdHRlcnMgdG9vLiBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIHN5c3RlbSBmb3IgZGF0YSBwcm9jZXNzaW5nLCBkYXRhYmFzZSBtYW5hZ2VtZW50LCBvciBwZXJoYXBzIGEgbW9yZSBzcGVjaWFsaXplZCBhbGdvcml0aG0/CgpNeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgcG90ZW50aWFsIGlzc3Vlcy4gQ291bGQgaXQgYmUgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGlmIGNhbGxlZCBmcmVxdWVudGx5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyBpZiBtdWx0aXBsZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBhcmUgbW9kaWZ5aW5nIHRoZSBhcnJheSBpbmZvcm1hdGlvbiBjb25jdXJyZW50bHk/IE1lbW9yeSB1c2FnZSBpcyBhbHNvIGEga2V5IGNvbmNlcm4uIERvZXMgdGhlIHVwZGF0ZSBwcm9jZXNzIGVmZmljaWVudGx5IHV0aWxpemUgbWVtb3J5LCBvciBjb3VsZCBpdCBsZWFkIHRvIGV4Y2Vzc2l2ZSBmcmFnbWVudGF0aW9uIG9yIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzPyBFcnJvciBoYW5kbGluZyBpcywgYXMgYWx3YXlzLCBwYXJhbW91bnQuIERvZXMgaXQgcm9idXN0bHkgaGFuZGxlIGVkZ2UgY2FzZXMsIHN1Y2ggYXMgaW52YWxpZCBhcnJheSBpbmRpY2VzLCBudWxsIHBvaW50ZXJzLCBvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcz8gQW5kIGZpbmFsbHksIGhvdyB3ZWxsIGRvZXMgdGhlIGNvZGUgaGFuZGxlIGNoYW5nZXMgdG8gdGhlIGFycmF5PyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgdGhlIGluZm9ybWF0aW9uIGlzIHZhbGlkPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ODE4MDpcdFx0XHRcdGdvdG8gZXJyO1xuODE4MTpcdFx0XHR9XG44MTgyOlx0XHRcdGlmIChtZGRldi1cdTAwM2VyZWNvdmVyeSB8fCBtZGRldi1cdTAwM2VzeW5jX3RocmVhZCkge1xuODE4MzpcdFx0XHRcdHJ2ID0gLUVCVVNZO1xuODE4NDpcdFx0XHRcdGdvdG8gZXJyO1xuODE4NTpcdFx0XHR9XG44MTg2Olx0XHRcdGlmIChpbmZvLVx1MDAzZXN0YXRlIFx1MDAyNiAoMVx1MDAzY1x1MDAzY01EX1NCX0JJVE1BUF9QUkVTRU5UKSkge1xuODE4NzpcdFx0XHRcdC8qIGFkZCB0aGUgYml0bWFwICovXG44MTg4Olx0XHRcdFx0aWYgKG1kZGV2LVx1MDAzZWJpdG1hcCkge1xuODE4OTpcdFx0XHRcdFx0cnYgPSAtRUVYSVNUO1xuODE5MDpcdFx0XHRcdFx0Z290byBlcnI7XG44MTkxOlx0XHRcdFx0fVxuODE5MjpcdFx0XHRcdGlmIChtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5kZWZhdWx0X29mZnNldCA9PSAwKSB7XG44MTkzOlx0XHRcdFx0XHRydiA9IC1FSU5WQUw7XG44MTk0Olx0XHRcdFx0XHRnb3RvIGVycjtcbjgxOTU6XHRcdFx0XHR9XG44MTk2Olx0XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID1cbjgxOTc6XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmRlZmF1bHRfb2Zmc2V0O1xuODE5ODpcdFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLnNwYWNlID1cbjgxOTk6XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLmRlZmF1bHRfc3BhY2U7XG44MjAwOlx0XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQO1xuODIwMTpcdFx0XHRcdHJ2ID0gbWRfYml0bWFwX2NyZWF0ZShtZGRldik7XG44MjAyOlx0XHRcdFx0aWYgKCFydilcbjgyMDM6XHRcdFx0XHRcdHJ2ID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vsb2FkKG1kZGV2KTtcbjgyMDQ6XHRcbjgyMDU6XHRcdFx0XHRpZiAocnYpIHtcbjgyMDY6XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7XG44MjA3Olx0XHRcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuODIwODpcdFx0XHRcdH1cbjgyMDk6XHRcdFx0fSBlbHNlIHtcbjgyMTA6XHRcdFx0XHRzdHJ1Y3QgbWRfYml0bWFwX3N0YXRzIHN0YXRzO1xuODIxMTpcdFxuODIxMjpcdFx0XHRcdHJ2ID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2VnZXRfc3RhdHMobWRkZXYtXHUwMDNlYml0bWFwLCBcdTAwMjZzdGF0cyk7XG44MjEzOlx0XHRcdFx0aWYgKHJ2KVxuODIxNDpcdFx0XHRcdFx0Z290byBlcnI7XG44MjE1Olx0XG44MjE2Olx0XHRcdFx0aWYgKHN0YXRzLmZpbGUpIHtcbjgyMTc6XHRcdFx0XHRcdHJ2ID0gLUVJTlZBTDtcbjgyMTg6XHRcdFx0XHRcdGdvdG8gZXJyO1xuODIxOTpcdFx0XHRcdH1cbjgyMjA6XHRcbjgyMjE6XHRcdFx0XHRpZiAobWRkZXYtXHUwMDNlYml0bWFwX2luZm8ubm9kZXMpIHtcbjgyMjI6XHRcdFx0XHRcdC8qIGhvbGQgUFcgb24gYWxsIHRoZSBiaXRtYXAgbG9jayAqL1xuODIyMzpcdFx0XHRcdFx0aWYgKG1kZGV2LVx1MDAzZWNsdXN0ZXJfb3BzLVx1MDAzZWxvY2tfYWxsX2JpdG1hcHMobWRkZXYpIFx1MDAzYz0gMCkge1xuODIyNDpcdFx0XHRcdFx0XHRwcl93YXJuKFwmIzM0O21kOiBjYW4mIzM5O3QgY2hhbmdlIGJpdG1hcCB0byBub25lIHNpbmNlIHRoZSBhcnJheSBpcyBpbiB1c2UgYnkgbW9yZSB0aGFuIG9uZSBub2RlXFxuXCYjMzQ7KTtcbjgyMjU6XHRcdFx0XHRcdFx0cnYgPSAtRVBFUk07XG44MjI2Olx0XHRcdFx0XHRcdG1kZGV2LVx1MDAzZWNsdXN0ZXJfb3BzLVx1MDAzZXVubG9ja19hbGxfYml0bWFwcyhtZGRldik7XG44MjI3Olx0XHRcdFx0XHRcdGdvdG8gZXJyO1xuODIyODpcdFx0XHRcdFx0fVxuODIyOTpcdFxuODIzMDpcdFx0XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8ubm9kZXMgPSAwO1xuODIzMTpcdFx0XHRcdFx0cHV0X2NsdXN0ZXJfb3BzKG1kZGV2KTtcbjgyMzI6XHRcdFx0XHRcdG1kZGV2LVx1MDAzZXNhZmVtb2RlX2RlbGF5ID0gREVGQVVMVF9TQUZFTU9ERV9ERUxBWTtcbjgyMzM6XHRcdFx0XHR9XG44MjM0Olx0XHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID0gMDtcbjgyMzU6XHRcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuODIzNjpcdFx0XHR9XG44MjM3Olx0XHR9XG44MjM4Olx0XHRtZF91cGRhdGVfc2IobWRkZXYsIDEpO1xuODIzOTpcdFx0cmV0dXJuIHJ2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ5OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBSQUlEIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBtYWtlIHN1cmUgdGhpcyBSQUlEIHNldHVwIGlzIGtvc2hlci4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgQ09ORklHX0JMS19ERVZfTURgIGFuZCBgQ09ORklHX01EX0JJVE1BUGAgYXJlIHNldCBjb3JyZWN0bHkuIFRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbiwgdGhlIGJlZHJvY2sgZm9yIHRoZSB3aG9sZSB0aGluZy4gV2l0aG91dCB0aGVzZSwgd2UmIzM5O3JlIG5vdCBnb2luZyBhbnl3aGVyZS4KCk5vdyB0aGF0IEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBjb25maWdzLCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBgQkxLX0RFVl9NRGAgYW5kIGBNRF9CSVRNQVBgIGhhdmUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCAqbmVlZCogdG8gYmUgZW5hYmxlZCBmb3IgdGhlc2UgdG8gd29yayBwcm9wZXJseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBpcyBhYm91dCBlbnN1cmluZyBhIGNsZWFuIGFuZCBzdGFibGUgYnVpbGQsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGlzIGNydWNpYWwuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoTUR8QkxLX0RFVl9NRHxNRF9CSVRNQVApJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvS2NvbmZpZy01LVxuZHJpdmVycy9tZC9LY29uZmlnOjY6bWVudWNvbmZpZyBNRFxuZHJpdmVycy9tZC9LY29uZmlnLTctXHRib29sIFwmIzM0O011bHRpcGxlIGRldmljZXMgZHJpdmVyIHN1cHBvcnQgKFJBSUQgYW5kIExWTSlcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWc9MTM9aWYgTURcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNTpjb25maWcgQkxLX0RFVl9NRFxuZHJpdmVycy9tZC9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTM5LVxuZHJpdmVycy9tZC9LY29uZmlnOjQwOmNvbmZpZyBNRF9CSVRNQVBcbmRyaXZlcnMvbWQvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7TUQgUkFJRCBiaXRtYXAgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy01NC1cbmRyaXZlcnMvbWQvS2NvbmZpZzo1NTpjb25maWcgTURfTExCSVRNQVBcbmRyaXZlcnMvbWQvS2NvbmZpZy01Ni1cdGJvb2wgXCYjMzQ7TUQgUkFJRCBsb2NrbGVzcyBiaXRtYXAgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy02NS1cbmRyaXZlcnMvbWQvS2NvbmZpZzo2Njpjb25maWcgTURfQVVUT0RFVEVDVFxuZHJpdmVycy9tZC9LY29uZmlnLTY3LVx0Ym9vbCBcJiMzNDtBdXRvZGV0ZWN0IFJBSUQgYXJyYXlzIGR1cmluZyBrZXJuZWwgYm9vdFwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy03OS1cbmRyaXZlcnMvbWQvS2NvbmZpZzo4MDpjb25maWcgTURfQklUTUFQX0ZJTEVcbmRyaXZlcnMvbWQvS2NvbmZpZy04MS1cdGJvb2wgXCYjMzQ7TUQgYml0bWFwIGZpbGUgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctOTAtXG5kcml2ZXJzL21kL0tjb25maWc6OTE6Y29uZmlnIE1EX0xJTkVBUlxuZHJpdmVycy9tZC9LY29uZmlnLTkyLVx0dHJpc3RhdGUgXCYjMzQ7TGluZWFyIChhcHBlbmQpIG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMTAzLVxuZHJpdmVycy9tZC9LY29uZmlnOjEwNDpjb25maWcgTURfUkFJRDBcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMDUtXHR0cmlzdGF0ZSBcJiMzNDtSQUlELTAgKHN0cmlwaW5nKSBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTEyMy1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxMjQ6Y29uZmlnIE1EX1JBSUQxXG5kcml2ZXJzL21kL0tjb25maWctMTI1LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC0xIChtaXJyb3JpbmcpIG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMTQ1LVxuZHJpdmVycy9tZC9LY29uZmlnOjE0Njpjb25maWcgTURfUkFJRDEwXG5kcml2ZXJzL21kL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC0xMCAobWlycm9yZWQgc3RyaXBpbmcpIG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMTY0LVxuZHJpdmVycy9tZC9LY29uZmlnOjE2NTpjb25maWcgTURfUkFJRDQ1NlxuZHJpdmVycy9tZC9LY29uZmlnLTE2Ni1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtNC9SQUlELTUvUkFJRC02IG1vZGVcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctMjAxLVxuZHJpdmVycy9tZC9LY29uZmlnOjIwMjpjb25maWcgTURfQ0xVU1RFUlxuZHJpdmVycy9tZC9LY29uZmlnLTIwMy1cdHRyaXN0YXRlIFwmIzM0O0NsdXN0ZXIgU3VwcG9ydCBmb3IgTURcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NDYKCQkJCQkJCW91dHB1dDogMjA1CgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNRCBTdWJzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYE1EYCBsZWFkcyB0byBgQkxLX0RFVl9NRGAsIHdoaWNoIHRoZW4gbGVhZHMgdG8gYE1EX0JJVE1BUGAuIFRoaXMgZ2l2ZXMgbWUgYSBxdWljayBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQga2VybmVsIG1vZHVsZXM6IGBNRGAsIGBCTEtfREVWX01EYCwgYW5kIGBNRF9CSVRNQVBgLgoKTmV4dCwgSSYjMzk7bSByZXZpZXdpbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBpZGVudGlmeSBrZXkgRm9jdXNTeW1ib2xzLiBUaGUgbGlzdCBpbmNsdWRlczogYGxvY2F0aW9uX3N0b3JlYCwgYG1kX2JpdG1hcF9zeXNmc19kZWxgLCBgbWRkZXZfdW5sb2NrYCwgYG1kX2JpdG1hcF9kZXN0cm95YCwgYG1kX2JpdG1hcF9zZXRfbm9uZWAsIGBzZXRfYml0bWFwX2ZpbGVgLCBhbmQgYHVwZGF0ZV9hcnJheV9pbmZvYC4gUmlnaHQgYXdheSwgSSBub3RlIHRoYXQgYG1kZGV2X3VubG9ja2AgaXMgZGVmaW5pdGVseSBNRCAoc29mdHdhcmUgUkFJRCkgc3BlY2lmaWMsIG5vdCBzb21lIGdsb2JhbGx5IHVzZWQga2VybmVsIGZ1bmN0aW9uLiBJbiBmYWN0LCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgTUQgc3Vic3lzdGVtLgoKTm93LCBJJiMzOTttIGRvdWJsZS1jaGVja2luZyB3aGV0aGVyIHRoaXMgaXMgZnV6emluZy13b3J0aHkuIExldCYjMzk7cyBzZWU6IFRoZSBzdWJzeXN0ZW0gaXMgTGludXggTUQgKHNvZnR3YXJlIFJBSUQpLCBhIHZpcnR1YWwgYmxvY2sgZGV2aWNlIGV4cG9zZWQgdmlhIGBpb2N0bGAgYW5kIGBzeXNmc2AsIGFuZCBpdCBpcyBmdWxseSBlbXVsYXRlZC9zb2Z0d2FyZSBkZXZpY2UuIFRoZSBtb2RpZmljYXRpb25zIGludm9sdmUgc3lzZnMgYXR0cmlidXRlIGhhbmRsaW5nLCBiaXRtYXAgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGFuZCBtdXRleCB1bmxvY2tpbmcgbG9naWMuIEdpdmVuIHRoZXNlIGZhY3RvcnMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCBjb25zdHJ1Y3QgbXkgZmluYWwgcmVzcG9uc2UgdXNpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01EJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OywKICAgICYjMzQ7TURfQklUTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9jYXRpb25fc3RvcmUmIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX3N5c2ZzX2RlbCYjMzQ7LAogICAgJiMzNDttZGRldl91bmxvY2smIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWRfYml0bWFwX3NldF9ub25lJiMzNDssCiAgICAmIzM0O3NldF9iaXRtYXBfZmlsZSYjMzQ7LAogICAgJiMzNDt1cGRhdGVfYXJyYXlfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBpbiBkcml2ZXJzL21kL21kLmMgYW5kIGRyaXZlcnMvbWQvbWQtYml0bWFwLmMsIGFkanVzdGluZyBob3cgYml0bWFwIHN5c2ZzIGF0dHJpYnV0ZSBncm91cHMgYXJlIHVubWVyZ2VkIGFuZCByZW1vdmVkIGR1cmluZyBtZGRldl91bmxvY2ssIGxvY2F0aW9uX3N0b3JlLCBtZF9iaXRtYXBfZGVzdHJveSwgYW5kIG1kX2JpdG1hcF9zZXRfbm9uZSB0byBwcmV2ZW50IGxvY2svc3lzZnMgZGVhZGxvY2tzIGFuZCByYWNlcy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1kIHN5c2ZzIGF0dHJpYnV0ZXMgYW5kIGlvY3RscyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9NRCYjMzQ7LAogICAgJiMzNDtNRF9CSVRNQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb2NhdGlvbl9zdG9yZSYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfc3lzZnNfZGVsJiMzNDssCiAgICAmIzM0O21kZGV2X3VubG9jayYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfZGVzdHJveSYjMzQ7LAogICAgJiMzNDttZF9iaXRtYXBfc2V0X25vbmUmIzM0OywKICAgICYjMzQ7c2V0X2JpdG1hcF9maWxlJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9hcnJheV9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGluIGRyaXZlcnMvbWQvbWQuYyBhbmQgZHJpdmVycy9tZC9tZC1iaXRtYXAuYywgYWRqdXN0aW5nIGhvdyBiaXRtYXAgc3lzZnMgYXR0cmlidXRlIGdyb3VwcyBhcmUgdW5tZXJnZWQgYW5kIHJlbW92ZWQgZHVyaW5nIG1kZGV2X3VubG9jaywgbG9jYXRpb25fc3RvcmUsIG1kX2JpdG1hcF9kZXN0cm95LCBhbmQgbWRfYml0bWFwX3NldF9ub25lIHRvIHByZXZlbnQgbG9jay9zeXNmcyBkZWFkbG9ja3MgYW5kIHJhY2VzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWQgc3lzZnMgYXR0cmlidXRlcyBhbmQgaW9jdGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgYXR0cmlidXRlIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBsb2dpYyBpbiB0aGUgTUQgKFNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBtYW5pcHVsYXRpbmcgc3lzZnMgZmlsZXMgdW5kZXIgbWRkZXYtXHUwMDNlcmVjb25maWdfbXV0ZXguIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHN5c2ZzIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBieSByZWNvcmRpbmcgcG9pbnRlcnMgKHRvX3VubWVyZ2UgYW5kIHRvX3JlbW92ZV9ncm91cHMpIGluIHN0cnVjdCBtZGRldiBhbmQgcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9ucyBpbiBtZGRldl91bmxvY2soKSBhZnRlciByZWxlYXNpbmcgcmVjb25maWdfbXV0ZXguXG5cbnN0cnVjdCBtZGRldiBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHZpYSBremFsbG9jLCBhbmQgdGhlIG5ldyBwb2ludGVyIGZpZWxkcyBhcmUgcHJvcGVybHkgbWFuYWdlZCBhbmQgY2xlYXJlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyB0byB1c2Vyc3BhY2UsIGRhdGEgYnVmZmVycywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgZGVyZWZlcmVuY2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YTA0NGIwMmQzNGQzZTIxZjE1OTZiYjYzNzJkMzMxOGNiNGM5YWFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwMDoyMzo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQtYml0bWFwLmMgYi9kcml2ZXJzL21kL21kLWJpdG1hcC5jCmluZGV4IGI4MzI1Y2IwOWEzNzEuLjNhOTdhYTQ2M2VjY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQtYml0bWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9tZC1iaXRtYXAuYwpAQCAtMjYzOCw2ICYjNDM7MjYzOCwxMSBAQCBsb2NhdGlvbl9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJCXJldHVybiBydjsKIAlub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7CiAKJiM0MzsJaWYgKG1kZGV2LSZndDtzeXNmc19hY3RpdmUpIHsKJiM0MzsJCXJ2ID0gLUVCVVNZOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAlpZiAobWRkZXYtJmd0O3BlcnMpIHsKIAkJaWYgKG1kZGV2LSZndDtyZWNvdmVyeSB8fCBtZGRldi0mZ3Q7c3luY190aHJlYWQpIHsKIAkJCXJ2ID0gLUVCVVNZOwpAQCAtMjY1Myw3ICYjNDM7MjY1OCw3IEBAIGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJc3lzZnNfdW5tZXJnZV9ncm91cCgmYW1wO21kZGV2LSZndDtrb2JqLCAmYW1wO21kX2JpdG1hcF9pbnRlcm5hbF9ncm91cCk7CiYjNDM7CQltZGRldi0mZ3Q7dG9fdW5tZXJnZSA9ICZhbXA7bWRfYml0bWFwX2ludGVybmFsX2dyb3VwOwogCQltZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTsKIAkJbWRkZXYtJmd0O2JpdG1hcF9pZCA9IElEX0JJVE1BUF9OT05FOwogCQlpZiAoIW1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMobWRkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDY4MGIzNGE2M2NiM2QuLmU4M2NhZWMwOTYzYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmMKQEAgLTY5NCwxNyAmIzQzOzY5NCwyMCBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYpCiAJCWtvYmplY3RfdWV2ZW50KCZhbXA7bWRkZXYtJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKIH0KIAotc3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2RlbChzdHJ1Y3QgbWRkZXYgKm1kZGV2KQomIzQzO3N0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldiwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKmdyb3VwcykKIHsKIAlpbnQgbnJfZ3JvdXBzID0gMDsKIAotCWZvciAobnJfZ3JvdXBzID0gMDsgbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3Vwc1tucl9ncm91cHNdOyBucl9ncm91cHMmIzQzOyYjNDM7KQomIzQzOwlpZiAoIWdyb3VwcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChucl9ncm91cHMgPSAwOyBncm91cHNbbnJfZ3JvdXBzXTsgbnJfZ3JvdXBzJiM0MzsmIzQzOykKIAkJOwogCiAJd2hpbGUgKC0tbnJfZ3JvdXBzICZndDs9IDEpCi0JCXN5c2ZzX3VubWVyZ2VfZ3JvdXAoJmFtcDttZGRldi0mZ3Q7a29iaiwKLQkJCQkgICAgbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3Vwc1tucl9ncm91cHNdKTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmFtcDttZGRldi0mZ3Q7a29iaiwgbWRkZXYtJmd0O2JpdG1hcF9vcHMtJmd0O2dyb3Vwc1swXSk7CiYjNDM7CQlzeXNmc191bm1lcmdlX2dyb3VwKCZhbXA7bWRkZXYtJmd0O2tvYmosIGdyb3Vwc1tucl9ncm91cHNdKTsKJiM0MzsJc3lzZnNfcmVtb3ZlX2dyb3VwKCZhbXA7bWRkZXYtJmd0O2tvYmosIGdyb3Vwc1swXSk7CiB9CiAKIGJvb2wgbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2KQpAQCAtOTIxLDcgJiM0Mzs5MjQsNyBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogCWlmICghbGlzdF9lbXB0eSgmYW1wO21kZGV2LSZndDtkZWxldGluZykpCiAJCWxpc3Rfc3BsaWNlX2luaXQoJmFtcDttZGRldi0mZ3Q7ZGVsZXRpbmcsICZhbXA7ZGVsZXRlKTsKIAotCWlmIChtZGRldi0mZ3Q7dG9fcmVtb3ZlKSB7CiYjNDM7CWlmIChtZGRldi0mZ3Q7dG9fcmVtb3ZlIHx8IG1kZGV2LSZndDt0b191bm1lcmdlIHx8IG1kZGV2LSZndDt0b19yZW1vdmVfZ3JvdXBzKSB7CiAJCS8qIFRoZXNlIGNhbm5vdCBiZSByZW1vdmVkIHVuZGVyIHJlY29uZmlnX211dGV4IGFzCiAJCSAqIGFuIGFjY2VzcyB0byB0aGUgZmlsZXMgd2lsbCB0cnkgdG8gdGFrZSByZWNvbmZpZ19tdXRleAogCQkgKiB3aGlsZSBob2xkaW5nIHRoZSBmaWxlIHVucmVtb3ZhYmxlLCB3aGljaCBsZWFkcyB0bwpAQCAtOTM1LDEyICYjNDM7OTM4LDIxIEBAIHZvaWQgbWRkZXZfdW5sb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYpCiAJCSAqIGlzIHNlZW4uCiAJCSAqLwogCQljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b19yZW1vdmUgPSBtZGRldi0mZ3Q7dG9fcmVtb3ZlOwomIzQzOwkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdG9fdW5tZXJnZSA9IG1kZGV2LSZndDt0b191bm1lcmdlOwomIzQzOwkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi0mZ3Q7dG9fcmVtb3ZlX2dyb3VwczsKJiM0MzsKIAkJbWRkZXYtJmd0O3RvX3JlbW92ZSA9IE5VTEw7CiYjNDM7CQltZGRldi0mZ3Q7dG9fdW5tZXJnZSA9IE5VTEw7CiYjNDM7CQltZGRldi0mZ3Q7dG9fcmVtb3ZlX2dyb3VwcyA9IE5VTEw7CiAJCW1kZGV2LSZndDtzeXNmc19hY3RpdmUgPSAxOwogCQltdXRleF91bmxvY2soJmFtcDttZGRldi0mZ3Q7cmVjb25maWdfbXV0ZXgpOwogCiAJCWlmIChtZGRldi0mZ3Q7a29iai5zZCkgewotCQkJaWYgKHRvX3JlbW92ZSAhPSAmYW1wO21kX3JlZHVuZGFuY3lfZ3JvdXApCiYjNDM7CQkJaWYgKHRvX3VubWVyZ2UpCiYjNDM7CQkJCXN5c2ZzX3VubWVyZ2VfZ3JvdXAoJmFtcDttZGRldi0mZ3Q7a29iaiwgdG9fdW5tZXJnZSk7CiYjNDM7CQkJaWYgKHRvX3JlbW92ZV9ncm91cHMpCiYjNDM7CQkJCW1kX2JpdG1hcF9zeXNmc19kZWwobWRkZXYsIHRvX3JlbW92ZV9ncm91cHMpOwomIzQzOwkJCWlmICh0b19yZW1vdmUgJmFtcDsmYW1wOyB0b19yZW1vdmUgIT0gJmFtcDttZF9yZWR1bmRhbmN5X2dyb3VwKQogCQkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmYW1wO21kZGV2LSZndDtrb2JqLCB0b19yZW1vdmUpOwogCQkJaWYgKG1kZGV2LSZndDtwZXJzID09IE5VTEwgfHwKIAkJCSAgICBtZGRldi0mZ3Q7cGVycy0mZ3Q7c3luY19yZXF1ZXN0ID09IE5VTEwpIHsKQEAgLTY2MzIsMTMgJiM0Mzs2NjQ0LDE5IEBAIHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9kZXN0cm95KHN0cnVjdCBtZGRldiAqbWRkZXYpCiB7CiAJaWYgKCFtZGRldl9pc19kbShtZGRldikgJmFtcDsmYW1wOyBtZGRldi0mZ3Q7Yml0bWFwX29wcyAmYW1wOyZhbXA7CiAJICAgIG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtncm91cHMpCi0JCW1kX2JpdG1hcF9zeXNmc19kZWwobWRkZXYpOwomIzQzOwkJbWRkZXYtJmd0O3RvX3JlbW92ZV9ncm91cHMgPSBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7Z3JvdXBzOwogCiAJbWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zZXRfbm9uZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQogewomIzQzOwlpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSAmYW1wOyZhbXA7IG1kZGV2LSZndDtiaXRtYXBfb3BzICZhbXA7JmFtcDsKJiM0MzsJICAgIG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtncm91cHMgJmFtcDsmYW1wOyBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7Z3JvdXBzWzFdKQomIzQzOwkJbWRkZXYtJmd0O3RvX3VubWVyZ2UgPSBtZGRldi0mZ3Q7Yml0bWFwX29wcy0mZ3Q7Z3JvdXBzWzFdOwomIzQzOwomIzQzOwltZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTsKJiM0MzsKIAltZGRldi0mZ3Q7Yml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7CiAJaWYgKCFtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKG1kZGV2KSkKIAkJcmV0dXJuOwpAQCAtNzg2OCwxMiAmIzQzOzc4ODYsMTAgQEAgc3RhdGljIGludCBzZXRfYml0bWFwX2ZpbGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZkKQogCQkJCWVyciA9IG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtsb2FkKG1kZGV2KTsKIAogCQkJaWYgKGVycikgewotCQkJCW1kX2JpdG1hcF9kZXN0cm95KG1kZGV2KTsKIAkJCQltZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpOwogCQkJCWZkID0gLTE7CiAJCQl9CiAJCX0gZWxzZSBpZiAoZmQgJmx0OyAwKSB7Ci0JCQltZF9iaXRtYXBfZGVzdHJveShtZGRldik7CiAJCQltZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpOwogCQl9CiAJfQpAQCAtODE4Nyw3ICYjNDM7ODIwMyw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbykKIAkJCQlydiA9IG1kZGV2LSZndDtiaXRtYXBfb3BzLSZndDtsb2FkKG1kZGV2KTsKIAogCQkJaWYgKHJ2KSB7Ci0JCQkJbWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwogCQkJCW1kZGV2LSZndDtiaXRtYXBfaW5mby5vZmZzZXQgPSAwOwogCQkJCW1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7CiAJCQl9CkBAIC04MjE2LDcgJiM0Mzs4MjMxLDYgQEAgc3RhdGljIGludCB1cGRhdGVfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBtZHVfYXJyYXlfaW5mb190ICppbmZvKQogCQkJCXB1dF9jbHVzdGVyX29wcyhtZGRldik7CiAJCQkJbWRkZXYtJmd0O3NhZmVtb2RlX2RlbGF5ID0gREVGQVVMVF9TQUZFTU9ERV9ERUxBWTsKIAkJCX0KLQkJCW1kX2JpdG1hcF9kZXN0cm95KG1kZGV2KTsKIAkJCW1kZGV2LSZndDtiaXRtYXBfaW5mby5vZmZzZXQgPSAwOwogCQkJbWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCmluZGV4IGI2ZDJlODkyOWEwZjkuLmM4NjJkNjUxOWI4MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL21kLmgKQEAgLTYwOCw2ICYjNDM7NjA4LDggQEAgc3RydWN0IG1kZGV2IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlhbGxfbWRkZXZzOwogCiAJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqdG9fcmVtb3ZlOwomIzQzOwljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCSp0b191bm1lcmdlOwomIzQzOwljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCSpjb25zdCAqdG9fcmVtb3ZlX2dyb3VwczsKIAogCXN0cnVjdCBiaW9fc2V0CQkJYmlvX3NldDsKIAlzdHJ1Y3QgYmlvX3NldAkJCXN5bmNfc2V0OyAvKiBmb3Igc3luYyBvcGVyYXRpb25zIGxpa2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBsb2NrZGVwIHdhcm5pbmcsIG1vc3QgbGlrZWx5IHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgaXNzdWVzIGR1cmluZyB0aGUgcmVtb3ZhbCBvZiBzeXNmcyBncm91cHMgYW5kIGZpbGVzIHdpdGhpbiB0aGUgTUQgKE11bHRpcGxlIERldmljZSkgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGByZWNvbmZpZ19tdXRleGAuIFRoZSBjb3JlIGlzc3VlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgZGlyZWN0bHkgcmVtb3ZpbmcgYSBzeXNmcyBhdHRyaWJ1dGUgZ3JvdXAgd2hpbGUgc3lzZnMgY2FsbGJhY2tzIGFyZSB3YWl0aW5nIG9uLCBvciBob2xkaW5nLCB0aGUgYHJlY29uZmlnX211dGV4YCBjYW4gbGVhZCB0byBhIGRlYWRsb2NrIHNpdHVhdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcywgYW5kIHRoZSBwYXRjaCBzZWVtcyB0byBiZSB1c2luZyBhIGRlZmVycmFsIG1lY2hhbmlzbSB0byBhZGRyZXNzIGl0LgoKVGhlIHByaW1hcnkgc3RyYXRlZ3kgZW1wbG95ZWQgaGVyZSBpcyB0byBkZWZlciB0aGUgYHN5c2ZzX3VubWVyZ2VfZ3JvdXBgIGFuZCBgbWRfYml0bWFwX3N5c2ZzX2RlbGAgb3BlcmF0aW9ucy4gSW5zdGVhZCBvZiBwZXJmb3JtaW5nIHRoZW0gZGlyZWN0bHkgdW5kZXIgdGhlIGxvY2ssIHRoZSBwYXRjaCBzZXRzIGZsYWdzIChgbWRkZXYtJmd0O3RvX3VubWVyZ2VgIGFuZCBgbWRkZXYtJmd0O3RvX3JlbW92ZV9ncm91cHNgKSBhbmQgZGVmZXJzIHRoZSBhY3R1YWwgcmVtb3ZhbCB1bnRpbCBhZnRlciB0aGUgYHJlY29uZmlnX211dGV4YCBoYXMgYmVlbiByZWxlYXNlZCwgd2hpY2ggaGFwcGVucyBpbiBgbWRkZXZfdW5sb2NrKClgLiBUaGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIGFwcHJvYWNoLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZSBiZWZvcmUgY29uc2lkZXJpbmcgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBzZWUuLi4KCjEuICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb246KiogVGhlIHBhdGNoIGRvZXNuJiMzOTt0IHNlZW0gdG8gdG91Y2ggYW55IGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4gTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIG91dCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGNvdWxkIGJlIGEgcHJvYmxlbS4gVGhpcyBpcyBnb29kLgoKMi4gICoqQ29uZGl0aW9uYWwgTG9naWMvQnJhbmNoaW5nOioqIFRoZSBjb2RlIGNoZWNrcyBgbWRkZXYtJmd0O3N5c2ZzX2FjdGl2ZWAsIGFuZCB1c2VzIGB0b191bm1lcmdlYCBhbmQgYHRvX3JlbW92ZV9ncm91cHNgIGZvciBkZWZlcnJhbC4gVGhlIGBtZGRldmAgc3RydWN0dXJlIGl0c2VsZiBpcyBremFsbG9jJiMzOTtkIHdoZW4gaXQmIzM5O3MgY3JlYXRlZCwgbWVhbmluZyBpdHMgZmllbGRzIGFyZSB6ZXJvZWQgb3V0LiBUaGUgZGVmZXJyYWwgcG9pbnRlcnMsIGB0b191bm1lcmdlYCBhbmQgYHRvX3JlbW92ZV9ncm91cHNgIGFyZSBpbml0aWFsaXplZCB0byBOVUxMIGFuZCBjbGVhcmVkIHRvIE5VTEwgaW4gYG1kZGV2X3VubG9ja2AuIFRoaXMgcmVkdWNlcyB0aGUgcmlzayBvZiBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IHJlbGllZi4KCjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwb3RlbnRpYWxseSBiZWluZyByZWFkLiBUaGUgZGVmZXJyYWwgbWVjaGFuaXNtcyBsb29rIGNsZWFuIGFuZCBzYWZlIGluIHRoYXQgcmVnYXJkLgoKNC4gICoqQnVmZmVyIEFjY2VzczoqKiBJIGRvbiYjMzk7dCBzZWUgYW55IGNvZGUgaW50cm9kdWNpbmcgYm91bmRzIGNoZWNrcywgbGVuZ3RoIG1hbmlwdWxhdGlvbnMsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gVGhlIHBhdGNoIG1vZGlmaWVzIHN5c2ZzIG9wZXJhdGlvbnMsIG5vdCBkYXRhIGJ1ZmZlcnMsIHdoaWNoIGlzIGEgZ29vZCBzaWduLgoKSW4gc3VtbWFyeSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSB1c2Ugb2Yga3phbGxvYyYjMzk7ZCBgbWRkZXZgIHN0cnVjdCwgTlVMTC1pbml0aWFsaXplZCBkZWZlcnJhbCBwb2ludGVycywgYW5kIGRlZmVycmVkIG9wZXJhdGlvbnMgbG9vayBsaWtlIGEgc29saWQgc29sdXRpb24gdG8gdGhlIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhvdXQgb3BlbmluZyB1cCBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgc3RpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBkZXRhaWxzLCBidXQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHBvc2l0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvbWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21kL21kLmM9NjMyMT1FWFBPUlRfU1lNQk9MX0dQTChtZF9pbml0X3N0YWNraW5nX2xpbWl0cyk7XG5kcml2ZXJzL21kL21kLmMtNjMyMi1cbmRyaXZlcnMvbWQvbWQuYzo2MzIzOnN0cnVjdCBtZGRldiAqbWRfYWxsb2MoZGV2X3QgZGV2LCBjaGFyICpuYW1lKVxuZHJpdmVycy9tZC9tZC5jLTYzMjQte1xuLS1cbmRyaXZlcnMvbWQvbWQuYy02NDMyLVxuZHJpdmVycy9tZC9tZC5jOjY0MzM6c3RhdGljIGludCBtZF9hbGxvY19hbmRfcHV0KGRldl90IGRldiwgY2hhciAqbmFtZSlcbmRyaXZlcnMvbWQvbWQuYy02NDM0LXtcbmRyaXZlcnMvbWQvbWQuYzo2NDM1Olx0c3RydWN0IG1kZGV2ICptZGRldiA9IG1kX2FsbG9jKGRldiwgbmFtZSk7XG5kcml2ZXJzL21kL21kLmMtNjQzNi1cbi0tXG5kcml2ZXJzL21kL21kLmM9NjQ0Nj1zdGF0aWMgdm9pZCBtZF9wcm9iZShkZXZfdCBkZXYpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTY0NTAtXHRpZiAoY3JlYXRlX29uX29wZW4pXG5kcml2ZXJzL21kL21kLmM6NjQ1MTpcdFx0bWRfYWxsb2NfYW5kX3B1dChkZXYsIE5VTEwpO1xuZHJpdmVycy9tZC9tZC5jLTY0NTItfVxuLS1cbmRyaXZlcnMvbWQvbWQuYz02NDU0PXN0YXRpYyBpbnQgYWRkX25hbWVkX2FycmF5KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy9tZC9tZC5jLTY0NzItXHRpZiAoc3RybmNtcChidWYsIFwmIzM0O21kX1wmIzM0OywgMykgPT0gMClcbmRyaXZlcnMvbWQvbWQuYzo2NDczOlx0XHRyZXR1cm4gbWRfYWxsb2NfYW5kX3B1dCgwLCBidWYpO1xuZHJpdmVycy9tZC9tZC5jLTY0NzQtXHRpZiAoc3RybmNtcChidWYsIFwmIzM0O21kXCYjMzQ7LCAyKSA9PSAwIFx1MDAyNlx1MDAyNlxuLS1cbmRyaXZlcnMvbWQvbWQuYy02NDc3LVx0ICAgIGRldm51bSBcdTAwM2M9IE1JTk9STUFTSylcbmRyaXZlcnMvbWQvbWQuYzo2NDc4Olx0XHRyZXR1cm4gbWRfYWxsb2NfYW5kX3B1dChNS0RFVihNRF9NQUpPUiwgZGV2bnVtKSwgTlVMTCk7XG5kcml2ZXJzL21kL21kLmMtNjQ3OS1cbi0tXG5kcml2ZXJzL21kL21kLmM9NzI4Nj1zdGF0aWMgdm9pZCBhdXRvcnVuX2RldmljZXMoaW50IHBhcnQpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTczMjUtXG5kcml2ZXJzL21kL21kLmM6NzMyNjpcdFx0bWRkZXYgPSBtZF9hbGxvYyhkZXYsIE5VTEwpO1xuZHJpdmVycy9tZC9tZC5jLTczMjctXHRcdGlmIChJU19FUlIobWRkZXYpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBtZF9hbGxvY2AgRGVmaW5pdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgYG1kX2FsbG9jYCBpcyBhY3R1YWxseSBkb2luZy4gU2luY2UgSSBjYW4mIzM5O3QgcmVseSBvbiBtZW1vcnksIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCB0byBwaW5wb2ludCB0aGUgZXhhY3QgZGVmaW5pdGlvbi4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbjsgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3MgY29udHJhY3QgYW5kIGJlaGF2aW9yIGlzIGNydWNpYWwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGVsc2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHBpdGZhbGxzIG9yIGNsZXZlciB0cmlja3MgYnVyaWVkIHdpdGhpbiB0aGUgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlIGNvZGUgZGlyZWN0bHkgaXMgZ29pbmcgdG8gc2F2ZSBtZSB0aW1lIGFuZCBlZmZvcnQgaW4gdGhlIGxvbmcgcnVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzMjMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjMyMzpcdHN0cnVjdCBtZGRldiAqbWRfYWxsb2MoZGV2X3QgZGV2LCBjaGFyICpuYW1lKVxuNjMyNDpcdHtcbjYzMjU6XHRcdC8qXG42MzI2Olx0XHQgKiBJZiBkZXYgaXMgemVybywgbmFtZSBpcyB0aGUgbmFtZSBvZiBhIGRldmljZSB0byBhbGxvY2F0ZSB3aXRoXG42MzI3Olx0XHQgKiBhbiBhcmJpdHJhcnkgbWlub3IgbnVtYmVyLiAgSXQgd2lsbCBiZSBcJiMzNDttZF8/Pz9cJiMzNDtcbjYzMjg6XHRcdCAqIElmIGRldiBpcyBub24temVybyBpdCBtdXN0IGJlIGEgZGV2aWNlIG51bWJlciB3aXRoIGEgTUFKT1Igb2ZcbjYzMjk6XHRcdCAqIE1EX01BSk9SIG9yIG1kcF9tYWpvci4gIEluIHRoaXMgY2FzZSwgaWYgXCYjMzQ7bmFtZVwmIzM0OyBpcyBOVUxMLCB0aGVuXG42MzMwOlx0XHQgKiB0aGUgZGV2aWNlIGlzIGJlaW5nIGNyZWF0ZWQgYnkgb3BlbmluZyBhIG5vZGUgaW4gL2Rldi5cbjYzMzE6XHRcdCAqIElmIFwmIzM0O25hbWVcJiMzNDsgaXMgbm90IE5VTEwsIHRoZSBkZXZpY2UgaXMgYmVpbmcgY3JlYXRlZCBieVxuNjMzMjpcdFx0ICogd3JpdGluZyB0byAvc3lzL21vZHVsZS9tZF9tb2QvcGFyYW1ldGVycy9uZXdfYXJyYXkuXG42MzMzOlx0XHQgKi9cbjYzMzQ6XHRcdHN0YXRpYyBERUZJTkVfTVVURVgoZGlza3NfbXV0ZXgpO1xuNjMzNTpcdFx0c3RydWN0IG1kZGV2ICptZGRldjtcbjYzMzY6XHRcdHN0cnVjdCBnZW5kaXNrICpkaXNrO1xuNjMzNzpcdFx0aW50IHBhcnRpdGlvbmVkO1xuNjMzODpcdFx0aW50IHNoaWZ0O1xuNjMzOTpcdFx0aW50IHVuaXQ7XG42MzQwOlx0XHRpbnQgZXJyb3I7XG42MzQxOlx0XG42MzQyOlx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipEaXZpbmcgRGVlcGVyIGludG8gYG1kX2FsbG9jYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiAmIzM0O0NoZWNrIGZ1cnRoZXIgaW4gYG1kX2FsbG9jYC4mIzM0OyBUaGF0JiMzOTtzIHRoZSBjb3JlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgY2xlYXJseSB3YXNuJiMzOTt0IGVub3VnaCwgb3IgcGVyaGFwcyBJJiMzOTttIHNlZWluZyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHRoYXQgc29tZXRoaW5nIGlzIHVuY2xlYXIuIFdlJiMzOTt2ZSBnb3QgYSBzcGVjaWZpYyBmdW5jdGlvbiBvZiBpbnRlcmVzdCBoZXJlLCBgbWRfYWxsb2NgLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGNyaXRpY2FsIHRoZXJlLCBzb21ldGhpbmcgbWlzc2VkIG9uIHRoZSBmaXJzdCBwYXNzLCBvciBzb21ldGhpbmcgdGhhdCBuZWVkcyB2ZXJpZmljYXRpb24uIEl0JiMzOTtzIHRpbWUgdG8gemVybyBpbiBhbmQgcmVhbGx5IGRpc3NlY3Qgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LCBsaWtlbHkgcmVnYXJkaW5nIGEgY2VydGFpbiBhc3BlY3QsIGJlY2F1c2UgaXQgcmVxdWlyZXMgZnVydGhlciBhdHRlbnRpb24uIFRpbWUgdG8gZ3JhYiBteSB0b29scyBhbmQgZGlnIGluLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIHVuY292ZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9tZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjM0MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MzQzOlx0XHQgKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgaW5zdGFuY2Ugb2YgdGhpcyBkZXZpY2UgdG8gYmUgY29tcGxldGVseVxuNjM0NDpcdFx0ICogcmVtb3ZlZCAobWRkZXZfZGVsYXllZF9kZWxldGUpLlxuNjM0NTpcdFx0ICovXG42MzQ2Olx0XHRmbHVzaF93b3JrcXVldWUobWRfbWlzY193cSk7XG42MzQ3Olx0XG42MzQ4Olx0XHRtdXRleF9sb2NrKFx1MDAyNmRpc2tzX211dGV4KTtcbjYzNDk6XHRcdG1kZGV2ID0gbWRkZXZfYWxsb2MoZGV2KTtcbjYzNTA6XHRcdGlmIChJU19FUlIobWRkZXYpKSB7XG42MzUxOlx0XHRcdGVycm9yID0gUFRSX0VSUihtZGRldik7XG42MzUyOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjYzNTM6XHRcdH1cbjYzNTQ6XHRcbjYzNTU6XHRcdHBhcnRpdGlvbmVkID0gKE1BSk9SKG1kZGV2LVx1MDAzZXVuaXQpICE9IE1EX01BSk9SKTtcbjYzNTY6XHRcdHNoaWZ0ID0gcGFydGl0aW9uZWQgPyBNZHBNaW5vclNoaWZ0IDogMDtcbjYzNTc6XHRcdHVuaXQgPSBNSU5PUihtZGRldi1cdTAwM2V1bml0KSBcdTAwM2VcdTAwM2Ugc2hpZnQ7XG42MzU4Olx0XG42MzU5Olx0XHRpZiAobmFtZSBcdTAwMjZcdTAwMjYgIWRldikge1xuNjM2MDpcdFx0XHQvKiBOZWVkIHRvIGVuc3VyZSB0aGF0ICYjMzk7bmFtZSYjMzk7IGlzIG5vdCBhIGR1cGxpY2F0ZS5cbjYzNjE6XHRcdFx0ICovXG42MzYyOlx0XHRcdHN0cnVjdCBtZGRldiAqbWRkZXYyO1xuNjM2MzpcdFx0XHRzcGluX2xvY2soXHUwMDI2YWxsX21kZGV2c19sb2NrKTtcbjYzNjQ6XHRcbjYzNjU6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtZGRldjIsIFx1MDAyNmFsbF9tZGRldnMsIGFsbF9tZGRldnMpXG42MzY2Olx0XHRcdFx0aWYgKG1kZGV2Mi1cdTAwM2VnZW5kaXNrIFx1MDAyNlx1MDAyNlxuNjM2NzpcdFx0XHRcdCAgICBzdHJjbXAobWRkZXYyLVx1MDAzZWdlbmRpc2stXHUwMDNlZGlza19uYW1lLCBuYW1lKSA9PSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBtZGRldl9hbGxvY2AqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbWRkZXZfYWxsb2NgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBgbWRkZXZgIHN0cnVjdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGFsbG9jYXRpb24gd29ya3MsIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZXhwZWN0ZWQgc3VycHJpc2VzIG9yIHBvdGVudGlhbCBnb3RjaGFzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGRpZmZlcmVudCBSQUlEIGxldmVscyBhbmQgYW55IGNvbnNpZGVyYXRpb25zIGZvciBsYXJnZSBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgTlVNQSBhcmNoaXRlY3R1cmVzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGl0JiMzOTtzIGRvaW5nIGFueSBpbml0aWFsaXphdGlvbiBvZiBjcml0aWNhbCBmaWVsZHMgb3Igc2V0dGluZyB1cCBhbnkgaW5pdGlhbCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgYG1kYCBsYXllciBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kZGV2X2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZC9tZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvbWQuYz04MjY9c3RhdGljIHN0cnVjdCBtZGRldiAqbWRkZXZfZmluZF9sb2NrZWQoZGV2X3QgdW5pdClcbi0tXG5kcml2ZXJzL21kL21kLmMtODM3LS8qIGZpbmQgYW4gdW51c2VkIHVuaXQgbnVtYmVyICovXG5kcml2ZXJzL21kL21kLmM6ODM4OnN0YXRpYyBkZXZfdCBtZGRldl9hbGxvY191bml0KHZvaWQpXG5kcml2ZXJzL21kL21kLmMtODM5LXtcbi0tXG5kcml2ZXJzL21kL21kLmMtODU3LVxuZHJpdmVycy9tZC9tZC5jOjg1ODpzdGF0aWMgc3RydWN0IG1kZGV2ICptZGRldl9hbGxvYyhkZXZfdCB1bml0KVxuZHJpdmVycy9tZC9tZC5jLTg1OS17XG4tLVxuZHJpdmVycy9tZC9tZC5jLTg4Ni1cdFx0ZXJyb3IgPSAtRU5PREVWO1xuZHJpdmVycy9tZC9tZC5jOjg4NzpcdFx0bmV3LVx1MDAzZXVuaXQgPSBtZGRldl9hbGxvY191bml0KCk7XG5kcml2ZXJzL21kL21kLmMtODg4LVx0XHRpZiAoIW5ldy1cdTAwM2V1bml0KVxuLS1cbmRyaXZlcnMvbWQvbWQuYz02MzIzPXN0cnVjdCBtZGRldiAqbWRfYWxsb2MoZGV2X3QgZGV2LCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbWQvbWQuYy02MzQ4LVx0bXV0ZXhfbG9jayhcdTAwMjZkaXNrc19tdXRleCk7XG5kcml2ZXJzL21kL21kLmM6NjM0OTpcdG1kZGV2ID0gbWRkZXZfYWxsb2MoZGV2KTtcbmRyaXZlcnMvbWQvbWQuYy02MzUwLVx0aWYgKElTX0VSUihtZGRldikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTUQgQ29yZSBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgcHJvYmxlbSBsaWtlbHkgcmVzaWRlcyB3aXRoaW4gdGhlIE1EIChNdWx0aXBsZSBEZXZpY2UpIGNvcmUsIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGRyaXZlcnMvbWQvbWQuY2AsIHNwZWNpZmljYWxseSBsaW5lcyA4NTgtODgwLiBUaGlzIGFyZWEgbGlrZWx5IGRlYWxzIHdpdGggYSBjcnVjaWFsIGFzcGVjdCBvZiB3aGF0ZXZlciBpc3N1ZSBJJiMzOTttIGNoYXNpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgdGhlIGNvZGUgd2l0aGluIHRoYXQgcmFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGF0IHNwZWNpZmljIGNvZGUgcGF0aCwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgb24gdGhlIG92ZXJhbGwgc3lzdGVtLiBUaW1lIHRvIHNlZSB3aGF0IHNlY3JldHMgdGhvc2UgbGluZXMgYXJlIGhpZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL21kL21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1ODpcdHN0YXRpYyBzdHJ1Y3QgbWRkZXYgKm1kZGV2X2FsbG9jKGRldl90IHVuaXQpXG4gODU5Olx0e1xuIDg2MDpcdFx0c3RydWN0IG1kZGV2ICpuZXc7XG4gODYxOlx0XHRpbnQgZXJyb3I7XG4gODYyOlx0XG4gODYzOlx0XHRpZiAodW5pdCBcdTAwMjZcdTAwMjYgTUFKT1IodW5pdCkgIT0gTURfTUFKT1IpXG4gODY0Olx0XHRcdHVuaXQgXHUwMDI2PSB+KCgxIFx1MDAzY1x1MDAzYyBNZHBNaW5vclNoaWZ0KSAtIDEpO1xuIDg2NTpcdFxuIDg2NjpcdFx0bmV3ID0ga3phbGxvY19vYmooKm5ldyk7XG4gODY3Olx0XHRpZiAoIW5ldylcbiA4Njg6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gODY5Olx0XG4gODcwOlx0XHRlcnJvciA9IG1kZGV2X2luaXQobmV3KTtcbiA4NzE6XHRcdGlmIChlcnJvcilcbiA4NzI6XHRcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4gODczOlx0XG4gODc0Olx0XHRzcGluX2xvY2soXHUwMDI2YWxsX21kZGV2c19sb2NrKTtcbiA4NzU6XHRcdGlmICh1bml0KSB7XG4gODc2Olx0XHRcdGVycm9yID0gLUVFWElTVDtcbiA4Nzc6XHRcdFx0aWYgKG1kZGV2X2ZpbmRfbG9ja2VkKHVuaXQpKVxuIDg3ODpcdFx0XHRcdGdvdG8gb3V0X2Rlc3Ryb3lfbmV3O1xuIDg3OTpcdFx0XHRuZXctXHUwMDNldW5pdCA9IHVuaXQ7XG4gODgwOlx0XHRcdGlmIChNQUpPUih1bml0KSA9PSBNRF9NQUpPUilcbiA4ODE6XHRcdFx0XHRuZXctXHUwMDNlbWRfbWlub3IgPSBNSU5PUih1bml0KTtcbiA4ODI6XHRcdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjcwCgkJCQkJCQlvdXRwdXQ6IDIwNwoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgcHJldHR5IGdvb2QuIEl0IHN0YXJ0cyBieSB6ZXJvLWFsbG9jYXRpbmcgYSBgc3RydWN0IG1kZGV2YCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBpcyBhbHdheXMgYSBwbHVzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gbmV3IHBvaW50ZXIgZmllbGRzLCBgdG9fdW5tZXJnZWAgYW5kIGB0b19yZW1vdmVfZ3JvdXBzYCwgd2l0aGluIHRoaXMgc3RydWN0dXJlLiBDcnVjaWFsbHksIHRoZXNlIHBvaW50ZXJzIGFyZSBpbml0aWFsaXplZCB0byBOVUxMIGZyb20gdGhlIG91dHNldC4gVGhhdCYjMzk7cyBhIHNvbGlkIGZvdW5kYXRpb24uCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBzeW5jaHJvbml6aW5nIHN5c2ZzIGF0dHJpYnV0ZSBncm91cCByZW1vdmFsLCBhaW1pbmcgdG8gcHJldmVudCBkZWFkbG9ja3MgaW52b2x2aW5nIHRoZSBgcmVjb25maWdfbXV0ZXhgLiBUaGF0IGNvbnRleHQgaXMgaW1wb3J0YW50LiBUaGUgcG9pbnRlcnMgYXJlICpzZXQqIGJlZm9yZSB0aGUgdW5sb2NrIGFuZCAqY2xlYXJlZCogb3IgcHJvY2Vzc2VkIHdpdGhpbiBgbWRkZXZfdW5sb2NrKClgLiBUaGlzIHBhdHRlcm4gaXMgd2hlcmUgdGhpbmdzIGNhbiBnZXQgdHJpY2t5IGlmIG5vdCBpbXBsZW1lbnRlZCBjb3JyZWN0bHksIGJ1dCB0aGUgcHJvdmlkZWQgY29udGV4dCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpGcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MuIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG5vIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBjb3VsZCBjYXVzZSBpc3N1ZXMsIG5vIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGNlcnRhaW5seSBubyBtZW1vcnkgbGVha3Mgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwYXRjaCBpcyB2ZXJ5IGZvY3VzZWQgb24gc3luY2hyb25pemF0aW9uIGNvbmNlcm5zIHJlbGF0ZWQgdG8gdGhlIHJlbW92YWwgb2Ygc3lzZnMgYXR0cmlidXRlIGdyb3VwcywgYW5kIGl0JiMzOTtzIGJ1aWx0IHVwb24gemVyby1pbml0aWFsaXplZCBkYXRhLgoKVGhpcyByZWFsbHkgc3VnZ2VzdHMgdGhlIGlzc3VlcyBhcmUgZ29pbmcgdG8gcmV2b2x2ZSBhcm91bmQgc3luY2hyb25pemF0aW9uLCBsb2NraW5nLCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBCdXQgdGhlIGdvb2QgbmV3cyBoZXJlIGlzIHRoYXQgdGhlc2UgYXJlIHByZWNpc2VseSB0aGUga2luZHMgb2YgcHJvYmxlbXMgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGV0ZWN0b3JzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gS01TQU4sIHdpdGggaXRzIGZvY3VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpc24mIzM5O3QgZ29pbmcgdG8gYmUgdGhlIG1vc3QgcmVsZXZhbnQgdG9vbCBoZXJlLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2gmIzM5O3MgYE5lZWRzS01TQU5gIGlzIHJpZ2h0ZnVsbHkgYGZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIGNoYW5nZXMgYXJlIGZvciBzeXNmcyBncm91cCBjbGVhbnVwIHN5bmNocm9uaXphdGlvbiB0byBwcmV2ZW50IGRlYWRsb2NrcyBhcm91bmQgYHJlY29uZmlnX211dGV4YCwgYHN0cnVjdCBtZGRldmAgaXMga3phbGxvYyYjMzk7ZCwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbWFuaXB1bGF0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgYXJlIGludHJvZHVjZWQ7IGFueSBjb25jdXJyZW5jeSwgTlVMTCBwb2ludGVyLCBvciBVQUYgaXNzdWVzIGFyZSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUC9zdGFuZGFyZCBkZXRlY3RvcnMuCgpUaW1lIHRvIGBzZXQtcmVzdWx0c2AuIExvb2tzIGxpa2UgYSBzb2xpZCBwaWVjZSBvZiB3b3JrIHNvIGZhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgYXR0cmlidXRlIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBsb2dpYyBpbiB0aGUgTUQgKFNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBtYW5pcHVsYXRpbmcgc3lzZnMgZmlsZXMgdW5kZXIgbWRkZXYtXHUwMDNlcmVjb25maWdfbXV0ZXguIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHN5c2ZzIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBieSByZWNvcmRpbmcgcG9pbnRlcnMgKHRvX3VubWVyZ2UgYW5kIHRvX3JlbW92ZV9ncm91cHMpIGluIHN0cnVjdCBtZGRldiBhbmQgcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9ucyBpbiBtZGRldl91bmxvY2soKSBhZnRlciByZWxlYXNpbmcgcmVjb25maWdfbXV0ZXguXG5cbnN0cnVjdCBtZGRldiBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHZpYSBremFsbG9jLCBhbmQgdGhlIG5ldyBwb2ludGVyIGZpZWxkcyBhcmUgcHJvcGVybHkgbWFuYWdlZCBhbmQgY2xlYXJlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyB0byB1c2Vyc3BhY2UsIGRhdGEgYnVmZmVycywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgZGVyZWZlcmVuY2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeXNmcyBhdHRyaWJ1dGUgZ3JvdXAgcmVtb3ZhbCBhbmQgdW5tZXJnaW5nIGxvZ2ljIGluIHRoZSBNRCAoU29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIHRvIGF2b2lkIGRlYWRsb2NrcyB3aGVuIG1hbmlwdWxhdGluZyBzeXNmcyBmaWxlcyB1bmRlciBtZGRldi1cdTAwM2VyZWNvbmZpZ19tdXRleC4gU3BlY2lmaWNhbGx5LCBpdCBkZWZlcnMgc3lzZnMgZ3JvdXAgcmVtb3ZhbCBhbmQgdW5tZXJnaW5nIGJ5IHJlY29yZGluZyBwb2ludGVycyAodG9fdW5tZXJnZSBhbmQgdG9fcmVtb3ZlX2dyb3VwcykgaW4gc3RydWN0IG1kZGV2IGFuZCBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb25zIGluIG1kZGV2X3VubG9jaygpIGFmdGVyIHJlbGVhc2luZyByZWNvbmZpZ19tdXRleC5cblxuc3RydWN0IG1kZGV2IGluc3RhbmNlcyBhcmUgemVyby1hbGxvY2F0ZWQgdmlhIGt6YWxsb2MsIGFuZCB0aGUgbmV3IHBvaW50ZXIgZmllbGRzIGFyZSBwcm9wZXJseSBtYW5hZ2VkIGFuZCBjbGVhcmVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29waWVzIHRvIHVzZXJzcGFjZSwgZGF0YSBidWZmZXJzLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciBkZXJlZmVyZW5jaW5nLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjM6NTAuNjY0MDQ0OTQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMjI3NDAzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURcIixcbiAgICBcIkJMS19ERVZfTURcIixcbiAgICBcIk1EX0JJVE1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvY2F0aW9uX3N0b3JlXCIsXG4gICAgXCJtZF9iaXRtYXBfc3lzZnNfZGVsXCIsXG4gICAgXCJtZGRldl91bmxvY2tcIixcbiAgICBcIm1kX2JpdG1hcF9kZXN0cm95XCIsXG4gICAgXCJtZF9iaXRtYXBfc2V0X25vbmVcIixcbiAgICBcInNldF9iaXRtYXBfZmlsZVwiLFxuICAgIFwidXBkYXRlX2FycmF5X2luZm9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN5c2ZzIGF0dHJpYnV0ZSBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgbG9naWMgaW4gdGhlIE1EIChTb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gbWFuaXB1bGF0aW5nIHN5c2ZzIGZpbGVzIHVuZGVyIG1kZGV2LVxcdTAwM2VyZWNvbmZpZ19tdXRleC4gU3BlY2lmaWNhbGx5LCBpdCBkZWZlcnMgc3lzZnMgZ3JvdXAgcmVtb3ZhbCBhbmQgdW5tZXJnaW5nIGJ5IHJlY29yZGluZyBwb2ludGVycyAodG9fdW5tZXJnZSBhbmQgdG9fcmVtb3ZlX2dyb3VwcykgaW4gc3RydWN0IG1kZGV2IGFuZCBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb25zIGluIG1kZGV2X3VubG9jaygpIGFmdGVyIHJlbGVhc2luZyByZWNvbmZpZ19tdXRleC5cXG5cXG5zdHJ1Y3QgbWRkZXYgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvYywgYW5kIHRoZSBuZXcgcG9pbnRlciBmaWVsZHMgYXJlIHByb3Blcmx5IG1hbmFnZWQgYW5kIGNsZWFyZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBkYXRhIGJ1ZmZlcnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIGRlcmVmZXJlbmNpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGluIGRyaXZlcnMvbWQvbWQuYyBhbmQgZHJpdmVycy9tZC9tZC1iaXRtYXAuYywgYWRqdXN0aW5nIGhvdyBiaXRtYXAgc3lzZnMgYXR0cmlidXRlIGdyb3VwcyBhcmUgdW5tZXJnZWQgYW5kIHJlbW92ZWQgZHVyaW5nIG1kZGV2X3VubG9jaywgbG9jYXRpb25fc3RvcmUsIG1kX2JpdG1hcF9kZXN0cm95LCBhbmQgbWRfYml0bWFwX3NldF9ub25lIHRvIHByZXZlbnQgbG9jay9zeXNmcyBkZWFkbG9ja3MgYW5kIHJhY2VzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWQgc3lzZnMgYXR0cmlidXRlcyBhbmQgaW9jdGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyMzo1MC42NjQwNDk2MDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTk2OTg1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YTA0NGIwMmQzNGQzZTIxZjE1OTZiYjYzNzJkMzMxOGNiNGM5YWFlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDA6MjM6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1iaXRtYXAuYyBiL2RyaXZlcnMvbWQvbWQtYml0bWFwLmNcXG5pbmRleCBiODMyNWNiMDlhMzcxLi4zYTk3YWE0NjNlY2NmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYml0bWFwLmNcXG4rKysgYi9kcml2ZXJzL21kL21kLWJpdG1hcC5jXFxuQEAgLTI2MzgsNiArMjYzOCwxMSBAQCBsb2NhdGlvbl9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuIFxcdFxcdHJldHVybiBydjtcXG4gXFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbiBcXG4rXFx0aWYgKG1kZGV2LVxcdTAwM2VzeXNmc19hY3RpdmUpIHtcXG4rXFx0XFx0cnYgPSAtRUJVU1k7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHRpZiAobWRkZXYtXFx1MDAzZXBlcnMpIHtcXG4gXFx0XFx0aWYgKG1kZGV2LVxcdTAwM2VyZWNvdmVyeSB8fCBtZGRldi1cXHUwMDNlc3luY190aHJlYWQpIHtcXG4gXFx0XFx0XFx0cnYgPSAtRUJVU1k7XFxuQEAgLTI2NTMsNyArMjY1OCw3IEBAIGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCBcXHUwMDI2bWRfYml0bWFwX2ludGVybmFsX2dyb3VwKTtcXG4rXFx0XFx0bWRkZXYtXFx1MDAzZXRvX3VubWVyZ2UgPSBcXHUwMDI2bWRfYml0bWFwX2ludGVybmFsX2dyb3VwO1xcbiBcXHRcXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcXG4gXFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9pZCA9IElEX0JJVE1BUF9OT05FO1xcbiBcXHRcXHRpZiAoIW1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMobWRkZXYpKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcXG5pbmRleCA2ODBiMzRhNjNjYjNkLi5lODNjYWVjMDk2M2M1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWQvbWQuY1xcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xcbkBAIC02OTQsMTcgKzY5NCwyMCBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuIFxcdFxcdGtvYmplY3RfdWV2ZW50KFxcdTAwMjZtZGRldi1cXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfZGVsKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuK3N0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldixcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKmdyb3VwcylcXG4ge1xcbiBcXHRpbnQgbnJfZ3JvdXBzID0gMDtcXG4gXFxuLVxcdGZvciAobnJfZ3JvdXBzID0gMDsgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3Vwc1tucl9ncm91cHNdOyBucl9ncm91cHMrKylcXG4rXFx0aWYgKCFncm91cHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcysrKVxcbiBcXHRcXHQ7XFxuIFxcbiBcXHR3aGlsZSAoLS1ucl9ncm91cHMgXFx1MDAzZT0gMSlcXG4tXFx0XFx0c3lzZnNfdW5tZXJnZV9ncm91cChcXHUwMDI2bWRkZXYtXFx1MDAzZWtvYmosXFxuLVxcdFxcdFxcdFxcdCAgICBtZGRldi1cXHUwMDNlYml0bWFwX29wcy1cXHUwMDNlZ3JvdXBzW25yX2dyb3Vwc10pO1xcbi1cXHRzeXNmc19yZW1vdmVfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCBtZGRldi1cXHUwMDNlYml0bWFwX29wcy1cXHUwMDNlZ3JvdXBzWzBdKTtcXG4rXFx0XFx0c3lzZnNfdW5tZXJnZV9ncm91cChcXHUwMDI2bWRkZXYtXFx1MDAzZWtvYmosIGdyb3Vwc1tucl9ncm91cHNdKTtcXG4rXFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFxcdTAwMjZtZGRldi1cXHUwMDNla29iaiwgZ3JvdXBzWzBdKTtcXG4gfVxcbiBcXG4gYm9vbCBtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuQEAgLTkyMSw3ICs5MjQsNyBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbiBcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNm1kZGV2LVxcdTAwM2VkZWxldGluZykpXFxuIFxcdFxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNm1kZGV2LVxcdTAwM2VkZWxldGluZywgXFx1MDAyNmRlbGV0ZSk7XFxuIFxcbi1cXHRpZiAobWRkZXYtXFx1MDAzZXRvX3JlbW92ZSkge1xcbitcXHRpZiAobWRkZXYtXFx1MDAzZXRvX3JlbW92ZSB8fCBtZGRldi1cXHUwMDNldG9fdW5tZXJnZSB8fCBtZGRldi1cXHUwMDNldG9fcmVtb3ZlX2dyb3Vwcykge1xcbiBcXHRcXHQvKiBUaGVzZSBjYW5ub3QgYmUgcmVtb3ZlZCB1bmRlciByZWNvbmZpZ19tdXRleCBhc1xcbiBcXHRcXHQgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXhcXG4gXFx0XFx0ICogd2hpbGUgaG9sZGluZyB0aGUgZmlsZSB1bnJlbW92YWJsZSwgd2hpY2ggbGVhZHMgdG9cXG5AQCAtOTM1LDEyICs5MzgsMjEgQEAgdm9pZCBtZGRldl91bmxvY2soc3RydWN0IG1kZGV2ICptZGRldilcXG4gXFx0XFx0ICogaXMgc2Vlbi5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3JlbW92ZSA9IG1kZGV2LVxcdTAwM2V0b19yZW1vdmU7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3VubWVyZ2UgPSBtZGRldi1cXHUwMDNldG9fdW5tZXJnZTtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cXHUwMDNldG9fcmVtb3ZlX2dyb3VwcztcXG4rXFxuIFxcdFxcdG1kZGV2LVxcdTAwM2V0b19yZW1vdmUgPSBOVUxMO1xcbitcXHRcXHRtZGRldi1cXHUwMDNldG9fdW5tZXJnZSA9IE5VTEw7XFxuK1xcdFxcdG1kZGV2LVxcdTAwM2V0b19yZW1vdmVfZ3JvdXBzID0gTlVMTDtcXG4gXFx0XFx0bWRkZXYtXFx1MDAzZXN5c2ZzX2FjdGl2ZSA9IDE7XFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRkZXYtXFx1MDAzZXJlY29uZmlnX211dGV4KTtcXG4gXFxuIFxcdFxcdGlmIChtZGRldi1cXHUwMDNla29iai5zZCkge1xcbi1cXHRcXHRcXHRpZiAodG9fcmVtb3ZlICE9IFxcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKVxcbitcXHRcXHRcXHRpZiAodG9fdW5tZXJnZSlcXG4rXFx0XFx0XFx0XFx0c3lzZnNfdW5tZXJnZV9ncm91cChcXHUwMDI2bWRkZXYtXFx1MDAzZWtvYmosIHRvX3VubWVyZ2UpO1xcbitcXHRcXHRcXHRpZiAodG9fcmVtb3ZlX2dyb3VwcylcXG4rXFx0XFx0XFx0XFx0bWRfYml0bWFwX3N5c2ZzX2RlbChtZGRldiwgdG9fcmVtb3ZlX2dyb3Vwcyk7XFxuK1xcdFxcdFxcdGlmICh0b19yZW1vdmUgXFx1MDAyNlxcdTAwMjYgdG9fcmVtb3ZlICE9IFxcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKVxcbiBcXHRcXHRcXHRcXHRzeXNmc19yZW1vdmVfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCB0b19yZW1vdmUpO1xcbiBcXHRcXHRcXHRpZiAobWRkZXYtXFx1MDAzZXBlcnMgPT0gTlVMTCB8fFxcbiBcXHRcXHRcXHQgICAgbWRkZXYtXFx1MDAzZXBlcnMtXFx1MDAzZXN5bmNfcmVxdWVzdCA9PSBOVUxMKSB7XFxuQEAgLTY2MzIsMTMgKzY2NDQsMTkgQEAgc3RhdGljIHZvaWQgbWRfYml0bWFwX2Rlc3Ryb3koc3RydWN0IG1kZGV2ICptZGRldilcXG4ge1xcbiBcXHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSBcXHUwMDI2XFx1MDAyNiBtZGRldi1cXHUwMDNlYml0bWFwX29wcyBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3VwcylcXG4tXFx0XFx0bWRfYml0bWFwX3N5c2ZzX2RlbChtZGRldik7XFxuK1xcdFxcdG1kZGV2LVxcdTAwM2V0b19yZW1vdmVfZ3JvdXBzID0gbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3VwcztcXG4gXFxuIFxcdG1kX2JpdG1hcF9kZXN0cm95X25vc3lzZnMobWRkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc2V0X25vbmUoc3RydWN0IG1kZGV2ICptZGRldilcXG4ge1xcbitcXHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSBcXHUwMDI2XFx1MDAyNiBtZGRldi1cXHUwMDNlYml0bWFwX29wcyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3VwcyBcXHUwMDI2XFx1MDAyNiBtZGRldi1cXHUwMDNlYml0bWFwX29wcy1cXHUwMDNlZ3JvdXBzWzFdKVxcbitcXHRcXHRtZGRldi1cXHUwMDNldG9fdW5tZXJnZSA9IG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2Vncm91cHNbMV07XFxuK1xcbitcXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcXG4rXFxuIFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcXG4gXFx0aWYgKCFtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKG1kZGV2KSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC03ODY4LDEyICs3ODg2LDEwIEBAIHN0YXRpYyBpbnQgc2V0X2JpdG1hcF9maWxlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCBmZClcXG4gXFx0XFx0XFx0XFx0ZXJyID0gbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWxvYWQobWRkZXYpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRcXHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XFxuIFxcdFxcdFxcdFxcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XFxuIFxcdFxcdFxcdFxcdGZkID0gLTE7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIGlmIChmZCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0bWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpO1xcbiBcXHRcXHRcXHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtODE4Nyw3ICs4MjAzLDYgQEAgc3RhdGljIGludCB1cGRhdGVfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBtZHVfYXJyYXlfaW5mb190ICppbmZvKVxcbiBcXHRcXHRcXHRcXHRydiA9IG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2Vsb2FkKG1kZGV2KTtcXG4gXFxuIFxcdFxcdFxcdGlmIChydikge1xcbi1cXHRcXHRcXHRcXHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XFxuIFxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xcbiBcXHRcXHRcXHRcXHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xcbiBcXHRcXHRcXHR9XFxuQEAgLTgyMTYsNyArODIzMSw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbylcXG4gXFx0XFx0XFx0XFx0cHV0X2NsdXN0ZXJfb3BzKG1kZGV2KTtcXG4gXFx0XFx0XFx0XFx0bWRkZXYtXFx1MDAzZXNhZmVtb2RlX2RlbGF5ID0gREVGQVVMVF9TQUZFTU9ERV9ERUxBWTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XFxuIFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xcbiBcXHRcXHRcXHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxcbmluZGV4IGI2ZDJlODkyOWEwZjkuLmM4NjJkNjUxOWI4MWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9tZC5oXFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXFxuQEAgLTYwOCw2ICs2MDgsOCBAQCBzdHJ1Y3QgbWRkZXYge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0YWxsX21kZGV2cztcXG4gXFxuIFxcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXBcXHQqdG9fcmVtb3ZlO1xcbitcXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwXFx0KnRvX3VubWVyZ2U7XFxuK1xcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXBcXHQqY29uc3QgKnRvX3JlbW92ZV9ncm91cHM7XFxuIFxcbiBcXHRzdHJ1Y3QgYmlvX3NldFxcdFxcdFxcdGJpb19zZXQ7XFxuIFxcdHN0cnVjdCBiaW9fc2V0XFx0XFx0XFx0c3luY19zZXQ7IC8qIGZvciBzeW5jIG9wZXJhdGlvbnMgbGlrZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyMzo1Mi4zMjQzMzkwNDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMjQ4Njg4ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1EXCIsXG4gICAgXCJCTEtfREVWX01EXCIsXG4gICAgXCJNRF9CSVRNQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb2NhdGlvbl9zdG9yZVwiLFxuICAgIFwibWRfYml0bWFwX3N5c2ZzX2RlbFwiLFxuICAgIFwibWRkZXZfdW5sb2NrXCIsXG4gICAgXCJtZF9iaXRtYXBfZGVzdHJveVwiLFxuICAgIFwibWRfYml0bWFwX3NldF9ub25lXCIsXG4gICAgXCJzZXRfYml0bWFwX2ZpbGVcIixcbiAgICBcInVwZGF0ZV9hcnJheV9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1EIChzb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gaW4gZHJpdmVycy9tZC9tZC5jIGFuZCBkcml2ZXJzL21kL21kLWJpdG1hcC5jLCBhZGp1c3RpbmcgaG93IGJpdG1hcCBzeXNmcyBhdHRyaWJ1dGUgZ3JvdXBzIGFyZSB1bm1lcmdlZCBhbmQgcmVtb3ZlZCBkdXJpbmcgbWRkZXZfdW5sb2NrLCBsb2NhdGlvbl9zdG9yZSwgbWRfYml0bWFwX2Rlc3Ryb3ksIGFuZCBtZF9iaXRtYXBfc2V0X25vbmUgdG8gcHJldmVudCBsb2NrL3N5c2ZzIGRlYWRsb2NrcyBhbmQgcmFjZXMuIFRoaXMgY29kZSBpcyBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtZCBzeXNmcyBhdHRyaWJ1dGVzIGFuZCBpb2N0bHMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWEwNDRiMDJkMzRkM2UyMWYxNTk2YmI2MzcyZDMzMThjYjRjOWFhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDA6MjM6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLWJpdG1hcC5jIGIvZHJpdmVycy9tZC9tZC1iaXRtYXAuY1xuaW5kZXggYjgzMjVjYjA5YTM3MS4uM2E5N2FhNDYzZWNjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQtYml0bWFwLmNcbisrKyBiL2RyaXZlcnMvbWQvbWQtYml0bWFwLmNcbkBAIC0yNjM4LDYgKzI2MzgsMTEgQEAgbG9jYXRpb25fc3RvcmUoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0XHRyZXR1cm4gcnY7XG4gXHRub2lvX2ZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG4gXG4rXHRpZiAobWRkZXYtXHUwMDNlc3lzZnNfYWN0aXZlKSB7XG4rXHRcdHJ2ID0gLUVCVVNZO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdGlmIChtZGRldi1cdTAwM2VwZXJzKSB7XG4gXHRcdGlmIChtZGRldi1cdTAwM2VyZWNvdmVyeSB8fCBtZGRldi1cdTAwM2VzeW5jX3RocmVhZCkge1xuIFx0XHRcdHJ2ID0gLUVCVVNZO1xuQEAgLTI2NTMsNyArMjY1OCw3IEBAIGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIFx1MDAyNm1kX2JpdG1hcF9pbnRlcm5hbF9ncm91cCk7XG4rXHRcdG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgPSBcdTAwMjZtZF9iaXRtYXBfaW50ZXJuYWxfZ3JvdXA7XG4gXHRcdG1kX2JpdG1hcF9kZXN0cm95X25vc3lzZnMobWRkZXYpO1xuIFx0XHRtZGRldi1cdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcbiBcdFx0aWYgKCFtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKG1kZGV2KSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmNcbmluZGV4IDY4MGIzNGE2M2NiM2QuLmU4M2NhZWMwOTYzYzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLmNcbisrKyBiL2RyaXZlcnMvbWQvbWQuY1xuQEAgLTY5NCwxNyArNjk0LDIwIEBAIHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19hZGQoc3RydWN0IG1kZGV2ICptZGRldilcbiBcdFx0a29iamVjdF91ZXZlbnQoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfZGVsKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4rc3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2RlbChzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKmdyb3VwcylcbiB7XG4gXHRpbnQgbnJfZ3JvdXBzID0gMDtcbiBcbi1cdGZvciAobnJfZ3JvdXBzID0gMDsgbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHNbbnJfZ3JvdXBzXTsgbnJfZ3JvdXBzKyspXG4rXHRpZiAoIWdyb3VwcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChucl9ncm91cHMgPSAwOyBncm91cHNbbnJfZ3JvdXBzXTsgbnJfZ3JvdXBzKyspXG4gXHRcdDtcbiBcbiBcdHdoaWxlICgtLW5yX2dyb3VwcyBcdTAwM2U9IDEpXG4tXHRcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaixcbi1cdFx0XHRcdCAgICBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1tucl9ncm91cHNdKTtcbi1cdHN5c2ZzX3JlbW92ZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1swXSk7XG4rXHRcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgZ3JvdXBzW25yX2dyb3Vwc10pO1xuK1x0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIGdyb3Vwc1swXSk7XG4gfVxuIFxuIGJvb2wgbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuQEAgLTkyMSw3ICs5MjQsNyBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm1kZGV2LVx1MDAzZWRlbGV0aW5nKSlcbiBcdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZtZGRldi1cdTAwM2VkZWxldGluZywgXHUwMDI2ZGVsZXRlKTtcbiBcbi1cdGlmIChtZGRldi1cdTAwM2V0b19yZW1vdmUpIHtcbitcdGlmIChtZGRldi1cdTAwM2V0b19yZW1vdmUgfHwgbWRkZXYtXHUwMDNldG9fdW5tZXJnZSB8fCBtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzKSB7XG4gXHRcdC8qIFRoZXNlIGNhbm5vdCBiZSByZW1vdmVkIHVuZGVyIHJlY29uZmlnX211dGV4IGFzXG4gXHRcdCAqIGFuIGFjY2VzcyB0byB0aGUgZmlsZXMgd2lsbCB0cnkgdG8gdGFrZSByZWNvbmZpZ19tdXRleFxuIFx0XHQgKiB3aGlsZSBob2xkaW5nIHRoZSBmaWxlIHVucmVtb3ZhYmxlLCB3aGljaCBsZWFkcyB0b1xuQEAgLTkzNSwxMiArOTM4LDIxIEBAIHZvaWQgbWRkZXZfdW5sb2NrKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4gXHRcdCAqIGlzIHNlZW4uXG4gXHRcdCAqL1xuIFx0XHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b19yZW1vdmUgPSBtZGRldi1cdTAwM2V0b19yZW1vdmU7XG4rXHRcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnRvX3VubWVyZ2UgPSBtZGRldi1cdTAwM2V0b191bm1lcmdlO1xuK1x0XHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpjb25zdCAqdG9fcmVtb3ZlX2dyb3VwcyA9IG1kZGV2LVx1MDAzZXRvX3JlbW92ZV9ncm91cHM7XG4rXG4gXHRcdG1kZGV2LVx1MDAzZXRvX3JlbW92ZSA9IE5VTEw7XG4rXHRcdG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgPSBOVUxMO1xuK1x0XHRtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzID0gTlVMTDtcbiBcdFx0bWRkZXYtXHUwMDNlc3lzZnNfYWN0aXZlID0gMTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZGV2LVx1MDAzZXJlY29uZmlnX211dGV4KTtcbiBcbiBcdFx0aWYgKG1kZGV2LVx1MDAzZWtvYmouc2QpIHtcbi1cdFx0XHRpZiAodG9fcmVtb3ZlICE9IFx1MDAyNm1kX3JlZHVuZGFuY3lfZ3JvdXApXG4rXHRcdFx0aWYgKHRvX3VubWVyZ2UpXG4rXHRcdFx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIHRvX3VubWVyZ2UpO1xuK1x0XHRcdGlmICh0b19yZW1vdmVfZ3JvdXBzKVxuK1x0XHRcdFx0bWRfYml0bWFwX3N5c2ZzX2RlbChtZGRldiwgdG9fcmVtb3ZlX2dyb3Vwcyk7XG4rXHRcdFx0aWYgKHRvX3JlbW92ZSBcdTAwMjZcdTAwMjYgdG9fcmVtb3ZlICE9IFx1MDAyNm1kX3JlZHVuZGFuY3lfZ3JvdXApXG4gXHRcdFx0XHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgdG9fcmVtb3ZlKTtcbiBcdFx0XHRpZiAobWRkZXYtXHUwMDNlcGVycyA9PSBOVUxMIHx8XG4gXHRcdFx0ICAgIG1kZGV2LVx1MDAzZXBlcnMtXHUwMDNlc3luY19yZXF1ZXN0ID09IE5VTEwpIHtcbkBAIC02NjMyLDEzICs2NjQ0LDE5IEBAIHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9kZXN0cm95KHN0cnVjdCBtZGRldiAqbWRkZXYpXG4ge1xuIFx0aWYgKCFtZGRldl9pc19kbShtZGRldikgXHUwMDI2XHUwMDI2IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMgXHUwMDI2XHUwMDI2XG4gXHQgICAgbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHMpXG4tXHRcdG1kX2JpdG1hcF9zeXNmc19kZWwobWRkZXYpO1xuK1x0XHRtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHM7XG4gXG4gXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWRfYml0bWFwX3NldF9ub25lKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4ge1xuK1x0aWYgKCFtZGRldl9pc19kbShtZGRldikgXHUwMDI2XHUwMDI2IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMgXHUwMDI2XHUwMDI2XG4rXHQgICAgbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHMgXHUwMDI2XHUwMDI2IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzWzFdKVxuK1x0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHNbMV07XG4rXG4rXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcbitcbiBcdG1kZGV2LVx1MDAzZWJpdG1hcF9pZCA9IElEX0JJVE1BUF9OT05FO1xuIFx0aWYgKCFtZGRldl9zZXRfYml0bWFwX29wc19ub3N5c2ZzKG1kZGV2KSlcbiBcdFx0cmV0dXJuO1xuQEAgLTc4NjgsMTIgKzc4ODYsMTAgQEAgc3RhdGljIGludCBzZXRfYml0bWFwX2ZpbGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZkKVxuIFx0XHRcdFx0ZXJyID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vsb2FkKG1kZGV2KTtcbiBcbiBcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuIFx0XHRcdFx0ZmQgPSAtMTtcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoZmQgXHUwMDNjIDApIHtcbi1cdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0fVxuIFx0fVxuQEAgLTgxODcsNyArODIwMyw2IEBAIHN0YXRpYyBpbnQgdXBkYXRlX2FycmF5X2luZm8oc3RydWN0IG1kZGV2ICptZGRldiwgbWR1X2FycmF5X2luZm9fdCAqaW5mbylcbiBcdFx0XHRcdHJ2ID0gbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vsb2FkKG1kZGV2KTtcbiBcbiBcdFx0XHRpZiAocnYpIHtcbi1cdFx0XHRcdG1kX2JpdG1hcF9kZXN0cm95KG1kZGV2KTtcbiBcdFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7XG4gXHRcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuIFx0XHRcdH1cbkBAIC04MjE2LDcgKzgyMzEsNiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIG1kdV9hcnJheV9pbmZvX3QgKmluZm8pXG4gXHRcdFx0XHRwdXRfY2x1c3Rlcl9vcHMobWRkZXYpO1xuIFx0XHRcdFx0bWRkZXYtXHUwMDNlc2FmZW1vZGVfZGVsYXkgPSBERUZBVUxUX1NBRkVNT0RFX0RFTEFZO1xuIFx0XHRcdH1cbi1cdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID0gMDtcbiBcdFx0XHRtZF9iaXRtYXBfc2V0X25vbmUobWRkZXYpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oXG5pbmRleCBiNmQyZTg5MjlhMGY5Li5jODYyZDY1MTliODFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5oXG4rKysgYi9kcml2ZXJzL21kL21kLmhcbkBAIC02MDgsNiArNjA4LDggQEAgc3RydWN0IG1kZGV2IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0YWxsX21kZGV2cztcbiBcbiBcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXBcdCp0b19yZW1vdmU7XG4rXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwXHQqdG9fdW5tZXJnZTtcbitcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXBcdCpjb25zdCAqdG9fcmVtb3ZlX2dyb3VwcztcbiBcbiBcdHN0cnVjdCBiaW9fc2V0XHRcdFx0YmlvX3NldDtcbiBcdHN0cnVjdCBiaW9fc2V0XHRcdFx0c3luY19zZXQ7IC8qIGZvciBzeW5jIG9wZXJhdGlvbnMgbGlrZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjM6NTIuMzI0MzQwMjE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODA5MTkyNTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpbnV4IFNvZnR3YXJlIFJBSUQgKG1kKSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwncyBNRCBzdWJzeXN0ZW0uIEl0J3MgdG91Y2hpbmcgYGRyaXZlcnMvbWQvbWQtYml0bWFwLmNgLCBgZHJpdmVycy9tZC9tZC5jYCwgYW5kIGBkcml2ZXJzL21kL21kLmhgLCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvcmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgTUQgYml0bWFwIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHN5c2ZzIGludGVyYWN0aW9uLiBUaGlzIGhpbnRzIGF0IHNvbWUgcmVmaW5lbWVudHMgaW4gaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBiaXRtYXAgbGlmZWN5Y2xlIGFuZCBob3cgc3lzZnMgZ3JvdXBzIGFyZSBhZGRlZCwgcmVtb3ZlZCwgYW5kIHVubWVyZ2VkLCBlc3BlY2lhbGx5IGR1cmluZyBsb2NrL3VubG9jayBvcGVyYXRpb25zLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOlxuXG4xLiAgKipgZHJpdmVycy9tZC9tZC1iaXRtYXAuY2A6KiogVGhlIGBsb2NhdGlvbl9zdG9yZWAgZnVuY3Rpb24gbm93IGhhcyBhIHZpdGFsIGNoZWNrOiBgaWYgKG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSkgeyBydiA9IC1FQlVTWTsgZ290byBvdXQ7IH1gLiBUaGlzIHByZXZlbnRzIG1vZGlmaWNhdGlvbiB3aGVuIHRoZSBzeXN0ZW0gaXMgYWN0aXZlbHkgdXNpbmcgc3lzZnMuIFRoaXMgaXMgZ29vZCwgZW5zdXJpbmcgbm8gY29uY3VycmVudCBvcGVyYXRpb25zLiBBbHNvLCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHVubWVyZ2luZyB0aGUgZ3JvdXAsIGBzeXNmc191bm1lcmdlX2dyb3VwYCB3ZSBub3cgaGF2ZSBgbWRkZXYtXHUwMDNldG9fdW5tZXJnZSA9IFx1MDAyNm1kX2JpdG1hcF9pbnRlcm5hbF9ncm91cDtgLiBUaGF0IG1lYW5zIHdlIGFyZSBkZWZlcnJpbmcgdGhlIHVubWVyZ2Ugb3BlcmF0aW9uLlxuXG4yLiAgKipgZHJpdmVycy9tZC9tZC5jYDoqKiBTaWduaWZpY2FudCBjaGFuZ2VzIGhlcmUuIFRoZSBgbWRfYml0bWFwX3N5c2ZzX2RlbGAgZnVuY3Rpb24gaGFzIGJlZW4gcmVmYWN0b3JlZCB0byBhY2NlcHQgYSBncm91cCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEga2V5IHVwZGF0ZS4gVGhlIGBtZGRldl91bmxvY2tgIGZ1bmN0aW9uIG5vdyBoYW5kbGVzIGBtZGRldi1cdTAwM2V0b191bm1lcmdlYCBhbmQgYG1kZGV2LVx1MDAzZXRvX3JlbW92ZV9ncm91cHNgIG91dHNpZGUgdGhlIGByZWNvbmZpZ19tdXRleGAgaWYgYHN5c2ZzX2FjdGl2ZWAgaXMgMSwgd2hpY2ggaW1wbGllcyBzb21lIGltcHJvdmVtZW50cyBpbiBsb2NraW5nL2NvbmN1cnJlbmN5LiBJbnN0ZWFkIG9mIGNhbGxpbmcgYG1kX2JpdG1hcF9zeXNmc19kZWxgLCB0aGUgZnVuY3Rpb25zIGBtZF9iaXRtYXBfZGVzdHJveWAsIGBtZF9iaXRtYXBfc2V0X25vbmVgLCBgc2V0X2JpdG1hcF9maWxlYCBhbmQgYHVwZGF0ZV9hcnJheV9pbmZvYCBhcmUgbm93IHNldHRpbmcgdGhlIGBtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzYCBvciBgbWRkZXYtXHUwMDNldG9fdW5tZXJnZWAgcGFyYW1ldGVycy4gU2VlbXMgbW9yZSBlZmZpY2llbnQuXG5cbjMuICAqKmBkcml2ZXJzL21kL21kLmhgOioqIFRoZSBhZGRpdGlvbiBvZiBgdG9fdW5tZXJnZWAgYW5kIGB0b19yZW1vdmVfZ3JvdXBzYCB0byB0aGUgYHN0cnVjdCBtZGRldmAgaXMgdGhlIHN1cHBvcnRpbmcgc3RydWN0dXJlLiBUaGVzZSBhcmUgdXNlZCB0byBkZWZlciB0aGUgc3lzZnMgZ3JvdXAgdW5tZXJnZSBhbmQgcmVtb3ZhbCBvcGVyYXRpb25zLlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyBmb3IgYm90aCBgbWQuY2AgYW5kIGBtZC1iaXRtYXAuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGNoYW5nZXMgYXJlIGV4cG9zZWQgdG8gdGhlIHVzZXIgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaGlzIHBhdGNoIGxvb2tzIGNsZWFuIGFuZCBpcyBsaWtlbHkgYWltZWQgYXQgaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBNRCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDowMC40MTYyNjgwNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI3MzA2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQkxLX0RFVl9NRHxDT05GSUdfTURfQklUTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9NYWtlZmlsZT0zMD1tZC1tb2QteVxcdCs9IG1kLm9cXG5kcml2ZXJzL21kL01ha2VmaWxlOjMxOm1kLW1vZC0kKENPTkZJR19NRF9CSVRNQVApXFx0Kz0gbWQtYml0bWFwLm9cXG5kcml2ZXJzL21kL01ha2VmaWxlLTMyLW1kLW1vZC0kKENPTkZJR19NRF9MTEJJVE1BUClcXHQrPSBtZC1sbGJpdG1hcC5vXFxuLS1cXG5kcml2ZXJzL21kL01ha2VmaWxlPTQ3PW9iai0kKENPTkZJR19CQ0FDSEUpXFx0XFx0Kz0gYmNhY2hlL1xcbmRyaXZlcnMvbWQvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX0JMS19ERVZfTUQpXFx0Kz0gbWQtbW9kLm9cXG5kcml2ZXJzL21kL01ha2VmaWxlOjQ5OmlmZXEgKCQoQ09ORklHX0JMS19ERVZfTUQpLHkpXFxuZHJpdmVycy9tZC9NYWtlZmlsZS01MC1vYmoteVxcdFxcdFxcdFxcdCs9IG1kLWF1dG9kZXRlY3Qub1xcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz01MDI9c3RhdGljIHZvaWQgbWRfYml0bWFwX2ZpbGVfa2ljayhzdHJ1Y3QgYml0bWFwICpiaXRtYXApO1xcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmMtNTAzLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NTA0OiNpZmRlZiBDT05GSUdfTURfQklUTUFQX0ZJTEVcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTUwNS1zdGF0aWMgdm9pZCBlbmRfYml0bWFwX3dyaXRlKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM9NTU4PXN0YXRpYyBpbnQgcmVhZF9maWxlX3BhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgaW5kZXgsXFxuLS1cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYxOC19XFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYzo2MTk6I2Vsc2UgLyogQ09ORklHX01EX0JJVE1BUF9GSUxFICovXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02MjAtc3RhdGljIHZvaWQgd3JpdGVfZmlsZV9wYWdlKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB3YWl0KVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYz02Mjg9c3RhdGljIHZvaWQgZnJlZV9idWZmZXJzKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuYy02MzEtfVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmM6NjMyOiNlbmRpZiAvKiBDT05GSUdfTURfQklUTUFQX0ZJTEUgKi9cXG5kcml2ZXJzL21kL21kLWJpdG1hcC5jLTYzMy1cXG4tLVxcbmRyaXZlcnMvbWQvbWQtYml0bWFwLmg9MTcxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZF9iaXRtYXBfZW5kX3N5bmMoc3RydWN0IG1kZGV2ICptZGRldiwgc2VjdG9yX3Qgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuaC0xODEtXFxuZHJpdmVycy9tZC9tZC1iaXRtYXAuaDoxODI6I2lmZGVmIENPTkZJR19NRF9CSVRNQVBcXG5kcml2ZXJzL21kL21kLWJpdG1hcC5oLTE4My1pbnQgbWRfYml0bWFwX2luaXQodm9pZCk7XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NzQzPWludCBtZGRldl9pbml0KHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtNzQ2LVxcbmRyaXZlcnMvbWQvbWQuYzo3NDc6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRF9CSVRNQVApKVxcbmRyaXZlcnMvbWQvbWQuYy03NDgtXFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9pZCA9IElEX0JJVE1BUF9OT05FO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTY2Njg9aW50IG1kX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTY4NzQtXFxuZHJpdmVycy9tZC9tZC5jOjY4NzU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01EX0JJVE1BUCkgXFx1MDAyNlxcdTAwMjYgIW1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5maWxlIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tZC9tZC5jLTY4NzYtXFx0ICAgICFtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTc4MjA9c3RhdGljIGludCBzZXRfYml0bWFwX2ZpbGUoc3RydWN0IG1kZGV2ICptZGRldiwgaW50IGZkKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTc4NDItXFxuZHJpdmVycy9tZC9tZC5jOjc4NDM6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NRF9CSVRNQVBfRklMRSkpIHtcXG5kcml2ZXJzL21kL21kLmMtNzg0NC1cXHRcXHRcXHRwcl93YXJuKFxcXCIlczogYml0bWFwIGZpbGVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjAwLjQ2NzU0NzM4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTczNDEzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzICpjb25maWd1cmFibGUqIGhlcmUuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzLCBvZiBjb3Vyc2UsIGBkcml2ZXJzL21kL0tjb25maWdgLiBJdOKAmXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIEknbSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRocm91Z2ggdGhhdCBmaWxlLiBJ4oCZbSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIFdoYXQgZmVhdHVyZXMgYXJlIGdhdGVrZXB0IGJ5IHRob3NlIGNvbmZpZ3M/IFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgdGhlIGNvZGUgaGF2ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBrbm9icyBhbmQgZGlhbHMgYXQgbXkgZGlzcG9zYWwgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFzc3VtcHRpb25zIG9yIGRpZ2dpbmcgaW50byBjb2RlIHRoYXQgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBvdXQgYW55d2F5LiBUaW1lIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg4MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjAyLjMyNDg5MDQyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU3MTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKE1EX0JJVE1BUHxCTEtfREVWX01EfE1EX0JJVE1BUF9GSUxFKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9LY29uZmlnPTEzPWlmIE1EXFxuZHJpdmVycy9tZC9LY29uZmlnLTE0LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxNTpjb25maWcgQkxLX0RFVl9NRFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiUkFJRCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTM5LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo0MDpjb25maWcgTURfQklUTUFQXFxuZHJpdmVycy9tZC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIk1EIFJBSUQgYml0bWFwIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWc9NjY9Y29uZmlnIE1EX0FVVE9ERVRFQ1RcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy03OS1cXG5kcml2ZXJzL21kL0tjb25maWc6ODA6Y29uZmlnIE1EX0JJVE1BUF9GSUxFXFxuZHJpdmVycy9tZC9LY29uZmlnLTgxLVxcdGJvb2wgXFxcIk1EIGJpdG1hcCBmaWxlIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDowMi4zNzI0NjczNzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDM4NjI0NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1EL1NvZnR3YXJlIFJBSUQ6IEEgUHJpbWUgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsIG9mIE1EL1NvZnR3YXJlIFJBSUQuIEZpcnN0LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBldmVuIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIHNldHVwcyBvciwgbW9yZSBpbXBvcnRhbnRseSwgdGhyb3VnaCBzeXprYWxsZXI/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gTUQgaXMgZW50aXJlbHkgdmlydHVhbCwgYSBibG9jayBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW5nIHZpYSBpb2N0bHMgKGxpa2UgYFNFVF9BUlJBWV9JTkZPYCwgYFJVTl9BUlJBWWAsIGV0Yy4pIGFuZCBzeXNmcyBhdHRyaWJ1dGVzIChlLmcuLCBgbWQvYml0bWFwL2xvY2F0aW9uYCkuIEFuZCBjcml0aWNhbGx5LCBzeXprYWxsZXIgKmFscmVhZHkqIGFjdGl2ZWx5IHRlc3RzIGl0LiBXZSdyZSBzZWVpbmcgdGVzdHMgd2l0aCB0aGUgYHN5el9tZF8qYCBwc2V1ZG8tc3lzY2FsbHMgYW5kIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgYC9kZXYvbWQqYCBkZXZpY2VzIHZpYSBpb2N0bHMsIHBsdXMgc3lzZnMgaW50ZXJhY3Rpb24uXG5cblNvLCBjb2RlIGNvdmVyYWdlIGlzIHRoZXJlOyB0aGUgbmV4dCBxdWVzdGlvbiwgYXJlIHRoZXNlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMgd29ydGggb3VyIHRpbWU/IEFic29sdXRlbHksIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgdGhlc2UgYXJlICpleGFjdGx5KiB0aGUga2luZCBvZiBtb2RpZmljYXRpb25zIHRoYXQgcGlxdWUgbXkgaW50ZXJlc3QuIFdlJ3JlIHRhbGtpbmcgZGVhZGxvY2sgYW5kIHJhY2UgY29uZGl0aW9uIGZpeGVzLCBwbHVzIHJlc3RydWN0dXJpbmcgcmV2b2x2aW5nIGFyb3VuZCBzeXNmcyB1bm1lcmdpbmcvcmVtb3ZhbCBhbmQgbXV0ZXggbG9ja2luZywgd2hpY2ggc291bmRzIGNvbXBsZXgsIGJ1dCB2dWxuZXJhYmxlLiBUaGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoZXkgbWVudGlvbiwgbGlrZSBgbG9jYXRpb25fc3RvcmVgLCBgbWRkZXZfdW5sb2NrYCwgYG1kX2JpdG1hcF9kZXN0cm95YCwgYG1kX2JpdG1hcF9zZXRfbm9uZWAsIGBzZXRfYml0bWFwX2ZpbGVgLCBhbmQgYHVwZGF0ZV9hcnJheV9pbmZvYCBhcmUgYWxsIGludm9sdmVkIGluIGNyaXRpY2FsIG9wZXJhdGlvbnMgYW5kIGFyZSBoaWdoLXZhbHVlIHRhcmdldHMuXG5cblRoaXMgc2NyZWFtcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9tZC9tZC5jYCBhbmQgYGRyaXZlcnMvbWQvbWQtYml0bWFwLmNgLiBJJ20gZ29pbmcgdG8gc3RhcnQgcmVhZGluZyBhcm91bmQgdGhlIGxpbmVzIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQuIFRoaXMgc2hvdWxkIGFsbG93IG1lIHRvIGZvcm11bGF0ZSBzb21lIGh5cG90aGVzZXMgYWJvdXQgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MDYuODExMDk0MTY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0XFx0LypcXG4gNjkxOlxcdFxcdFxcdCAqIEluZm9ybSB1c2VyIHdpdGggS09CSl9DSEFOR0UgYWJvdXQgbmV3IGJpdG1hcFxcbiA2OTI6XFx0XFx0XFx0ICogYXR0cmlidXRlcy5cXG4gNjkzOlxcdFxcdFxcdCAqL1xcbiA2OTQ6XFx0XFx0XFx0a29iamVjdF91ZXZlbnQoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIDY5NTpcXHR9XFxuIDY5NjpcXHRcXG4gNjk3OlxcdHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldixcXG4gNjk4OlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNvbnN0ICpncm91cHMpXFxuIDY5OTpcXHR7XFxuIDcwMDpcXHRcXHRpbnQgbnJfZ3JvdXBzID0gMDtcXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0aWYgKCFncm91cHMpXFxuIDcwMzpcXHRcXHRcXHRyZXR1cm47XFxuIDcwNDpcXHRcXG4gNzA1OlxcdFxcdGZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcysrKVxcbiA3MDY6XFx0XFx0XFx0O1xcbiA3MDc6XFx0XFxuIDcwODpcXHRcXHR3aGlsZSAoLS1ucl9ncm91cHMgXFx1MDAzZT0gMSlcXG4gNzA5OlxcdFxcdFxcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCBncm91cHNbbnJfZ3JvdXBzXSk7XFxuIDcxMDpcXHRcXHRzeXNmc19yZW1vdmVfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCBncm91cHNbMF0pO1xcbiA3MTE6XFx0fVxcbiA3MTI6XFx0XFxuIDcxMzpcXHRib29sIG1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldilcXG4gNzE0OlxcdHtcXG4gNzE1OlxcdFxcdHN0cnVjdCBtZF9zdWJtb2R1bGVfaGVhZCAqaGVhZDtcXG4gNzE2OlxcdFxcbiA3MTc6XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzIFxcdTAwMjZcXHUwMDI2XFxuIDcxODpcXHRcXHQgICAgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWhlYWQuaWQgPT0gbWRkZXYtXFx1MDAzZWJpdG1hcF9pZClcXG4gNzE5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA3MjA6XFx0XFxuIDcyMTpcXHRcXHR4YV9sb2NrKFxcdTAwMjZtZF9zdWJtb2R1bGUpO1xcbiA3MjI6XFx0XFx0aGVhZCA9IHhhX2xvYWQoXFx1MDAyNm1kX3N1Ym1vZHVsZSwgbWRkZXYtXFx1MDAzZWJpdG1hcF9pZCk7XFxuIDcyMzpcXHRcXG4gNzI0OlxcdFxcdGlmICghaGVhZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDowNi44MTE0MTMxMThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ0MjE3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYG1kZGV2X3VubG9ja2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGBtZGRldl91bmxvY2tgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBpbiB0aGUgYGRyaXZlcnMvbWQvbWQuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIHVubG9ja2luZyBhIG11bHRpLWRldmljZSBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1ldGFkYXRhLCBhbmQgd2hhdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2stcmVsYXRlZCBpc3N1ZXMgbWlnaHQgZXhpc3Qgd2l0aGluIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIHNlcXVlbmNlcyBhbmQgc2VlIGhvdyB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gdGhlIHVubG9jayBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6ODY3MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MDguODU1NjMyNjU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTI3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZC9tZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkyMDpcXHRcXHRzdHJ1Y3QgbWRfcmRldiAqcmRldjtcXG4gOTIxOlxcdFxcdHN0cnVjdCBtZF9yZGV2ICp0bXA7XFxuIDkyMjpcXHRcXHRMSVNUX0hFQUQoZGVsZXRlKTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZtZGRldi1cXHUwMDNlZGVsZXRpbmcpKVxcbiA5MjU6XFx0XFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2bWRkZXYtXFx1MDAzZWRlbGV0aW5nLCBcXHUwMDI2ZGVsZXRlKTtcXG4gOTI2OlxcdFxcbiA5Mjc6XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2V0b19yZW1vdmUgfHwgbWRkZXYtXFx1MDAzZXRvX3VubWVyZ2UgfHwgbWRkZXYtXFx1MDAzZXRvX3JlbW92ZV9ncm91cHMpIHtcXG4gOTI4OlxcdFxcdFxcdC8qIFRoZXNlIGNhbm5vdCBiZSByZW1vdmVkIHVuZGVyIHJlY29uZmlnX211dGV4IGFzXFxuIDkyOTpcXHRcXHRcXHQgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXhcXG4gOTMwOlxcdFxcdFxcdCAqIHdoaWxlIGhvbGRpbmcgdGhlIGZpbGUgdW5yZW1vdmFibGUsIHdoaWNoIGxlYWRzIHRvXFxuIDkzMTpcXHRcXHRcXHQgKiBhIGRlYWRsb2NrLlxcbiA5MzI6XFx0XFx0XFx0ICogU28gaG9sZCBzZXQgc3lzZnNfYWN0aXZlIHdoaWxlIHRoZSByZW1vdmUgaW4gaGFwcGVpbmcsXFxuIDkzMzpcXHRcXHRcXHQgKiBhbmQgYW55dGhpbmcgZWxzZSB3aGljaCBtaWdodCBzZXQgLVxcdTAwM2V0b19yZW1vdmUgb3IgbXlcXG4gOTM0OlxcdFxcdFxcdCAqIG90aGVyd2lzZSBjaGFuZ2UgdGhlIHN5c2ZzIG5hbWVzcGFjZSB3aWxsIGZhaWwgd2l0aFxcbiA5MzU6XFx0XFx0XFx0ICogLUVCVVNZIGlmIHN5c2ZzX2FjdGl2ZSBpcyBzdGlsbCBzZXQuXFxuIDkzNjpcXHRcXHRcXHQgKiBXZSBzZXQgc3lzZnNfYWN0aXZlIHVuZGVyIHJlY29uZmlnX211dGV4IGFuZCBlbHNld2hlcmVcXG4gOTM3OlxcdFxcdFxcdCAqIHRlc3QgaXQgdW5kZXIgdGhlIHNhbWUgbXV0ZXggdG8gZW5zdXJlIGl0cyBjb3JyZWN0IHZhbHVlXFxuIDkzODpcXHRcXHRcXHQgKiBpcyBzZWVuLlxcbiA5Mzk6XFx0XFx0XFx0ICovXFxuIDk0MDpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b19yZW1vdmUgPSBtZGRldi1cXHUwMDNldG9fcmVtb3ZlO1xcbiA5NDE6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdG9fdW5tZXJnZSA9IG1kZGV2LVxcdTAwM2V0b191bm1lcmdlO1xcbiA5NDI6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cXHUwMDNldG9fcmVtb3ZlX2dyb3VwcztcXG4gOTQzOlxcdFxcbiA5NDQ6XFx0XFx0XFx0bWRkZXYtXFx1MDAzZXRvX3JlbW92ZSA9IE5VTEw7XFxuIDk0NTpcXHRcXHRcXHRtZGRldi1cXHUwMDNldG9fdW5tZXJnZSA9IE5VTEw7XFxuIDk0NjpcXHRcXHRcXHRtZGRldi1cXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IE5VTEw7XFxuIDk0NzpcXHRcXHRcXHRtZGRldi1cXHUwMDNlc3lzZnNfYWN0aXZlID0gMTtcXG4gOTQ4OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRkZXYtXFx1MDAzZXJlY29uZmlnX211dGV4KTtcXG4gOTQ5OlxcdFxcbiA5NTA6XFx0XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2Vrb2JqLnNkKSB7XFxuIDk1MTpcXHRcXHRcXHRcXHRpZiAodG9fdW5tZXJnZSlcXG4gOTUyOlxcdFxcdFxcdFxcdFxcdHN5c2ZzX3VubWVyZ2VfZ3JvdXAoXFx1MDAyNm1kZGV2LVxcdTAwM2Vrb2JqLCB0b191bm1lcmdlKTtcXG4gOTUzOlxcdFxcdFxcdFxcdGlmICh0b19yZW1vdmVfZ3JvdXBzKVxcbiA5NTQ6XFx0XFx0XFx0XFx0XFx0bWRfYml0bWFwX3N5c2ZzX2RlbChtZGRldiwgdG9fcmVtb3ZlX2dyb3Vwcyk7XFxuIDk1NTpcXHRcXHRcXHRcXHRpZiAodG9fcmVtb3ZlIFxcdTAwMjZcXHUwMDI2IHRvX3JlbW92ZSAhPSBcXHUwMDI2bWRfcmVkdW5kYW5jeV9ncm91cClcXG4gOTU2OlxcdFxcdFxcdFxcdFxcdHN5c2ZzX3JlbW92ZV9ncm91cChcXHUwMDI2bWRkZXYtXFx1MDAzZWtvYmosIHRvX3JlbW92ZSk7XFxuIDk1NzpcXHRcXHRcXHRcXHRpZiAobWRkZXYtXFx1MDAzZXBlcnMgPT0gTlVMTCB8fFxcbiA5NTg6XFx0XFx0XFx0XFx0ICAgIG1kZGV2LVxcdTAwM2VwZXJzLVxcdTAwM2VzeW5jX3JlcXVlc3QgPT0gTlVMTCkge1xcbiA5NTk6XFx0XFx0XFx0XFx0XFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFxcdTAwMjZtZGRldi1cXHUwMDNla29iaiwgXFx1MDAyNm1kX3JlZHVuZGFuY3lfZ3JvdXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDowOC44NTY3NTAzMThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzODQ3NTY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1kLWJpdG1hcC5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBCYXNlZCBvbiB0aGUgdGFzaywgSSB0aGluayB0aGUgaXNzdWUgbWlnaHQgbGllIHdpdGhpbiBgbWQtYml0bWFwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgbG9jYXRpb25fc3RvcmVgIGZ1bmN0aW9uIChvciBhIGZ1bmN0aW9uIGNsb3NlbHkgcmVsYXRlZCB0byB0aGF0IG9uZSkuIFRoaXMgc3VnZ2VzdHMgdGhhdCBzb21ldGhpbmcgaXMgZ29pbmcgd3Jvbmcgd2hlbiB3ZSdyZSB0cnlpbmcgdG8gc3RvcmUgb3IgdXBkYXRlIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGJpdG1hcCBzdHJ1Y3R1cmUuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24sIGEgYnVnIGluIGhvdyB3ZSdyZSBjYWxjdWxhdGluZyBvZmZzZXRzLCBzb21lIG1lbW9yeSBjb3JydXB0aW9uLCBvciBldmVuIGFuIGluY29ycmVjdCBiaXRtYXAgZm9ybWF0LiBHaXZlbiB0aGUgbmF0dXJlIG9mIGJpdG1hcCBoYW5kbGluZywgaXQncyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBhcmVhIGludm9sdmVzIGNyaXRpY2FsIG9wZXJhdGlvbnMgYXJvdW5kIGJsb2NrIG1hcHBpbmcgYW5kIG1ldGFkYXRhLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBjbHVlcyBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiBjYWxscy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCwgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBiZWluZyB1c2VkIChvciAqbm90KiB1c2VkISksIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIHRoYXQgc2VjdGlvbiBvZiBjb2RlLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGNoZWNraW5nIGhvdyB3ZSBhcmUgZW5zdXJpbmcgYXRvbWljaXR5IHdoZW4gd2UgYXJlIHdyaXRpbmcgdG8gdGhlIGJpdG1hcC4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJpdG1hcCBtZXRhZGF0YSBpcyBwcm9wZXJseSBzeW5jaHJvbml6ZWQuIExldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgZnVuY3Rpb24gYW5kIGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgc3RhcnQgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY0NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MTEuMjk1MjI4NTE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21kL21kLWJpdG1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2MzA6XFx0c3RhdGljIHNzaXplX3RcXG4yNjMxOlxcdGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4yNjMyOlxcdHtcXG4yNjMzOlxcdFxcdGludCBydjtcXG4yNjM0OlxcdFxcdHVuc2lnbmVkIGludCBub2lvX2ZsYWdzO1xcbjI2MzU6XFx0XFxuMjYzNjpcXHRcXHRydiA9IG1kZGV2X3N1c3BlbmRfYW5kX2xvY2sobWRkZXYpO1xcbjI2Mzc6XFx0XFx0aWYgKHJ2KVxcbjI2Mzg6XFx0XFx0XFx0cmV0dXJuIHJ2O1xcbjI2Mzk6XFx0XFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbjI2NDA6XFx0XFxuMjY0MTpcXHRcXHRpZiAobWRkZXYtXFx1MDAzZXN5c2ZzX2FjdGl2ZSkge1xcbjI2NDI6XFx0XFx0XFx0cnYgPSAtRUJVU1k7XFxuMjY0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjQ0OlxcdFxcdH1cXG4yNjQ1OlxcdFxcbjI2NDY6XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2VwZXJzKSB7XFxuMjY0NzpcXHRcXHRcXHRpZiAobWRkZXYtXFx1MDAzZXJlY292ZXJ5IHx8IG1kZGV2LVxcdTAwM2VzeW5jX3RocmVhZCkge1xcbjI2NDg6XFx0XFx0XFx0XFx0cnYgPSAtRUJVU1k7XFxuMjY0OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjUwOlxcdFxcdFxcdH1cXG4yNjUxOlxcdFxcdH1cXG4yNjUyOlxcdFxcbjI2NTM6XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2ViaXRtYXAgfHwgbWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLmZpbGUgfHxcXG4yNjU0OlxcdFxcdCAgICBtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0KSB7XFxuMjY1NTpcXHRcXHRcXHQvKiBiaXRtYXAgYWxyZWFkeSBjb25maWd1cmVkLiAgT25seSBvcHRpb24gaXMgdG8gY2xlYXIgaXQgKi9cXG4yNjU2OlxcdFxcdFxcdGlmIChzdHJuY21wKGJ1ZiwgXFxcIm5vbmVcXFwiLCA0KSAhPSAwKSB7XFxuMjY1NzpcXHRcXHRcXHRcXHRydiA9IC1FQlVTWTtcXG4yNjU4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2NTk6XFx0XFx0XFx0fVxcbjI2NjA6XFx0XFxuMjY2MTpcXHRcXHRcXHRtZGRldi1cXHUwMDNldG9fdW5tZXJnZSA9IFxcdTAwMjZtZF9iaXRtYXBfaW50ZXJuYWxfZ3JvdXA7XFxuMjY2MjpcXHRcXHRcXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcXG4yNjYzOlxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcXG4yNjY0OlxcdFxcdFxcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXFxuMjY2NTpcXHRcXHRcXHRcXHRnb3RvIG5vbmVfZXJyO1xcbjI2NjY6XFx0XFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7XFxuMjY2NzpcXHRcXHRcXHRpZiAobWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLmZpbGUpIHtcXG4yNjY4OlxcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmID0gbWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLmZpbGU7XFxuMjY2OTpcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlYml0bWFwX2luZm8uZmlsZSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjExLjI5NTM1NjIwNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI3OTMyMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBCaXRtYXAgTWFuYWdlbWVudCBhbmQgRmlsZSBVcGRhdGVzKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9ucy4gTGV0J3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgYml0bWFwcywgcGFydGljdWxhcmx5IGFyb3VuZCBudWxsaWZpY2F0aW9uIGFuZCBkZXN0cnVjdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmV2aXNpdCBgbWRfYml0bWFwX3NldF9ub25lYCwgZW5zdXJpbmcgaXQncyBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgbm90IGxlYXZpbmcgYW55IHVuZXhwZWN0ZWQgYXJ0aWZhY3RzLiBUaGVuLCBvZiBjb3Vyc2UsIGEgdGhvcm91Z2ggbG9vayBhdCBgbWRfYml0bWFwX2Rlc3Ryb3lgIGlzIG5lY2Vzc2FyeSB0byBndWFyYW50ZWUgcHJvcGVyIHJlc291cmNlIHJlbGVhc2UsIGF2b2lkaW5nIGFueSBwb3RlbnRpYWwgbGVha3MuIEJleW9uZCB0aGF0LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZmlsZSBpdHNlbGYgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgdG8gZW5zdXJlIGBzZXRfYml0bWFwX2ZpbGVgIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBGaW5hbGx5LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGB1cGRhdGVfYXJyYXlfaW5mb2AgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFjY3VyYXRlbHkgcmVmbGVjdGluZyBhbnkgY2hhbmdlcyB0byB0aGUgYml0bWFwcyBvciB0aGUgZmlsZS4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgdHJhY2luZyB0aGUgZGF0YSBmbG93IHRvIGNvbmZpcm0gdGhlIHN5c3RlbSdzIGludGVncml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjEzLjQyMzI5MTEwMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTc4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZC9tZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY2MzA6XFx0XFxuNjYzMTpcXHRcXHRyZXR1cm4gMDtcXG42NjMyOlxcdH1cXG42NjMzOlxcdFxcbjY2MzQ6XFx0dm9pZCBtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuNjYzNTpcXHR7XFxuNjYzNjpcXHRcXHRpZiAoIW1kX2JpdG1hcF9yZWdpc3RlcmVkKG1kZGV2KSlcXG42NjM3OlxcdFxcdFxcdHJldHVybjtcXG42NjM4OlxcdFxcbjY2Mzk6XFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWRlc3Ryb3kobWRkZXYpO1xcbjY2NDA6XFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMgPSBOVUxMO1xcbjY2NDE6XFx0fVxcbjY2NDI6XFx0XFxuNjY0MzpcXHRzdGF0aWMgdm9pZCBtZF9iaXRtYXBfZGVzdHJveShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbjY2NDQ6XFx0e1xcbjY2NDU6XFx0XFx0aWYgKCFtZGRldl9pc19kbShtZGRldikgXFx1MDAyNlxcdTAwMjYgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMgXFx1MDAyNlxcdTAwMjZcXG42NjQ2OlxcdFxcdCAgICBtZGRldi1cXHUwMDNlYml0bWFwX29wcy1cXHUwMDNlZ3JvdXBzKVxcbjY2NDc6XFx0XFx0XFx0bWRkZXYtXFx1MDAzZXRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cXHUwMDNlYml0bWFwX29wcy1cXHUwMDNlZ3JvdXBzO1xcbjY2NDg6XFx0XFxuNjY0OTpcXHRcXHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcXG42NjUwOlxcdH1cXG42NjUxOlxcdFxcbjY2NTI6XFx0c3RhdGljIHZvaWQgbWRfYml0bWFwX3NldF9ub25lKHN0cnVjdCBtZGRldiAqbWRkZXYpXFxuNjY1MzpcXHR7XFxuNjY1NDpcXHRcXHRpZiAoIW1kZGV2X2lzX2RtKG1kZGV2KSBcXHUwMDI2XFx1MDAyNiBtZGRldi1cXHUwMDNlYml0bWFwX29wcyBcXHUwMDI2XFx1MDAyNlxcbjY2NTU6XFx0XFx0ICAgIG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2Vncm91cHMgXFx1MDAyNlxcdTAwMjYgbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3Vwc1sxXSlcXG42NjU2OlxcdFxcdFxcdG1kZGV2LVxcdTAwM2V0b191bm1lcmdlID0gbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWdyb3Vwc1sxXTtcXG42NjU3OlxcdFxcbjY2NTg6XFx0XFx0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XFxuNjY1OTpcXHRcXG42NjYwOlxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcXG42NjYxOlxcdFxcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXFxuNjY2MjpcXHRcXHRcXHRyZXR1cm47XFxuNjY2MzpcXHRcXG42NjY0OlxcdFxcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFxcdTAwMjZcXHUwMDI2IG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2Vncm91cHMpXFxuNjY2NTpcXHRcXHRcXHRtZF9iaXRtYXBfc3lzZnNfYWRkKG1kZGV2KTtcXG42NjY2OlxcdH1cXG42NjY3OlxcdFxcbjY2Njg6XFx0aW50IG1kX3J1bihzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxcbjY2Njk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoxMy40MjM1OTAyNDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzNjAyMjY5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgc2V0X2JpdG1hcF9maWxlYC4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBpdCdzIGhhbmRsaW5nIGZpbGUgb3BlcmF0aW9ucyBjb3JyZWN0bHksIHNwZWNpZmljYWxseSBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBiaXRtYXAgZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4gYW5kIGxvYWRlZCBhY2NvcmRpbmcgdG8gdGhlIGV4cGVjdGVkIGZvcm1hdCBhbmQgdGhhdCBubyBtZW1vcnkgbGVha3MgYXJlIGhhcHBlbmluZyBkdXJpbmcgdGhhdCBvcGVyYXRpb24uIE5leHQgdXAgaXMgYHVwZGF0ZV9hcnJheV9pbmZvYC4gVGhpcyBvbmUgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCdzIGNvcnJlY3RseSByZWZsZWN0aW5nIGNoYW5nZXMgbWFkZSB0byB0aGUgYml0bWFwIGZpbGUncyBhc3NvY2lhdGVkIGRhdGEgd2l0aGluIHRoZSBhcnJheSwgZW5zdXJpbmcgc3luY2hyb25pemF0aW9uLCBhbmQgdGhhdCBpdCBpc24ndCBnZW5lcmF0aW5nIGFueSBpbmNvbnNpc3RlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoxNS4yNTk2MTQ3NjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3ODYwOlxcdFxcdFxcdGlmICghU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjc4NjE6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiJXM6IGVycm9yOiBiaXRtYXAgZmlsZSBtdXN0IGJlIGEgcmVndWxhciBmaWxlXFxcXG5cXFwiLFxcbjc4NjI6XFx0XFx0XFx0XFx0XFx0bWRuYW1lKG1kZGV2KSk7XFxuNzg2MzpcXHRcXHRcXHRcXHRlcnIgPSAtRUJBREY7XFxuNzg2NDpcXHRcXHRcXHR9IGVsc2UgaWYgKCEoZi1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEUpKSB7XFxuNzg2NTpcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCIlczogZXJyb3I6IGJpdG1hcCBmaWxlIG11c3Qgb3BlbiBmb3Igd3JpdGVcXFxcblxcXCIsXFxuNzg2NjpcXHRcXHRcXHRcXHRcXHRtZG5hbWUobWRkZXYpKTtcXG43ODY3OlxcdFxcdFxcdFxcdGVyciA9IC1FQkFERjtcXG43ODY4OlxcdFxcdFxcdH0gZWxzZSBpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmlub2RlLVxcdTAwM2VpX3dyaXRlY291bnQpICE9IDEpIHtcXG43ODY5OlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIiVzOiBlcnJvcjogYml0bWFwIGZpbGUgaXMgYWxyZWFkeSBpbiB1c2VcXFxcblxcXCIsXFxuNzg3MDpcXHRcXHRcXHRcXHRcXHRtZG5hbWUobWRkZXYpKTtcXG43ODcxOlxcdFxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG43ODcyOlxcdFxcdFxcdH1cXG43ODczOlxcdFxcdFxcdGlmIChlcnIpIHtcXG43ODc0OlxcdFxcdFxcdFxcdGZwdXQoZik7XFxuNzg3NTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjc4NzY6XFx0XFx0XFx0fVxcbjc4Nzc6XFx0XFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLmZpbGUgPSBmO1xcbjc4Nzg6XFx0XFx0XFx0bWRkZXYtXFx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7IC8qIGZpbGUgb3ZlcnJpZGVzIG9mZnNldCAqL1xcbjc4Nzk6XFx0XFx0fSBlbHNlIGlmIChtZGRldi1cXHUwMDNlYml0bWFwID09IE5VTEwpXFxuNzg4MDpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDsgLyogY2Fubm90IHJlbW92ZSB3aGF0IGlzbid0IHRoZXJlICovXFxuNzg4MTpcXHRcXHRlcnIgPSAwO1xcbjc4ODI6XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2VwZXJzKSB7XFxuNzg4MzpcXHRcXHRcXHRpZiAoZmQgXFx1MDAzZT0gMCkge1xcbjc4ODQ6XFx0XFx0XFx0XFx0ZXJyID0gbWRfYml0bWFwX2NyZWF0ZShtZGRldik7XFxuNzg4NTpcXHRcXHRcXHRcXHRpZiAoIWVycilcXG43ODg2OlxcdFxcdFxcdFxcdFxcdGVyciA9IG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2Vsb2FkKG1kZGV2KTtcXG43ODg3OlxcdFxcbjc4ODg6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjc4ODk6XFx0XFx0XFx0XFx0XFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcXG43ODkwOlxcdFxcdFxcdFxcdFxcdGZkID0gLTE7XFxuNzg5MTpcXHRcXHRcXHRcXHR9XFxuNzg5MjpcXHRcXHRcXHR9IGVsc2UgaWYgKGZkIFxcdTAwM2MgMCkge1xcbjc4OTM6XFx0XFx0XFx0XFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcXG43ODk0OlxcdFxcdFxcdH1cXG43ODk1OlxcdFxcdH1cXG43ODk2OlxcdFxcbjc4OTc6XFx0XFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbjc4OTg6XFx0XFx0XFx0c3RydWN0IGZpbGUgKmYgPSBtZGRldi1cXHUwMDNlYml0bWFwX2luZm8uZmlsZTtcXG43ODk5OlxcdFxcdFxcdGlmIChmKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjE1LjI2MDEzMzA1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDUzOTM1ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYHVwZGF0ZV9hcnJheV9pbmZvYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB1cGRhdGVfYXJyYXlfaW5mb2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGFuZCBzY29wZS4gV2hhdCBleGFjdGx5IGlzIGl0IHVwZGF0aW5nPyBCYXNlZCBvbiB0aGUgbmFtZSwgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIHNvbWUgbWV0YWRhdGEgYWJvdXQgYW4gYXJyYXkuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ7IGlzIGl0IGEgc2ltcGxlIGFycmF5LCBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXksIGEgZHluYW1pY2FsbHktc2l6ZWQgYXJyYXksIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSBhIHNwYXJzZSBtYXRyaXg/IFRoZSBjb250ZXh0IG9mIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBtYXR0ZXJzIHRvby4gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBzeXN0ZW0gZm9yIGRhdGEgcHJvY2Vzc2luZywgZGF0YWJhc2UgbWFuYWdlbWVudCwgb3IgcGVyaGFwcyBhIG1vcmUgc3BlY2lhbGl6ZWQgYWxnb3JpdGhtP1xuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgcG90ZW50aWFsIGlzc3Vlcy4gQ291bGQgaXQgYmUgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGlmIGNhbGxlZCBmcmVxdWVudGx5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyBpZiBtdWx0aXBsZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBhcmUgbW9kaWZ5aW5nIHRoZSBhcnJheSBpbmZvcm1hdGlvbiBjb25jdXJyZW50bHk/IE1lbW9yeSB1c2FnZSBpcyBhbHNvIGEga2V5IGNvbmNlcm4uIERvZXMgdGhlIHVwZGF0ZSBwcm9jZXNzIGVmZmljaWVudGx5IHV0aWxpemUgbWVtb3J5LCBvciBjb3VsZCBpdCBsZWFkIHRvIGV4Y2Vzc2l2ZSBmcmFnbWVudGF0aW9uIG9yIHVubmVjZXNzYXJ5IGRhdGEgY29waWVzPyBFcnJvciBoYW5kbGluZyBpcywgYXMgYWx3YXlzLCBwYXJhbW91bnQuIERvZXMgaXQgcm9idXN0bHkgaGFuZGxlIGVkZ2UgY2FzZXMsIHN1Y2ggYXMgaW52YWxpZCBhcnJheSBpbmRpY2VzLCBudWxsIHBvaW50ZXJzLCBvciBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcz8gQW5kIGZpbmFsbHksIGhvdyB3ZWxsIGRvZXMgdGhlIGNvZGUgaGFuZGxlIGNoYW5nZXMgdG8gdGhlIGFycmF5PyBBcmUgdGhlcmUgY2hlY2tzIHRoYXQgdGhlIGluZm9ybWF0aW9uIGlzIHZhbGlkP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI5MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MTcuNzE0MDcwNzc5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21kL21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODE4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODE4MDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG44MTgxOlxcdFxcdFxcdH1cXG44MTgyOlxcdFxcdFxcdGlmIChtZGRldi1cXHUwMDNlcmVjb3ZlcnkgfHwgbWRkZXYtXFx1MDAzZXN5bmNfdGhyZWFkKSB7XFxuODE4MzpcXHRcXHRcXHRcXHRydiA9IC1FQlVTWTtcXG44MTg0OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjgxODU6XFx0XFx0XFx0fVxcbjgxODY6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZXN0YXRlIFxcdTAwMjYgKDFcXHUwMDNjXFx1MDAzY01EX1NCX0JJVE1BUF9QUkVTRU5UKSkge1xcbjgxODc6XFx0XFx0XFx0XFx0LyogYWRkIHRoZSBiaXRtYXAgKi9cXG44MTg4OlxcdFxcdFxcdFxcdGlmIChtZGRldi1cXHUwMDNlYml0bWFwKSB7XFxuODE4OTpcXHRcXHRcXHRcXHRcXHRydiA9IC1FRVhJU1Q7XFxuODE5MDpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG44MTkxOlxcdFxcdFxcdFxcdH1cXG44MTkyOlxcdFxcdFxcdFxcdGlmIChtZGRldi1cXHUwMDNlYml0bWFwX2luZm8uZGVmYXVsdF9vZmZzZXQgPT0gMCkge1xcbjgxOTM6XFx0XFx0XFx0XFx0XFx0cnYgPSAtRUlOVkFMO1xcbjgxOTQ6XFx0XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuODE5NTpcXHRcXHRcXHRcXHR9XFxuODE5NjpcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID1cXG44MTk3OlxcdFxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5kZWZhdWx0X29mZnNldDtcXG44MTk4OlxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5zcGFjZSA9XFxuODE5OTpcXHRcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlYml0bWFwX2luZm8uZGVmYXVsdF9zcGFjZTtcXG44MjAwOlxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVA7XFxuODIwMTpcXHRcXHRcXHRcXHRydiA9IG1kX2JpdG1hcF9jcmVhdGUobWRkZXYpO1xcbjgyMDI6XFx0XFx0XFx0XFx0aWYgKCFydilcXG44MjAzOlxcdFxcdFxcdFxcdFxcdHJ2ID0gbWRkZXYtXFx1MDAzZWJpdG1hcF9vcHMtXFx1MDAzZWxvYWQobWRkZXYpO1xcbjgyMDQ6XFx0XFxuODIwNTpcXHRcXHRcXHRcXHRpZiAocnYpIHtcXG44MjA2OlxcdFxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xcbjgyMDc6XFx0XFx0XFx0XFx0XFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcXG44MjA4OlxcdFxcdFxcdFxcdH1cXG44MjA5OlxcdFxcdFxcdH0gZWxzZSB7XFxuODIxMDpcXHRcXHRcXHRcXHRzdHJ1Y3QgbWRfYml0bWFwX3N0YXRzIHN0YXRzO1xcbjgyMTE6XFx0XFxuODIxMjpcXHRcXHRcXHRcXHRydiA9IG1kZGV2LVxcdTAwM2ViaXRtYXBfb3BzLVxcdTAwM2VnZXRfc3RhdHMobWRkZXYtXFx1MDAzZWJpdG1hcCwgXFx1MDAyNnN0YXRzKTtcXG44MjEzOlxcdFxcdFxcdFxcdGlmIChydilcXG44MjE0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjgyMTU6XFx0XFxuODIxNjpcXHRcXHRcXHRcXHRpZiAoc3RhdHMuZmlsZSkge1xcbjgyMTc6XFx0XFx0XFx0XFx0XFx0cnYgPSAtRUlOVkFMO1xcbjgyMTg6XFx0XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuODIxOTpcXHRcXHRcXHRcXHR9XFxuODIyMDpcXHRcXG44MjIxOlxcdFxcdFxcdFxcdGlmIChtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ubm9kZXMpIHtcXG44MjIyOlxcdFxcdFxcdFxcdFxcdC8qIGhvbGQgUFcgb24gYWxsIHRoZSBiaXRtYXAgbG9jayAqL1xcbjgyMjM6XFx0XFx0XFx0XFx0XFx0aWYgKG1kZGV2LVxcdTAwM2VjbHVzdGVyX29wcy1cXHUwMDNlbG9ja19hbGxfYml0bWFwcyhtZGRldikgXFx1MDAzYz0gMCkge1xcbjgyMjQ6XFx0XFx0XFx0XFx0XFx0XFx0cHJfd2FybihcXFwibWQ6IGNhbid0IGNoYW5nZSBiaXRtYXAgdG8gbm9uZSBzaW5jZSB0aGUgYXJyYXkgaXMgaW4gdXNlIGJ5IG1vcmUgdGhhbiBvbmUgbm9kZVxcXFxuXFxcIik7XFxuODIyNTpcXHRcXHRcXHRcXHRcXHRcXHRydiA9IC1FUEVSTTtcXG44MjI2OlxcdFxcdFxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2VjbHVzdGVyX29wcy1cXHUwMDNldW5sb2NrX2FsbF9iaXRtYXBzKG1kZGV2KTtcXG44MjI3OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjgyMjg6XFx0XFx0XFx0XFx0XFx0fVxcbjgyMjk6XFx0XFxuODIzMDpcXHRcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ubm9kZXMgPSAwO1xcbjgyMzE6XFx0XFx0XFx0XFx0XFx0cHV0X2NsdXN0ZXJfb3BzKG1kZGV2KTtcXG44MjMyOlxcdFxcdFxcdFxcdFxcdG1kZGV2LVxcdTAwM2VzYWZlbW9kZV9kZWxheSA9IERFRkFVTFRfU0FGRU1PREVfREVMQVk7XFxuODIzMzpcXHRcXHRcXHRcXHR9XFxuODIzNDpcXHRcXHRcXHRcXHRtZGRldi1cXHUwMDNlYml0bWFwX2luZm8ub2Zmc2V0ID0gMDtcXG44MjM1OlxcdFxcdFxcdFxcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XFxuODIzNjpcXHRcXHRcXHR9XFxuODIzNzpcXHRcXHR9XFxuODIzODpcXHRcXHRtZF91cGRhdGVfc2IobWRkZXYsIDEpO1xcbjgyMzk6XFx0XFx0cmV0dXJuIHJ2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoxNy43MTQ2MTEwMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTc2MTk0NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBSQUlEIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIG1ha2Ugc3VyZSB0aGlzIFJBSUQgc2V0dXAgaXMga29zaGVyLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBMZXQncyBtYWtlIHN1cmUgYENPTkZJR19CTEtfREVWX01EYCBhbmQgYENPTkZJR19NRF9CSVRNQVBgIGFyZSBzZXQgY29ycmVjdGx5LiBUaGVzZSBhcmUgdGhlIGZvdW5kYXRpb24sIHRoZSBiZWRyb2NrIGZvciB0aGUgd2hvbGUgdGhpbmcuIFdpdGhvdXQgdGhlc2UsIHdlJ3JlIG5vdCBnb2luZyBhbnl3aGVyZS5cblxuTm93IHRoYXQgSSd2ZSBpZGVudGlmaWVkIHRoZSBrZXkgY29uZmlncywgSSdsbCBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBgQkxLX0RFVl9NRGAgYW5kIGBNRF9CSVRNQVBgIGhhdmUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCAqbmVlZCogdG8gYmUgZW5hYmxlZCBmb3IgdGhlc2UgdG8gd29yayBwcm9wZXJseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBpcyBhYm91dCBlbnN1cmluZyBhIGNsZWFuIGFuZCBzdGFibGUgYnVpbGQsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIGlzIGNydWNpYWwuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0OTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjE5LjY5MDgwNzgxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0ODI5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChNRHxCTEtfREVWX01EfE1EX0JJVE1BUClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvS2NvbmZpZy01LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTURcXG5kcml2ZXJzL21kL0tjb25maWctNy1cXHRib29sIFxcXCJNdWx0aXBsZSBkZXZpY2VzIGRyaXZlciBzdXBwb3J0IChSQUlEIGFuZCBMVk0pXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnPTEzPWlmIE1EXFxuZHJpdmVycy9tZC9LY29uZmlnLTE0LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxNTpjb25maWcgQkxLX0RFVl9NRFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiUkFJRCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTM5LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo0MDpjb25maWcgTURfQklUTUFQXFxuZHJpdmVycy9tZC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIk1EIFJBSUQgYml0bWFwIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctNTQtXFxuZHJpdmVycy9tZC9LY29uZmlnOjU1OmNvbmZpZyBNRF9MTEJJVE1BUFxcbmRyaXZlcnMvbWQvS2NvbmZpZy01Ni1cXHRib29sIFxcXCJNRCBSQUlEIGxvY2tsZXNzIGJpdG1hcCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTY1LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo2Njpjb25maWcgTURfQVVUT0RFVEVDVFxcbmRyaXZlcnMvbWQvS2NvbmZpZy02Ny1cXHRib29sIFxcXCJBdXRvZGV0ZWN0IFJBSUQgYXJyYXlzIGR1cmluZyBrZXJuZWwgYm9vdFxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy03OS1cXG5kcml2ZXJzL21kL0tjb25maWc6ODA6Y29uZmlnIE1EX0JJVE1BUF9GSUxFXFxuZHJpdmVycy9tZC9LY29uZmlnLTgxLVxcdGJvb2wgXFxcIk1EIGJpdG1hcCBmaWxlIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTkwLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo5MTpjb25maWcgTURfTElORUFSXFxuZHJpdmVycy9tZC9LY29uZmlnLTkyLVxcdHRyaXN0YXRlIFxcXCJMaW5lYXIgKGFwcGVuZCkgbW9kZVxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMDMtXFxuZHJpdmVycy9tZC9LY29uZmlnOjEwNDpjb25maWcgTURfUkFJRDBcXG5kcml2ZXJzL21kL0tjb25maWctMTA1LVxcdHRyaXN0YXRlIFxcXCJSQUlELTAgKHN0cmlwaW5nKSBtb2RlXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTEyMy1cXG5kcml2ZXJzL21kL0tjb25maWc6MTI0OmNvbmZpZyBNRF9SQUlEMVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcIlJBSUQtMSAobWlycm9yaW5nKSBtb2RlXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTE0NS1cXG5kcml2ZXJzL21kL0tjb25maWc6MTQ2OmNvbmZpZyBNRF9SQUlEMTBcXG5kcml2ZXJzL21kL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJSQUlELTEwIChtaXJyb3JlZCBzdHJpcGluZykgbW9kZVxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNjQtXFxuZHJpdmVycy9tZC9LY29uZmlnOjE2NTpjb25maWcgTURfUkFJRDQ1NlxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNjYtXFx0dHJpc3RhdGUgXFxcIlJBSUQtNC9SQUlELTUvUkFJRC02IG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMjAxLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoyMDI6Y29uZmlnIE1EX0NMVVNURVJcXG5kcml2ZXJzL21kL0tjb25maWctMjAzLVxcdHRyaXN0YXRlIFxcXCJDbHVzdGVyIFN1cHBvcnQgZm9yIE1EXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoxOS43MzQyOTM0NjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2Njc3MTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTUQgU3Vic3lzdGVtIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgTURgIGxlYWRzIHRvIGBCTEtfREVWX01EYCwgd2hpY2ggdGhlbiBsZWFkcyB0byBgTURfQklUTUFQYC4gVGhpcyBnaXZlcyBtZSBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSByZWxldmFudCBrZXJuZWwgbW9kdWxlczogYE1EYCwgYEJMS19ERVZfTURgLCBhbmQgYE1EX0JJVE1BUGAuXG5cbk5leHQsIEknbSByZXZpZXdpbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBpZGVudGlmeSBrZXkgRm9jdXNTeW1ib2xzLiBUaGUgbGlzdCBpbmNsdWRlczogYGxvY2F0aW9uX3N0b3JlYCwgYG1kX2JpdG1hcF9zeXNmc19kZWxgLCBgbWRkZXZfdW5sb2NrYCwgYG1kX2JpdG1hcF9kZXN0cm95YCwgYG1kX2JpdG1hcF9zZXRfbm9uZWAsIGBzZXRfYml0bWFwX2ZpbGVgLCBhbmQgYHVwZGF0ZV9hcnJheV9pbmZvYC4gUmlnaHQgYXdheSwgSSBub3RlIHRoYXQgYG1kZGV2X3VubG9ja2AgaXMgZGVmaW5pdGVseSBNRCAoc29mdHdhcmUgUkFJRCkgc3BlY2lmaWMsIG5vdCBzb21lIGdsb2JhbGx5IHVzZWQga2VybmVsIGZ1bmN0aW9uLiBJbiBmYWN0LCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgTUQgc3Vic3lzdGVtLlxuXG5Ob3csIEknbSBkb3VibGUtY2hlY2tpbmcgd2hldGhlciB0aGlzIGlzIGZ1enppbmctd29ydGh5LiBMZXQncyBzZWU6IFRoZSBzdWJzeXN0ZW0gaXMgTGludXggTUQgKHNvZnR3YXJlIFJBSUQpLCBhIHZpcnR1YWwgYmxvY2sgZGV2aWNlIGV4cG9zZWQgdmlhIGBpb2N0bGAgYW5kIGBzeXNmc2AsIGFuZCBpdCBpcyBmdWxseSBlbXVsYXRlZC9zb2Z0d2FyZSBkZXZpY2UuIFRoZSBtb2RpZmljYXRpb25zIGludm9sdmUgc3lzZnMgYXR0cmlidXRlIGhhbmRsaW5nLCBiaXRtYXAgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGFuZCBtdXRleCB1bmxvY2tpbmcgbG9naWMuIEdpdmVuIHRoZXNlIGZhY3RvcnMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEknbGwgY29uc3RydWN0IG15IGZpbmFsIHJlc3BvbnNlIHVzaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDQ2LCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoyMy41MDEwNjY2NzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk1ODk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURcIixcbiAgICBcIkJMS19ERVZfTURcIixcbiAgICBcIk1EX0JJVE1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvY2F0aW9uX3N0b3JlXCIsXG4gICAgXCJtZF9iaXRtYXBfc3lzZnNfZGVsXCIsXG4gICAgXCJtZGRldl91bmxvY2tcIixcbiAgICBcIm1kX2JpdG1hcF9kZXN0cm95XCIsXG4gICAgXCJtZF9iaXRtYXBfc2V0X25vbmVcIixcbiAgICBcInNldF9iaXRtYXBfZmlsZVwiLFxuICAgIFwidXBkYXRlX2FycmF5X2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTUQgKHNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSBpbiBkcml2ZXJzL21kL21kLmMgYW5kIGRyaXZlcnMvbWQvbWQtYml0bWFwLmMsIGFkanVzdGluZyBob3cgYml0bWFwIHN5c2ZzIGF0dHJpYnV0ZSBncm91cHMgYXJlIHVubWVyZ2VkIGFuZCByZW1vdmVkIGR1cmluZyBtZGRldl91bmxvY2ssIGxvY2F0aW9uX3N0b3JlLCBtZF9iaXRtYXBfZGVzdHJveSwgYW5kIG1kX2JpdG1hcF9zZXRfbm9uZSB0byBwcmV2ZW50IGxvY2svc3lzZnMgZGVhZGxvY2tzIGFuZCByYWNlcy4gVGhpcyBjb2RlIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1kIHN5c2ZzIGF0dHJpYnV0ZXMgYW5kIGlvY3RscyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRFwiLFxuICAgIFwiQkxLX0RFVl9NRFwiLFxuICAgIFwiTURfQklUTUFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9jYXRpb25fc3RvcmVcIixcbiAgICBcIm1kX2JpdG1hcF9zeXNmc19kZWxcIixcbiAgICBcIm1kZGV2X3VubG9ja1wiLFxuICAgIFwibWRfYml0bWFwX2Rlc3Ryb3lcIixcbiAgICBcIm1kX2JpdG1hcF9zZXRfbm9uZVwiLFxuICAgIFwic2V0X2JpdG1hcF9maWxlXCIsXG4gICAgXCJ1cGRhdGVfYXJyYXlfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRCAoc29mdHdhcmUgUkFJRCkgc3Vic3lzdGVtIGluIGRyaXZlcnMvbWQvbWQuYyBhbmQgZHJpdmVycy9tZC9tZC1iaXRtYXAuYywgYWRqdXN0aW5nIGhvdyBiaXRtYXAgc3lzZnMgYXR0cmlidXRlIGdyb3VwcyBhcmUgdW5tZXJnZWQgYW5kIHJlbW92ZWQgZHVyaW5nIG1kZGV2X3VubG9jaywgbG9jYXRpb25fc3RvcmUsIG1kX2JpdG1hcF9kZXN0cm95LCBhbmQgbWRfYml0bWFwX3NldF9ub25lIHRvIHByZXZlbnQgbG9jay9zeXNmcyBkZWFkbG9ja3MgYW5kIHJhY2VzLiBUaGlzIGNvZGUgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWQgc3lzZnMgYXR0cmlidXRlcyBhbmQgaW9jdGxzIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoyMy41NzMwMzA3MjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjEzNzQ1ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MjMuNTczNDI0MDg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTcyMTMzNDg4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN5c2ZzIGF0dHJpYnV0ZSBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgbG9naWMgaW4gdGhlIE1EIChTb2Z0d2FyZSBSQUlEKSBzdWJzeXN0ZW0gdG8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gbWFuaXB1bGF0aW5nIHN5c2ZzIGZpbGVzIHVuZGVyIG1kZGV2LVxcdTAwM2VyZWNvbmZpZ19tdXRleC4gU3BlY2lmaWNhbGx5LCBpdCBkZWZlcnMgc3lzZnMgZ3JvdXAgcmVtb3ZhbCBhbmQgdW5tZXJnaW5nIGJ5IHJlY29yZGluZyBwb2ludGVycyAodG9fdW5tZXJnZSBhbmQgdG9fcmVtb3ZlX2dyb3VwcykgaW4gc3RydWN0IG1kZGV2IGFuZCBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb25zIGluIG1kZGV2X3VubG9jaygpIGFmdGVyIHJlbGVhc2luZyByZWNvbmZpZ19tdXRleC5cXG5cXG5zdHJ1Y3QgbWRkZXYgaW5zdGFuY2VzIGFyZSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvYywgYW5kIHRoZSBuZXcgcG9pbnRlciBmaWVsZHMgYXJlIHByb3Blcmx5IG1hbmFnZWQgYW5kIGNsZWFyZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBkYXRhIGJ1ZmZlcnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIGRlcmVmZXJlbmNpbmcsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlhMDQ0YjAyZDM0ZDNlMjFmMTU5NmJiNjM3MmQzMzE4Y2I0YzlhYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAwOjIzOjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC1iaXRtYXAuYyBiL2RyaXZlcnMvbWQvbWQtYml0bWFwLmNcbmluZGV4IGI4MzI1Y2IwOWEzNzEuLjNhOTdhYTQ2M2VjY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL21kLWJpdG1hcC5jXG4rKysgYi9kcml2ZXJzL21kL21kLWJpdG1hcC5jXG5AQCAtMjYzOCw2ICsyNjM4LDExIEBAIGxvY2F0aW9uX3N0b3JlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdFx0cmV0dXJuIHJ2O1xuIFx0bm9pb19mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuIFxuK1x0aWYgKG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSkge1xuK1x0XHRydiA9IC1FQlVTWTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHRpZiAobWRkZXYtXHUwMDNlcGVycykge1xuIFx0XHRpZiAobWRkZXYtXHUwMDNlcmVjb3ZlcnkgfHwgbWRkZXYtXHUwMDNlc3luY190aHJlYWQpIHtcbiBcdFx0XHRydiA9IC1FQlVTWTtcbkBAIC0yNjUzLDcgKzI2NTgsNyBAQCBsb2NhdGlvbl9zdG9yZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0c3lzZnNfdW5tZXJnZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBcdTAwMjZtZF9iaXRtYXBfaW50ZXJuYWxfZ3JvdXApO1xuK1x0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gXHUwMDI2bWRfYml0bWFwX2ludGVybmFsX2dyb3VwO1xuIFx0XHRtZF9iaXRtYXBfZGVzdHJveV9ub3N5c2ZzKG1kZGV2KTtcbiBcdFx0bWRkZXYtXHUwMDNlYml0bWFwX2lkID0gSURfQklUTUFQX05PTkU7XG4gXHRcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jXG5pbmRleCA2ODBiMzRhNjNjYjNkLi5lODNjYWVjMDk2M2M1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZC9tZC5jXG4rKysgYi9kcml2ZXJzL21kL21kLmNcbkBAIC02OTQsMTcgKzY5NCwyMCBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfc3lzZnNfYWRkKHN0cnVjdCBtZGRldiAqbWRkZXYpXG4gXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWRfYml0bWFwX3N5c2ZzX2RlbChzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuK3N0YXRpYyB2b2lkIG1kX2JpdG1hcF9zeXNmc19kZWwoc3RydWN0IG1kZGV2ICptZGRldixcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNvbnN0ICpncm91cHMpXG4ge1xuIFx0aW50IG5yX2dyb3VwcyA9IDA7XG4gXG4tXHRmb3IgKG5yX2dyb3VwcyA9IDA7IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcysrKVxuK1x0aWYgKCFncm91cHMpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAobnJfZ3JvdXBzID0gMDsgZ3JvdXBzW25yX2dyb3Vwc107IG5yX2dyb3VwcysrKVxuIFx0XHQ7XG4gXG4gXHR3aGlsZSAoLS1ucl9ncm91cHMgXHUwMDNlPSAxKVxuLVx0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosXG4tXHRcdFx0XHQgICAgbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHNbbnJfZ3JvdXBzXSk7XG4tXHRzeXNmc19yZW1vdmVfZ3JvdXAoXHUwMDI2bWRkZXYtXHUwMDNla29iaiwgbWRkZXYtXHUwMDNlYml0bWFwX29wcy1cdTAwM2Vncm91cHNbMF0pO1xuK1x0XHRzeXNmc191bm1lcmdlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIGdyb3Vwc1tucl9ncm91cHNdKTtcbitcdHN5c2ZzX3JlbW92ZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCBncm91cHNbMF0pO1xuIH1cbiBcbiBib29sIG1kZGV2X3NldF9iaXRtYXBfb3BzX25vc3lzZnMoc3RydWN0IG1kZGV2ICptZGRldilcbkBAIC05MjEsNyArOTI0LDcgQEAgdm9pZCBtZGRldl91bmxvY2soc3RydWN0IG1kZGV2ICptZGRldilcbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtZGRldi1cdTAwM2VkZWxldGluZykpXG4gXHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2bWRkZXYtXHUwMDNlZGVsZXRpbmcsIFx1MDAyNmRlbGV0ZSk7XG4gXG4tXHRpZiAobWRkZXYtXHUwMDNldG9fcmVtb3ZlKSB7XG4rXHRpZiAobWRkZXYtXHUwMDNldG9fcmVtb3ZlIHx8IG1kZGV2LVx1MDAzZXRvX3VubWVyZ2UgfHwgbWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3Vwcykge1xuIFx0XHQvKiBUaGVzZSBjYW5ub3QgYmUgcmVtb3ZlZCB1bmRlciByZWNvbmZpZ19tdXRleCBhc1xuIFx0XHQgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXhcbiBcdFx0ICogd2hpbGUgaG9sZGluZyB0aGUgZmlsZSB1bnJlbW92YWJsZSwgd2hpY2ggbGVhZHMgdG9cbkBAIC05MzUsMTIgKzkzOCwyMSBAQCB2b2lkIG1kZGV2X3VubG9jayhzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIFx0XHQgKiBpcyBzZWVuLlxuIFx0XHQgKi9cbiBcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqdG9fcmVtb3ZlID0gbWRkZXYtXHUwMDNldG9fcmVtb3ZlO1xuK1x0XHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b191bm1lcmdlID0gbWRkZXYtXHUwMDNldG9fdW5tZXJnZTtcbitcdFx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY29uc3QgKnRvX3JlbW92ZV9ncm91cHMgPSBtZGRldi1cdTAwM2V0b19yZW1vdmVfZ3JvdXBzO1xuK1xuIFx0XHRtZGRldi1cdTAwM2V0b19yZW1vdmUgPSBOVUxMO1xuK1x0XHRtZGRldi1cdTAwM2V0b191bm1lcmdlID0gTlVMTDtcbitcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IE5VTEw7XG4gXHRcdG1kZGV2LVx1MDAzZXN5c2ZzX2FjdGl2ZSA9IDE7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGRldi1cdTAwM2VyZWNvbmZpZ19tdXRleCk7XG4gXG4gXHRcdGlmIChtZGRldi1cdTAwM2Vrb2JqLnNkKSB7XG4tXHRcdFx0aWYgKHRvX3JlbW92ZSAhPSBcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKVxuK1x0XHRcdGlmICh0b191bm1lcmdlKVxuK1x0XHRcdFx0c3lzZnNfdW5tZXJnZV9ncm91cChcdTAwMjZtZGRldi1cdTAwM2Vrb2JqLCB0b191bm1lcmdlKTtcbitcdFx0XHRpZiAodG9fcmVtb3ZlX2dyb3VwcylcbitcdFx0XHRcdG1kX2JpdG1hcF9zeXNmc19kZWwobWRkZXYsIHRvX3JlbW92ZV9ncm91cHMpO1xuK1x0XHRcdGlmICh0b19yZW1vdmUgXHUwMDI2XHUwMDI2IHRvX3JlbW92ZSAhPSBcdTAwMjZtZF9yZWR1bmRhbmN5X2dyb3VwKVxuIFx0XHRcdFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNm1kZGV2LVx1MDAzZWtvYmosIHRvX3JlbW92ZSk7XG4gXHRcdFx0aWYgKG1kZGV2LVx1MDAzZXBlcnMgPT0gTlVMTCB8fFxuIFx0XHRcdCAgICBtZGRldi1cdTAwM2VwZXJzLVx1MDAzZXN5bmNfcmVxdWVzdCA9PSBOVUxMKSB7XG5AQCAtNjYzMiwxMyArNjY0NCwxOSBAQCBzdGF0aWMgdm9pZCBtZF9iaXRtYXBfZGVzdHJveShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIHtcbiBcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzKVxuLVx0XHRtZF9iaXRtYXBfc3lzZnNfZGVsKG1kZGV2KTtcbitcdFx0bWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3VwcyA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzO1xuIFxuIFx0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1kX2JpdG1hcF9zZXRfbm9uZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KVxuIHtcbitcdGlmICghbWRkZXZfaXNfZG0obWRkZXYpIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzIFx1MDAyNlx1MDAyNiBtZGRldi1cdTAwM2ViaXRtYXBfb3BzLVx1MDAzZWdyb3Vwc1sxXSlcbitcdFx0bWRkZXYtXHUwMDNldG9fdW5tZXJnZSA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlZ3JvdXBzWzFdO1xuK1xuK1x0bWRfYml0bWFwX2Rlc3Ryb3lfbm9zeXNmcyhtZGRldik7XG4rXG4gXHRtZGRldi1cdTAwM2ViaXRtYXBfaWQgPSBJRF9CSVRNQVBfTk9ORTtcbiBcdGlmICghbWRkZXZfc2V0X2JpdG1hcF9vcHNfbm9zeXNmcyhtZGRldikpXG4gXHRcdHJldHVybjtcbkBAIC03ODY4LDEyICs3ODg2LDEwIEBAIHN0YXRpYyBpbnQgc2V0X2JpdG1hcF9maWxlKHN0cnVjdCBtZGRldiAqbWRkZXYsIGludCBmZClcbiBcdFx0XHRcdGVyciA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlbG9hZChtZGRldik7XG4gXG4gXHRcdFx0aWYgKGVycikge1xuLVx0XHRcdFx0bWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpO1xuIFx0XHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0XHRcdGZkID0gLTE7XG4gXHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKGZkIFx1MDAzYyAwKSB7XG4tXHRcdFx0bWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpO1xuIFx0XHRcdG1kX2JpdG1hcF9zZXRfbm9uZShtZGRldik7XG4gXHRcdH1cbiBcdH1cbkBAIC04MTg3LDcgKzgyMDMsNiBAQCBzdGF0aWMgaW50IHVwZGF0ZV9hcnJheV9pbmZvKHN0cnVjdCBtZGRldiAqbWRkZXYsIG1kdV9hcnJheV9pbmZvX3QgKmluZm8pXG4gXHRcdFx0XHRydiA9IG1kZGV2LVx1MDAzZWJpdG1hcF9vcHMtXHUwMDNlbG9hZChtZGRldik7XG4gXG4gXHRcdFx0aWYgKHJ2KSB7XG4tXHRcdFx0XHRtZF9iaXRtYXBfZGVzdHJveShtZGRldik7XG4gXHRcdFx0XHRtZGRldi1cdTAwM2ViaXRtYXBfaW5mby5vZmZzZXQgPSAwO1xuIFx0XHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0XHR9XG5AQCAtODIxNiw3ICs4MjMxLDYgQEAgc3RhdGljIGludCB1cGRhdGVfYXJyYXlfaW5mbyhzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBtZHVfYXJyYXlfaW5mb190ICppbmZvKVxuIFx0XHRcdFx0cHV0X2NsdXN0ZXJfb3BzKG1kZGV2KTtcbiBcdFx0XHRcdG1kZGV2LVx1MDAzZXNhZmVtb2RlX2RlbGF5ID0gREVGQVVMVF9TQUZFTU9ERV9ERUxBWTtcbiBcdFx0XHR9XG4tXHRcdFx0bWRfYml0bWFwX2Rlc3Ryb3kobWRkZXYpO1xuIFx0XHRcdG1kZGV2LVx1MDAzZWJpdG1hcF9pbmZvLm9mZnNldCA9IDA7XG4gXHRcdFx0bWRfYml0bWFwX3NldF9ub25lKG1kZGV2KTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaFxuaW5kZXggYjZkMmU4OTI5YTBmOS4uYzg2MmQ2NTE5YjgxZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvbWQuaFxuKysrIGIvZHJpdmVycy9tZC9tZC5oXG5AQCAtNjA4LDYgKzYwOCw4IEBAIHN0cnVjdCBtZGRldiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGFsbF9tZGRldnM7XG4gXG4gXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwXHQqdG9fcmVtb3ZlO1xuK1x0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cFx0KnRvX3VubWVyZ2U7XG4rXHRjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwXHQqY29uc3QgKnRvX3JlbW92ZV9ncm91cHM7XG4gXG4gXHRzdHJ1Y3QgYmlvX3NldFx0XHRcdGJpb19zZXQ7XG4gXHRzdHJ1Y3QgYmlvX3NldFx0XHRcdHN5bmNfc2V0OyAvKiBmb3Igc3luYyBvcGVyYXRpb25zIGxpa2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjIzLjU3MzQyNTEzNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjgwMDEwOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2tkZXAgd2FybmluZywgbW9zdCBsaWtlbHkgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBpc3N1ZXMgZHVyaW5nIHRoZSByZW1vdmFsIG9mIHN5c2ZzIGdyb3VwcyBhbmQgZmlsZXMgd2l0aGluIHRoZSBNRCAoTXVsdGlwbGUgRGV2aWNlKSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgYHJlY29uZmlnX211dGV4YC4gVGhlIGNvcmUgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCBkaXJlY3RseSByZW1vdmluZyBhIHN5c2ZzIGF0dHJpYnV0ZSBncm91cCB3aGlsZSBzeXNmcyBjYWxsYmFja3MgYXJlIHdhaXRpbmcgb24sIG9yIGhvbGRpbmcsIHRoZSBgcmVjb25maWdfbXV0ZXhgIGNhbiBsZWFkIHRvIGEgZGVhZGxvY2sgc2l0dWF0aW9uLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zLCBhbmQgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHVzaW5nIGEgZGVmZXJyYWwgbWVjaGFuaXNtIHRvIGFkZHJlc3MgaXQuXG5cblRoZSBwcmltYXJ5IHN0cmF0ZWd5IGVtcGxveWVkIGhlcmUgaXMgdG8gZGVmZXIgdGhlIGBzeXNmc191bm1lcmdlX2dyb3VwYCBhbmQgYG1kX2JpdG1hcF9zeXNmc19kZWxgIG9wZXJhdGlvbnMuIEluc3RlYWQgb2YgcGVyZm9ybWluZyB0aGVtIGRpcmVjdGx5IHVuZGVyIHRoZSBsb2NrLCB0aGUgcGF0Y2ggc2V0cyBmbGFncyAoYG1kZGV2LVx1MDAzZXRvX3VubWVyZ2VgIGFuZCBgbWRkZXYtXHUwMDNldG9fcmVtb3ZlX2dyb3Vwc2ApIGFuZCBkZWZlcnMgdGhlIGFjdHVhbCByZW1vdmFsIHVudGlsIGFmdGVyIHRoZSBgcmVjb25maWdfbXV0ZXhgIGhhcyBiZWVuIHJlbGVhc2VkLCB3aGljaCBoYXBwZW5zIGluIGBtZGRldl91bmxvY2soKWAuIFRoaXMgbG9va3MgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2guXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZSBiZWZvcmUgY29uc2lkZXJpbmcgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIHNlZS4uLlxuXG4xLiAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uOioqIFRoZSBwYXRjaCBkb2Vzbid0IHNlZW0gdG8gdG91Y2ggYW55IGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4gTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIG91dCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGNvdWxkIGJlIGEgcHJvYmxlbS4gVGhpcyBpcyBnb29kLlxuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYy9CcmFuY2hpbmc6KiogVGhlIGNvZGUgY2hlY2tzIGBtZGRldi1cdTAwM2VzeXNmc19hY3RpdmVgLCBhbmQgdXNlcyBgdG9fdW5tZXJnZWAgYW5kIGB0b19yZW1vdmVfZ3JvdXBzYCBmb3IgZGVmZXJyYWwuIFRoZSBgbWRkZXZgIHN0cnVjdHVyZSBpdHNlbGYgaXMga3phbGxvYydkIHdoZW4gaXQncyBjcmVhdGVkLCBtZWFuaW5nIGl0cyBmaWVsZHMgYXJlIHplcm9lZCBvdXQuIFRoZSBkZWZlcnJhbCBwb2ludGVycywgYHRvX3VubWVyZ2VgIGFuZCBgdG9fcmVtb3ZlX2dyb3Vwc2AgYXJlIGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIGNsZWFyZWQgdG8gTlVMTCBpbiBgbWRkZXZfdW5sb2NrYC4gVGhpcyByZWR1Y2VzIHRoZSByaXNrIG9mIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgcmVsaWVmLlxuXG4zLiAgKipEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBJJ20gbm90IHNlZWluZyBhbnkgbmV3IGFsbG9jYXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwb3RlbnRpYWxseSBiZWluZyByZWFkLiBUaGUgZGVmZXJyYWwgbWVjaGFuaXNtcyBsb29rIGNsZWFuIGFuZCBzYWZlIGluIHRoYXQgcmVnYXJkLlxuXG40LiAgKipCdWZmZXIgQWNjZXNzOioqIEkgZG9uJ3Qgc2VlIGFueSBjb2RlIGludHJvZHVjaW5nIGJvdW5kcyBjaGVja3MsIGxlbmd0aCBtYW5pcHVsYXRpb25zLCBvciBsb2dpYyB0aGF0IHdvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuIFRoZSBwYXRjaCBtb2RpZmllcyBzeXNmcyBvcGVyYXRpb25zLCBub3QgZGF0YSBidWZmZXJzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi5cblxuSW4gc3VtbWFyeSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHVzZSBvZiBremFsbG9jJ2QgYG1kZGV2YCBzdHJ1Y3QsIE5VTEwtaW5pdGlhbGl6ZWQgZGVmZXJyYWwgcG9pbnRlcnMsIGFuZCBkZWZlcnJlZCBvcGVyYXRpb25zIGxvb2sgbGlrZSBhIHNvbGlkIHNvbHV0aW9uIHRvIHRoZSBjb25jdXJyZW5jeSBpc3N1ZSB3aXRob3V0IG9wZW5pbmcgdXAgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMuIEknbGwgc3RpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBkZXRhaWxzLCBidXQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHBvc2l0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDIyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MjguODUzNDM5NDUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI0OTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21kL21kLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZC9tZC5jPTYzMjE9RVhQT1JUX1NZTUJPTF9HUEwobWRfaW5pdF9zdGFja2luZ19saW1pdHMpO1xcbmRyaXZlcnMvbWQvbWQuYy02MzIyLVxcbmRyaXZlcnMvbWQvbWQuYzo2MzIzOnN0cnVjdCBtZGRldiAqbWRfYWxsb2MoZGV2X3QgZGV2LCBjaGFyICpuYW1lKVxcbmRyaXZlcnMvbWQvbWQuYy02MzI0LXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy02NDMyLVxcbmRyaXZlcnMvbWQvbWQuYzo2NDMzOnN0YXRpYyBpbnQgbWRfYWxsb2NfYW5kX3B1dChkZXZfdCBkZXYsIGNoYXIgKm5hbWUpXFxuZHJpdmVycy9tZC9tZC5jLTY0MzQte1xcbmRyaXZlcnMvbWQvbWQuYzo2NDM1OlxcdHN0cnVjdCBtZGRldiAqbWRkZXYgPSBtZF9hbGxvYyhkZXYsIG5hbWUpO1xcbmRyaXZlcnMvbWQvbWQuYy02NDM2LVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTY0NDY9c3RhdGljIHZvaWQgbWRfcHJvYmUoZGV2X3QgZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTY0NTAtXFx0aWYgKGNyZWF0ZV9vbl9vcGVuKVxcbmRyaXZlcnMvbWQvbWQuYzo2NDUxOlxcdFxcdG1kX2FsbG9jX2FuZF9wdXQoZGV2LCBOVUxMKTtcXG5kcml2ZXJzL21kL21kLmMtNjQ1Mi19XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NjQ1ND1zdGF0aWMgaW50IGFkZF9uYW1lZF9hcnJheShjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTY0NzItXFx0aWYgKHN0cm5jbXAoYnVmLCBcXFwibWRfXFxcIiwgMykgPT0gMClcXG5kcml2ZXJzL21kL21kLmM6NjQ3MzpcXHRcXHRyZXR1cm4gbWRfYWxsb2NfYW5kX3B1dCgwLCBidWYpO1xcbmRyaXZlcnMvbWQvbWQuYy02NDc0LVxcdGlmIChzdHJuY21wKGJ1ZiwgXFxcIm1kXFxcIiwgMikgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTY0NzctXFx0ICAgIGRldm51bSBcXHUwMDNjPSBNSU5PUk1BU0spXFxuZHJpdmVycy9tZC9tZC5jOjY0Nzg6XFx0XFx0cmV0dXJuIG1kX2FsbG9jX2FuZF9wdXQoTUtERVYoTURfTUFKT1IsIGRldm51bSksIE5VTEwpO1xcbmRyaXZlcnMvbWQvbWQuYy02NDc5LVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTcyODY9c3RhdGljIHZvaWQgYXV0b3J1bl9kZXZpY2VzKGludCBwYXJ0KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTczMjUtXFxuZHJpdmVycy9tZC9tZC5jOjczMjY6XFx0XFx0bWRkZXYgPSBtZF9hbGxvYyhkZXYsIE5VTEwpO1xcbmRyaXZlcnMvbWQvbWQuYy03MzI3LVxcdFxcdGlmIChJU19FUlIobWRkZXYpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDoyOC44OTg2OTMyMjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwOTQ3NjMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBtZF9hbGxvY2AgRGVmaW5pdGlvbioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBgbWRfYWxsb2NgIGlzIGFjdHVhbGx5IGRvaW5nLiBTaW5jZSBJIGNhbid0IHJlbHkgb24gbWVtb3J5LCBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBwaW5wb2ludCB0aGUgZXhhY3QgZGVmaW5pdGlvbi4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbjsgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24ncyBjb250cmFjdCBhbmQgYmVoYXZpb3IgaXMgY3J1Y2lhbCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBwaXRmYWxscyBvciBjbGV2ZXIgdHJpY2tzIGJ1cmllZCB3aXRoaW4gdGhlIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZSBjb2RlIGRpcmVjdGx5IGlzIGdvaW5nIHRvIHNhdmUgbWUgdGltZSBhbmQgZWZmb3J0IGluIHRoZSBsb25nIHJ1bi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjMwLjkwODE3MjA4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9tZC9tZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzMjMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYzMjM6XFx0c3RydWN0IG1kZGV2ICptZF9hbGxvYyhkZXZfdCBkZXYsIGNoYXIgKm5hbWUpXFxuNjMyNDpcXHR7XFxuNjMyNTpcXHRcXHQvKlxcbjYzMjY6XFx0XFx0ICogSWYgZGV2IGlzIHplcm8sIG5hbWUgaXMgdGhlIG5hbWUgb2YgYSBkZXZpY2UgdG8gYWxsb2NhdGUgd2l0aFxcbjYzMjc6XFx0XFx0ICogYW4gYXJiaXRyYXJ5IG1pbm9yIG51bWJlci4gIEl0IHdpbGwgYmUgXFxcIm1kXz8/P1xcXCJcXG42MzI4OlxcdFxcdCAqIElmIGRldiBpcyBub24temVybyBpdCBtdXN0IGJlIGEgZGV2aWNlIG51bWJlciB3aXRoIGEgTUFKT1Igb2ZcXG42MzI5OlxcdFxcdCAqIE1EX01BSk9SIG9yIG1kcF9tYWpvci4gIEluIHRoaXMgY2FzZSwgaWYgXFxcIm5hbWVcXFwiIGlzIE5VTEwsIHRoZW5cXG42MzMwOlxcdFxcdCAqIHRoZSBkZXZpY2UgaXMgYmVpbmcgY3JlYXRlZCBieSBvcGVuaW5nIGEgbm9kZSBpbiAvZGV2LlxcbjYzMzE6XFx0XFx0ICogSWYgXFxcIm5hbWVcXFwiIGlzIG5vdCBOVUxMLCB0aGUgZGV2aWNlIGlzIGJlaW5nIGNyZWF0ZWQgYnlcXG42MzMyOlxcdFxcdCAqIHdyaXRpbmcgdG8gL3N5cy9tb2R1bGUvbWRfbW9kL3BhcmFtZXRlcnMvbmV3X2FycmF5LlxcbjYzMzM6XFx0XFx0ICovXFxuNjMzNDpcXHRcXHRzdGF0aWMgREVGSU5FX01VVEVYKGRpc2tzX211dGV4KTtcXG42MzM1OlxcdFxcdHN0cnVjdCBtZGRldiAqbWRkZXY7XFxuNjMzNjpcXHRcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaztcXG42MzM3OlxcdFxcdGludCBwYXJ0aXRpb25lZDtcXG42MzM4OlxcdFxcdGludCBzaGlmdDtcXG42MzM5OlxcdFxcdGludCB1bml0O1xcbjYzNDA6XFx0XFx0aW50IGVycm9yO1xcbjYzNDE6XFx0XFxuNjM0MjpcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDozMC45MDg2NzcwOTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyMzI3OTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbWRfYWxsb2NgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBcIkNoZWNrIGZ1cnRoZXIgaW4gYG1kX2FsbG9jYC5cIiBUaGF0J3MgdGhlIGNvcmUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBjbGVhcmx5IHdhc24ndCBlbm91Z2gsIG9yIHBlcmhhcHMgSSdtIHNlZWluZyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHRoYXQgc29tZXRoaW5nIGlzIHVuY2xlYXIuIFdlJ3ZlIGdvdCBhIHNwZWNpZmljIGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUsIGBtZF9hbGxvY2AuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGVyZSdzIHNvbWV0aGluZyBjcml0aWNhbCB0aGVyZSwgc29tZXRoaW5nIG1pc3NlZCBvbiB0aGUgZmlyc3QgcGFzcywgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgdmVyaWZpY2F0aW9uLiBJdCdzIHRpbWUgdG8gemVybyBpbiBhbmQgcmVhbGx5IGRpc3NlY3Qgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRob3JvdWdobHksIGxpa2VseSByZWdhcmRpbmcgYSBjZXJ0YWluIGFzcGVjdCwgYmVjYXVzZSBpdCByZXF1aXJlcyBmdXJ0aGVyIGF0dGVudGlvbi4gVGltZSB0byBncmFiIG15IHRvb2xzIGFuZCBkaWcgaW4uIExldCdzIHNlZSB3aGF0IHdlIGNhbiB1bmNvdmVyIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDozMi44MzE5NTk0NTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbWQvbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzQzLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MzQzOlxcdFxcdCAqIFdhaXQgZm9yIGFueSBwcmV2aW91cyBpbnN0YW5jZSBvZiB0aGlzIGRldmljZSB0byBiZSBjb21wbGV0ZWx5XFxuNjM0NDpcXHRcXHQgKiByZW1vdmVkIChtZGRldl9kZWxheWVkX2RlbGV0ZSkuXFxuNjM0NTpcXHRcXHQgKi9cXG42MzQ2OlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShtZF9taXNjX3dxKTtcXG42MzQ3OlxcdFxcbjYzNDg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlza3NfbXV0ZXgpO1xcbjYzNDk6XFx0XFx0bWRkZXYgPSBtZGRldl9hbGxvYyhkZXYpO1xcbjYzNTA6XFx0XFx0aWYgKElTX0VSUihtZGRldikpIHtcXG42MzUxOlxcdFxcdFxcdGVycm9yID0gUFRSX0VSUihtZGRldik7XFxuNjM1MjpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuNjM1MzpcXHRcXHR9XFxuNjM1NDpcXHRcXG42MzU1OlxcdFxcdHBhcnRpdGlvbmVkID0gKE1BSk9SKG1kZGV2LVxcdTAwM2V1bml0KSAhPSBNRF9NQUpPUik7XFxuNjM1NjpcXHRcXHRzaGlmdCA9IHBhcnRpdGlvbmVkID8gTWRwTWlub3JTaGlmdCA6IDA7XFxuNjM1NzpcXHRcXHR1bml0ID0gTUlOT1IobWRkZXYtXFx1MDAzZXVuaXQpIFxcdTAwM2VcXHUwMDNlIHNoaWZ0O1xcbjYzNTg6XFx0XFxuNjM1OTpcXHRcXHRpZiAobmFtZSBcXHUwMDI2XFx1MDAyNiAhZGV2KSB7XFxuNjM2MDpcXHRcXHRcXHQvKiBOZWVkIHRvIGVuc3VyZSB0aGF0ICduYW1lJyBpcyBub3QgYSBkdXBsaWNhdGUuXFxuNjM2MTpcXHRcXHRcXHQgKi9cXG42MzYyOlxcdFxcdFxcdHN0cnVjdCBtZGRldiAqbWRkZXYyO1xcbjYzNjM6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZhbGxfbWRkZXZzX2xvY2spO1xcbjYzNjQ6XFx0XFxuNjM2NTpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1kZGV2MiwgXFx1MDAyNmFsbF9tZGRldnMsIGFsbF9tZGRldnMpXFxuNjM2NjpcXHRcXHRcXHRcXHRpZiAobWRkZXYyLVxcdTAwM2VnZW5kaXNrIFxcdTAwMjZcXHUwMDI2XFxuNjM2NzpcXHRcXHRcXHRcXHQgICAgc3RyY21wKG1kZGV2Mi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlZGlza19uYW1lLCBuYW1lKSA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjMyLjgzMjUyNTM1MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA0OTcxMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYG1kZGV2X2FsbG9jYCoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgbWRkZXZfYWxsb2NgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBgbWRkZXZgIHN0cnVjdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGFsbG9jYXRpb24gd29ya3MsIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuZXhwZWN0ZWQgc3VycHJpc2VzIG9yIHBvdGVudGlhbCBnb3RjaGFzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGlmZmVyZW50IFJBSUQgbGV2ZWxzIGFuZCBhbnkgY29uc2lkZXJhdGlvbnMgZm9yIGxhcmdlIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBOVU1BIGFyY2hpdGVjdHVyZXMuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgaXQncyBkb2luZyBhbnkgaW5pdGlhbGl6YXRpb24gb2YgY3JpdGljYWwgZmllbGRzIG9yIHNldHRpbmcgdXAgYW55IGluaXRpYWwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgYG1kYCBsYXllciBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNDQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjM0LjczNzQ5ODg3M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzODIwODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRkZXZfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZC9tZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvbWQuYz04MjY9c3RhdGljIHN0cnVjdCBtZGRldiAqbWRkZXZfZmluZF9sb2NrZWQoZGV2X3QgdW5pdClcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy04MzctLyogZmluZCBhbiB1bnVzZWQgdW5pdCBudW1iZXIgKi9cXG5kcml2ZXJzL21kL21kLmM6ODM4OnN0YXRpYyBkZXZfdCBtZGRldl9hbGxvY191bml0KHZvaWQpXFxuZHJpdmVycy9tZC9tZC5jLTgzOS17XFxuLS1cXG5kcml2ZXJzL21kL21kLmMtODU3LVxcbmRyaXZlcnMvbWQvbWQuYzo4NTg6c3RhdGljIHN0cnVjdCBtZGRldiAqbWRkZXZfYWxsb2MoZGV2X3QgdW5pdClcXG5kcml2ZXJzL21kL21kLmMtODU5LXtcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy04ODYtXFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbmRyaXZlcnMvbWQvbWQuYzo4ODc6XFx0XFx0bmV3LVxcdTAwM2V1bml0ID0gbWRkZXZfYWxsb2NfdW5pdCgpO1xcbmRyaXZlcnMvbWQvbWQuYy04ODgtXFx0XFx0aWYgKCFuZXctXFx1MDAzZXVuaXQpXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NjMyMz1zdHJ1Y3QgbWRkZXYgKm1kX2FsbG9jKGRldl90IGRldiwgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy02MzQ4LVxcdG11dGV4X2xvY2soXFx1MDAyNmRpc2tzX211dGV4KTtcXG5kcml2ZXJzL21kL21kLmM6NjM0OTpcXHRtZGRldiA9IG1kZGV2X2FsbG9jKGRldik7XFxuZHJpdmVycy9tZC9tZC5jLTYzNTAtXFx0aWYgKElTX0VSUihtZGRldikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MzQuNzc5ODg2ODY3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDg1MDg0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNRCBDb3JlIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHByb2JsZW0gbGlrZWx5IHJlc2lkZXMgd2l0aGluIHRoZSBNRCAoTXVsdGlwbGUgRGV2aWNlKSBjb3JlLCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgZHJpdmVycy9tZC9tZC5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDg1OC04ODAuIFRoaXMgYXJlYSBsaWtlbHkgZGVhbHMgd2l0aCBhIGNydWNpYWwgYXNwZWN0IG9mIHdoYXRldmVyIGlzc3VlIEknbSBjaGFzaW5nLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgdGhlIGNvZGUgd2l0aGluIHRoYXQgcmFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUsIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoYXQgc3BlY2lmaWMgY29kZSBwYXRoLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBpcyBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFRpbWUgdG8gc2VlIHdoYXQgc2VjcmV0cyB0aG9zZSBsaW5lcyBhcmUgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDA6MjQ6MzYuNDg4Mzk3NjIxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21kL21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODU4LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODU4OlxcdHN0YXRpYyBzdHJ1Y3QgbWRkZXYgKm1kZGV2X2FsbG9jKGRldl90IHVuaXQpXFxuIDg1OTpcXHR7XFxuIDg2MDpcXHRcXHRzdHJ1Y3QgbWRkZXYgKm5ldztcXG4gODYxOlxcdFxcdGludCBlcnJvcjtcXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0aWYgKHVuaXQgXFx1MDAyNlxcdTAwMjYgTUFKT1IodW5pdCkgIT0gTURfTUFKT1IpXFxuIDg2NDpcXHRcXHRcXHR1bml0IFxcdTAwMjY9IH4oKDEgXFx1MDAzY1xcdTAwM2MgTWRwTWlub3JTaGlmdCkgLSAxKTtcXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0bmV3ID0ga3phbGxvY19vYmooKm5ldyk7XFxuIDg2NzpcXHRcXHRpZiAoIW5ldylcXG4gODY4OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHRlcnJvciA9IG1kZGV2X2luaXQobmV3KTtcXG4gODcxOlxcdFxcdGlmIChlcnJvcilcXG4gODcyOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfbmV3O1xcbiA4NzM6XFx0XFxuIDg3NDpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmFsbF9tZGRldnNfbG9jayk7XFxuIDg3NTpcXHRcXHRpZiAodW5pdCkge1xcbiA4NzY6XFx0XFx0XFx0ZXJyb3IgPSAtRUVYSVNUO1xcbiA4Nzc6XFx0XFx0XFx0aWYgKG1kZGV2X2ZpbmRfbG9ja2VkKHVuaXQpKVxcbiA4Nzg6XFx0XFx0XFx0XFx0Z290byBvdXRfZGVzdHJveV9uZXc7XFxuIDg3OTpcXHRcXHRcXHRuZXctXFx1MDAzZXVuaXQgPSB1bml0O1xcbiA4ODA6XFx0XFx0XFx0aWYgKE1BSk9SKHVuaXQpID09IE1EX01BSk9SKVxcbiA4ODE6XFx0XFx0XFx0XFx0bmV3LVxcdTAwM2VtZF9taW5vciA9IE1JTk9SKHVuaXQpO1xcbiA4ODI6XFx0XFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMDoyNDozNi40ODg5MDE5MDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI5Nzg1Mzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHByZXR0eSBnb29kLiBJdCBzdGFydHMgYnkgemVyby1hbGxvY2F0aW5nIGEgYHN0cnVjdCBtZGRldmAgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgYWx3YXlzIGEgcGx1cy4gVGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIG5ldyBwb2ludGVyIGZpZWxkcywgYHRvX3VubWVyZ2VgIGFuZCBgdG9fcmVtb3ZlX2dyb3Vwc2AsIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gQ3J1Y2lhbGx5LCB0aGVzZSBwb2ludGVycyBhcmUgaW5pdGlhbGl6ZWQgdG8gTlVMTCBmcm9tIHRoZSBvdXRzZXQuIFRoYXQncyBhIHNvbGlkIGZvdW5kYXRpb24uXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHN5bmNocm9uaXppbmcgc3lzZnMgYXR0cmlidXRlIGdyb3VwIHJlbW92YWwsIGFpbWluZyB0byBwcmV2ZW50IGRlYWRsb2NrcyBpbnZvbHZpbmcgdGhlIGByZWNvbmZpZ19tdXRleGAuIFRoYXQgY29udGV4dCBpcyBpbXBvcnRhbnQuIFRoZSBwb2ludGVycyBhcmUgKnNldCogYmVmb3JlIHRoZSB1bmxvY2sgYW5kICpjbGVhcmVkKiBvciBwcm9jZXNzZWQgd2l0aGluIGBtZGRldl91bmxvY2soKWAuIFRoaXMgcGF0dGVybiBpcyB3aGVyZSB0aGluZ3MgY2FuIGdldCB0cmlja3kgaWYgbm90IGltcGxlbWVudGVkIGNvcnJlY3RseSwgYnV0IHRoZSBwcm92aWRlZCBjb250ZXh0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuRnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLCBJIHNlZSBubyBpbW1lZGlhdGUgcmVkIGZsYWdzLiBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG5vIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBjb3VsZCBjYXVzZSBpc3N1ZXMsIG5vIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGNlcnRhaW5seSBubyBtZW1vcnkgbGVha3Mgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBwYXRjaCBpcyB2ZXJ5IGZvY3VzZWQgb24gc3luY2hyb25pemF0aW9uIGNvbmNlcm5zIHJlbGF0ZWQgdG8gdGhlIHJlbW92YWwgb2Ygc3lzZnMgYXR0cmlidXRlIGdyb3VwcywgYW5kIGl0J3MgYnVpbHQgdXBvbiB6ZXJvLWluaXRpYWxpemVkIGRhdGEuXG5cblRoaXMgcmVhbGx5IHN1Z2dlc3RzIHRoZSBpc3N1ZXMgYXJlIGdvaW5nIHRvIHJldm9sdmUgYXJvdW5kIHN5bmNocm9uaXphdGlvbiwgbG9ja2luZywgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gQnV0IHRoZSBnb29kIG5ld3MgaGVyZSBpcyB0aGF0IHRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIGtpbmRzIG9mIHByb2JsZW1zIHRoYXQgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIEtNU0FOLCB3aXRoIGl0cyBmb2N1cyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXNuJ3QgZ29pbmcgdG8gYmUgdGhlIG1vc3QgcmVsZXZhbnQgdG9vbCBoZXJlLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCdzIGBOZWVkc0tNU0FOYCBpcyByaWdodGZ1bGx5IGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjaGFuZ2VzIGFyZSBmb3Igc3lzZnMgZ3JvdXAgY2xlYW51cCBzeW5jaHJvbml6YXRpb24gdG8gcHJldmVudCBkZWFkbG9ja3MgYXJvdW5kIGByZWNvbmZpZ19tdXRleGAsIGBzdHJ1Y3QgbWRkZXZgIGlzIGt6YWxsb2MnZCwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbWFuaXB1bGF0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgYXJlIGludHJvZHVjZWQ7IGFueSBjb25jdXJyZW5jeSwgTlVMTCBwb2ludGVyLCBvciBVQUYgaXNzdWVzIGFyZSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUC9zdGFuZGFyZCBkZXRlY3RvcnMuXG5cblRpbWUgdG8gYHNldC1yZXN1bHRzYC4gTG9va3MgbGlrZSBhIHNvbGlkIHBpZWNlIG9mIHdvcmsgc28gZmFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjcwLCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAwOjI0OjQwLjc4Njc1ODQzOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgYXR0cmlidXRlIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBsb2dpYyBpbiB0aGUgTUQgKFNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBtYW5pcHVsYXRpbmcgc3lzZnMgZmlsZXMgdW5kZXIgbWRkZXYtXFx1MDAzZXJlY29uZmlnX211dGV4LiBTcGVjaWZpY2FsbHksIGl0IGRlZmVycyBzeXNmcyBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgYnkgcmVjb3JkaW5nIHBvaW50ZXJzICh0b191bm1lcmdlIGFuZCB0b19yZW1vdmVfZ3JvdXBzKSBpbiBzdHJ1Y3QgbWRkZXYgYW5kIHBlcmZvcm1pbmcgdGhlIG9wZXJhdGlvbnMgaW4gbWRkZXZfdW5sb2NrKCkgYWZ0ZXIgcmVsZWFzaW5nIHJlY29uZmlnX211dGV4LlxcblxcbnN0cnVjdCBtZGRldiBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHZpYSBremFsbG9jLCBhbmQgdGhlIG5ldyBwb2ludGVyIGZpZWxkcyBhcmUgcHJvcGVybHkgbWFuYWdlZCBhbmQgY2xlYXJlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyB0byB1c2Vyc3BhY2UsIGRhdGEgYnVmZmVycywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgZGVyZWZlcmVuY2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgYXR0cmlidXRlIGdyb3VwIHJlbW92YWwgYW5kIHVubWVyZ2luZyBsb2dpYyBpbiB0aGUgTUQgKFNvZnR3YXJlIFJBSUQpIHN1YnN5c3RlbSB0byBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBtYW5pcHVsYXRpbmcgc3lzZnMgZmlsZXMgdW5kZXIgbWRkZXYtXFx1MDAzZXJlY29uZmlnX211dGV4LiBTcGVjaWZpY2FsbHksIGl0IGRlZmVycyBzeXNmcyBncm91cCByZW1vdmFsIGFuZCB1bm1lcmdpbmcgYnkgcmVjb3JkaW5nIHBvaW50ZXJzICh0b191bm1lcmdlIGFuZCB0b19yZW1vdmVfZ3JvdXBzKSBpbiBzdHJ1Y3QgbWRkZXYgYW5kIHBlcmZvcm1pbmcgdGhlIG9wZXJhdGlvbnMgaW4gbWRkZXZfdW5sb2NrKCkgYWZ0ZXIgcmVsZWFzaW5nIHJlY29uZmlnX211dGV4LlxcblxcbnN0cnVjdCBtZGRldiBpbnN0YW5jZXMgYXJlIHplcm8tYWxsb2NhdGVkIHZpYSBremFsbG9jLCBhbmQgdGhlIG5ldyBwb2ludGVyIGZpZWxkcyBhcmUgcHJvcGVybHkgbWFuYWdlZCBhbmQgY2xlYXJlZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyB0byB1c2Vyc3BhY2UsIGRhdGEgYnVmZmVycywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgZGVyZWZlcmVuY2luZywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjdt6p[1] Phase: Succeeded StartedAt: 2026-09-07 00:24:52 +0000 UTC FinishedAt: 2026-09-07 00:24:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 00:24:52 +0000 UTC FinishedAt: 2026-09-07 00:24:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2] Phase: Succeeded StartedAt: 2026-09-07 00:24:52 +0000 UTC FinishedAt: 2026-09-07 04:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 00:24:52 +0000 UTC FinishedAt: 2026-09-07 04:02:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 00:24:52 +0000 UTC FinishedAt: 2026-09-07 00:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 00:24:52 +0000 UTC FinishedAt: 2026-09-07 00:24:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjdt6p/series-workflowjdt6p-convert-artifact-3928424174/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 00:25:02 +0000 UTC FinishedAt: 2026-09-07 00:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 00:25:02 +0000 UTC FinishedAt: 2026-09-07 00:40:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9c0e5730-2ad0-4e80-b9a0-03ce4a6b1b0a,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-workflowjdt6p/series-workflowjdt6p-convert-artifact-3928424174/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": "2f12c19b-0a10-4780-bfea-cca3384ccc48", "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-workflowjdt6p/series-workflowjdt6p-build-action-1785153108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 00:25:02 +0000 UTC FinishedAt: 2026-09-07 00:40:36 +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:*9c0e5730-2ad0-4e80-b9a0-03ce4a6b1b0a,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-workflowjdt6p/series-workflowjdt6p-convert-artifact-3928424174/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": "2f12c19b-0a10-4780-bfea-cca3384ccc48", "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-workflowjdt6p/series-workflowjdt6p-build-action-1785153108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 00:40:45 +0000 UTC FinishedAt: 2026-09-07 00:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 00:40:45 +0000 UTC FinishedAt: 2026-09-07 00:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 00:40:45 +0000 UTC FinishedAt: 2026-09-07 00:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 00:40:45 +0000 UTC FinishedAt: 2026-09-07 00:40:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjdt6p/series-workflowjdt6p-convert-artifact-2167090913/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 00:40:56 +0000 UTC FinishedAt: 2026-09-07 00:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 00:40:56 +0000 UTC FinishedAt: 2026-09-07 00:42:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f12c19b-0a10-4780-bfea-cca3384ccc48,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-workflowjdt6p/series-workflowjdt6p-build-action-1785153108/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-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 00:43:11 +0000 UTC FinishedAt: 2026-09-07 00:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 00:43:11 +0000 UTC FinishedAt: 2026-09-07 00:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 00:43:11 +0000 UTC FinishedAt: 2026-09-07 00:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 00:43:11 +0000 UTC FinishedAt: 2026-09-07 00:58:57 +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:*9c0e5730-2ad0-4e80-b9a0-03ce4a6b1b0a,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-workflowjdt6p/series-workflowjdt6p-convert-artifact-2167090913/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": "226c9154-21d2-4144-b5bf-879c94b31467", "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-workflowjdt6p/series-workflowjdt6p-build-action-2718085101/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 00:43:11 +0000 UTC FinishedAt: 2026-09-07 00:58:51 +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:*9c0e5730-2ad0-4e80-b9a0-03ce4a6b1b0a,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-workflowjdt6p/series-workflowjdt6p-convert-artifact-2167090913/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": "226c9154-21d2-4144-b5bf-879c94b31467", "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-workflowjdt6p/series-workflowjdt6p-build-action-2718085101/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 00:58:57 +0000 UTC FinishedAt: 2026-09-07 00:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 00:58:57 +0000 UTC FinishedAt: 2026-09-07 00:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 00:58:57 +0000 UTC FinishedAt: 2026-09-07 01:00:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 00:58:57 +0000 UTC FinishedAt: 2026-09-07 01:00:41 +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:*226c9154-21d2-4144-b5bf-879c94b31467,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-workflowjdt6p/series-workflowjdt6p-build-action-2718085101/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-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 01:00:51 +0000 UTC FinishedAt: 2026-09-07 04:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 01:00:51 +0000 UTC FinishedAt: 2026-09-07 04:02:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"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:*2f12c19b-0a10-4780-bfea-cca3384ccc48,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*226c9154-21d2-4144-b5bf-879c94b31467,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-workflowjdt6p/series-workflowjdt6p-build-action-1785153108/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-workflowjdt6p/series-workflowjdt6p-build-action-2718085101/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 01:00:51 +0000 UTC FinishedAt: 2026-09-07 01:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 01:00:51 +0000 UTC FinishedAt: 2026-09-07 01:01:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"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-workflowjdt6p/series-workflowjdt6p-convert-artifact-242193782/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 01:00:51 +0000 UTC FinishedAt: 2026-09-07 01:00:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 01:00:51 +0000 UTC FinishedAt: 2026-09-07 01:00:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 01:00:51 +0000 UTC FinishedAt: 2026-09-07 01:00:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 01:01:12 +0000 UTC FinishedAt: 2026-09-07 04:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjdt6p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["location_store","md_bitmap_sysfs_del","mddev_unlock","md_bitmap_destroy","md_bitmap_set_none","set_bitmap_file","update_array_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["MD","BLK_DEV_MD","MD_BITMAP"],"series_id":"2f40b633-e673-4a59-8001-b17a1ddde93b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 01:01:12 +0000 UTC FinishedAt: 2026-09-07 04:02:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f12c19b-0a10-4780-bfea-cca3384ccc48,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*226c9154-21d2-4144-b5bf-879c94b31467,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-workflowjdt6p/series-workflowjdt6p-build-action-1785153108/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-workflowjdt6p/series-workflowjdt6p-build-action-2718085101/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-workflowjdt6p/series-workflowjdt6p-convert-artifact-242193782/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,}