Name: series-workflow2mvmj Phase: Succeeded StartedAt: 2026-09-08 14:46:47 +0000 UTC FinishedAt: 2026-09-08 19:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[0] Phase: Succeeded StartedAt: 2026-09-08 14:46:47 +0000 UTC FinishedAt: 2026-09-08 15:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 14:46:47 +0000 UTC FinishedAt: 2026-09-08 15:36:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e14a3454806468b086fe2e4ca2e1bff95b528531", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e14a3454806468b086fe2e4ca2e1bff95b528531", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "c42d2d11-a269-4327-bbf9-67ed62403e3b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__anon_vma_prepare", "find_mergeable_anon_vma" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYW5vbl92bWFfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL3JtYXAuYyBhbmQgbW0vdm1hLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpIGluc3RlYWQgb2YgYSBwbGFpbiBhc3NpZ25tZW50IGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLCBlbnN1cmluZyBwcm9wZXIgbWVtb3J5IG9yZGVyaW5nIHdpdGggUkVBRF9PTkNFIGluIHJldXNhYmxlX2Fub25fdm1hKCkuIFRoaXMgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIG9uIFNMQUJfVFlQRVNBRkVfQllfUkNVIG9iamVjdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbGVuZ3RoIG1vZGlmaWNhdGlvbnMsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29waWVzL2luZm9sZWFrcy4gQ29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYW5vbl92bWFfcHJlcGFyZSgpIGluIG1tL3JtYXAuYyB0byB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoKSB3aGVuIHB1Ymxpc2hpbmcgdm1hLVx1MDAzZWFub25fdm1hLCBwcm9wZXJseSBwYWlyaW5nIHdpdGggbG9ja2xlc3MgUkVBRF9PTkNFKCkgcmVhZHMgYW5kIGFkZHJlc3MgZGVwZW5kZW5jaWVzIGluIHJldXNhYmxlX2Fub25fdm1hKCkgKGNhbGxlZCB2aWEgZmluZF9tZXJnZWFibGVfYW5vbl92bWEoKSkuIEJlY2F1c2UgdGhpcyBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgZnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IGNvbmN1cnJlbmN5IGFub21hbGllcyBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4NWNiMjBjZDM2Mzc5OWVjMGM2ZDRhMTI1NzliN2ZiYmU3MTY0OWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE1OjM0OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggZDE4MTlmZDY5OTM4MC4uZjNiMjFhYWEzNGVlOSAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jXG5AQCAtMjA5LDcgJiM0MzsyMDksMTEgQEAgaW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdC8qIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IGFnYWluc3QgdGhyZWFkcyAqL1xuIFx0c3Bpbl9sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4gXHRpZiAobGlrZWx5KCF2bWEtXHUwMDNlYW5vbl92bWEpKSB7XG4tXHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE1ha2UgYW5vbl92bWEgZmllbGRzIHZpc2libGUgYmVmb3JlIGFub25fdm1hIGlzIHB1Ymxpc2hlZC5cbiYjNDM7XHRcdCAqIFBhaXJlZCB3aXRoIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKTtcbiBcdFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XG4gXHRcdGFub25fcm1hcF90cmVlX2luc2VydChhdmMsIGFub25fdm1hKTtcbiBcdFx0YW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jXG5pbmRleCAzNWU3YTY0ODU1ZmFkLi5lYzQxMDEyNTBkNzFiIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jXG5AQCAtMjA5NCw2ICYjNDM7MjA5NCwxMyBAQCBzdGF0aWMgaW50IGFub25fdm1hX2NvbXBhdGlibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKlxuICAqIGFjY2VwdGFibGUgZm9yIG1lcmdpbmcsIHNvIHdlIGNhbiBkbyBhbGwgb2YgdGhpcyBvcHRpbWlzdGljYWxseS4gQnV0XG4gICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLlxuICAqXG4mIzQzOyAqIFRoZSBSRUFEX09OQ0UoKSBlc3RhYmxpc2hlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgYmV0d2VlbiBhbm9uX3ZtYSBhbmRcbiYjNDM7ICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvXG4mIzQzOyAqIHZtYS1cdTAwM2Vhbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhcyBhbm9uX3ZtYSYjMzk7cyBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1Ugc29cbiYjNDM7ICogYWNjZXNzaW5nIGFuIHVuaW5pdGlhbGlzZWQgYW5vbl92bWEmIzM5O3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXG4mIzQzOyAqXG4gICogSU9XOiB0aGF0IHRoZSBcJiMzNDtsaXN0X2lzX3Npbmd1bGFyKClcJiMzNDsgdGVzdCBvbiB0aGUgYW5vbl92bWFfY2hhaW4gb25seVxuICAqIG1hdHRlcnMgZm9yIHRoZSAmIzM5O3N0YWJsZSBhbm9uX3ZtYSYjMzk7IGNhc2UgKGllIHRoZSB0aGluZyB3ZSB3YW50IHRvIGF2b2lkXG4gICogaXMgdG8gcmV0dXJuIGFuIGFub25fdm1hIHRoYXQgaXMgXCYjMzQ7Y29tcGxleFwmIzM0OyBkdWUgdG8gaGF2aW5nIGdvbmUgdGhyb3VnaFxuQEAgLTIxMDgsNiAmIzQzOzIxMTUsNyBAQCBzdGF0aWMgc3RydWN0IGFub25fdm1hICpyZXVzYWJsZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9sZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmIpXG4ge1xuIFx0aWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHtcbiYjNDM7XHRcdC8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovXG4gXHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWFub25fdm1hKTtcbiBcbiBcdFx0aWYgKGFub25fdm1hIFx1MDAyNlx1MDAyNiBsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNm9sZC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19hbm9uX3ZtYV9wcmVwYXJlJiMzNDssCiAgICAmIzM0O2ZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYW5vbl92bWFfcHJlcGFyZSgpIGluIG1tL3JtYXAuYyB0byB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoKSB3aGVuIHB1Ymxpc2hpbmcgdm1hLVx1MDAzZWFub25fdm1hLCBwcm9wZXJseSBwYWlyaW5nIHdpdGggbG9ja2xlc3MgUkVBRF9PTkNFKCkgcmVhZHMgYW5kIGFkZHJlc3MgZGVwZW5kZW5jaWVzIGluIHJldXNhYmxlX2Fub25fdm1hKCkgKGNhbGxlZCB2aWEgZmluZF9tZXJnZWFibGVfYW5vbl92bWEoKSkuIEJlY2F1c2UgdGhpcyBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgZnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IGNvbmN1cnJlbmN5IGFub21hbGllcyBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4NWNiMjBjZDM2Mzc5OWVjMGM2ZDRhMTI1NzliN2ZiYmU3MTY0OWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE1OjM0OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IGQxODE5ZmQ2OTkzODAuLmYzYjIxYWFhMzRlZTkgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTIwOSw3ICYjNDM7MjA5LDExIEBAIGludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJLyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovCiAJc3Bpbl9sb2NrKCZhbXA7bW0tJmd0O3BhZ2VfdGFibGVfbG9jayk7CiAJaWYgKGxpa2VseSghdm1hLSZndDthbm9uX3ZtYSkpIHsKLQkJdm1hLSZndDthbm9uX3ZtYSA9IGFub25fdm1hOwomIzQzOwkJLyoKJiM0MzsJCSAqIE1ha2UgYW5vbl92bWEgZmllbGRzIHZpc2libGUgYmVmb3JlIGFub25fdm1hIGlzIHB1Ymxpc2hlZC4KJiM0MzsJCSAqIFBhaXJlZCB3aXRoIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLgomIzQzOwkJICovCiYjNDM7CQlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZtYS0mZ3Q7YW5vbl92bWEsIGFub25fdm1hKTsKIAkJYW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7CiAJCWFub25fcm1hcF90cmVlX2luc2VydChhdmMsIGFub25fdm1hKTsKIAkJYW5vbl92bWEtJmd0O251bV9hY3RpdmVfdm1hcyYjNDM7JiM0Mzs7CmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jCmluZGV4IDM1ZTdhNjQ4NTVmYWQuLmVjNDEwMTI1MGQ3MWIgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jCkBAIC0yMDk0LDYgJiM0MzsyMDk0LDEzIEBAIHN0YXRpYyBpbnQgYW5vbl92bWFfY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqCiAgKiBhY2NlcHRhYmxlIGZvciBtZXJnaW5nLCBzbyB3ZSBjYW4gZG8gYWxsIG9mIHRoaXMgb3B0aW1pc3RpY2FsbHkuIEJ1dAogICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLgogICoKJiM0MzsgKiBUaGUgUkVBRF9PTkNFKCkgZXN0YWJsaXNoZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gYW5vbl92bWEgYW5kCiYjNDM7ICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvCiYjNDM7ICogdm1hLSZndDthbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgYXMgYW5vbl92bWEmIzM5O3MgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVIHNvCiYjNDM7ICogYWNjZXNzaW5nIGFuIHVuaW5pdGlhbGlzZWQgYW5vbl92bWEmIzM5O3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuCiYjNDM7ICoKICAqIElPVzogdGhhdCB0aGUgJiMzNDtsaXN0X2lzX3Npbmd1bGFyKCkmIzM0OyB0ZXN0IG9uIHRoZSBhbm9uX3ZtYV9jaGFpbiBvbmx5CiAgKiBtYXR0ZXJzIGZvciB0aGUgJiMzOTtzdGFibGUgYW5vbl92bWEmIzM5OyBjYXNlIChpZSB0aGUgdGhpbmcgd2Ugd2FudCB0byBhdm9pZAogICogaXMgdG8gcmV0dXJuIGFuIGFub25fdm1hIHRoYXQgaXMgJiMzNDtjb21wbGV4JiMzNDsgZHVlIHRvIGhhdmluZyBnb25lIHRocm91Z2gKQEAgLTIxMDgsNiAmIzQzOzIxMTUsNyBAQCBzdGF0aWMgc3RydWN0IGFub25fdm1hICpyZXVzYWJsZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9sZCwKIAkJCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmIpCiB7CiAJaWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHsKJiM0MzsJCS8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovCiAJCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBSRUFEX09OQ0Uob2xkLSZndDthbm9uX3ZtYSk7CiAKIAkJaWYgKGFub25fdm1hICZhbXA7JmFtcDsgbGlzdF9pc19zaW5ndWxhcigmYW1wO29sZC0mZ3Q7YW5vbl92bWFfY2hhaW4pKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gYG1tL3JtYXAuY2AgYW5kIGBtbS92bWEuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgY2VudHJhbCB0byB0aGUgcmV2ZXJzZSBtYXBwaW5nIGFuZCB2aXJ0dWFsIG1lbW9yeSBhcmVhIG1hbmFnZW1lbnQgcmVzcGVjdGl2ZWx5LgoKU3BlY2lmaWNhbGx5LCB0aGUgY29yZSBjaGFuZ2UgaW4gYG1tL3JtYXAuY2AgaXMgdGhlIHJlcGxhY2VtZW50IG9mIGEgc2ltcGxlIGFzc2lnbm1lbnQgKGB2bWEtJmd0O2Fub25fdm1hID0gYW5vbl92bWE7YCkgd2l0aCBgc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2bWEtJmd0O2Fub25fdm1hLCBhbm9uX3ZtYSk7YC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBjb25jdXJyZW5jeSBjb25jZXJuLiBSZXBsYWNpbmcgYSBkaXJlY3QgYXNzaWdubWVudCB3aXRoIGBzbXBfc3RvcmVfcmVsZWFzZWAgc3VnZ2VzdHMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2hhcmVkIGRhdGEgc3RydWN0dXJlIGFuZCBtZW1vcnkgb3JkZXJpbmcgaXMgY3J1Y2lhbC4gVGhlIG9yaWdpbmFsIGFzc2lnbm1lbnQgd2FzIGxpa2VseSBzdXNjZXB0aWJsZSB0byBhIHJhY2UgY29uZGl0aW9uIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktQ1BVIGVudmlyb25tZW50LCBhbmQgdGhpcyBwYXRjaCBhaW1zIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBtZW1vcnkgYmFycmllci4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgcm1hcC5jYCBtdWNoIGJldHRlci4KClRoZSBjaGFuZ2UgaW4gYG1tL3ZtYS5jYCBpcyBqdXN0IHRoZSBhZGRpdGlvbiBvZiBjb21tZW50cyBhcm91bmQgYHJldXNhYmxlX2Fub25fdm1hYCwgd2hpY2ggc3VnZ2VzdHMgaXTigJlzIG5vdCBtb2RpZnlpbmcgdGhlIHN0cnVjdHVyZSwgYnV0IHJhdGhlciBhZGRpbmcgZG9jdW1lbnRhdGlvbiBvciBjbGFyaWZpY2F0aW9uLiBTdGlsbCBpbXBvcnRhbnQsIGJ1dCBsZXNzIGltbWVkaWF0ZWx5IGltcGFjdGZ1bC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwYXRjaC4gSeKAmW0gZ29pbmcgdG8gdXNlIG15IHByZWZlcnJlZCB0b29scywgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgdG8gcXVpY2tseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyByYWNlIGNvbmRpdGlvbiB3YXMgaW50cm9kdWNlZCBhbmQgd2hhdCBwb3RlbnRpYWwgaXNzdWVzIHdlcmUgYWRkcmVzc2VkIGJ5IGVtcGxveWluZyBgc21wX3N0b3JlX3JlbGVhc2VgLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBhZmZlY3RzIHRoZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBob3cgdGhlIGFub255bW91cyB2bWFzIGFyZSBiZWluZyBoYW5kbGVkLiBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYGFub25fdm1hYCBhbmQgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcyB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzLiBUaGlzIGlzIHRoZSBvbmx5IHdheSBJIGNhbiBlbnN1cmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIGFuZCB0aGF0IGl0IHdpbGwgaGF2ZSBubyBuZWdhdGl2ZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9ybWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdFx0aWYgKCFhdmMpXG4gMTk2Olx0XHRcdGdvdG8gb3V0X2Vub21lbTtcbiAxOTc6XHRcbiAxOTg6XHRcdGFub25fdm1hID0gZmluZF9tZXJnZWFibGVfYW5vbl92bWEodm1hKTtcbiAxOTk6XHRcdGFsbG9jYXRlZCA9IE5VTEw7XG4gMjAwOlx0XHRpZiAoIWFub25fdm1hKSB7XG4gMjAxOlx0XHRcdGFub25fdm1hID0gYW5vbl92bWFfYWxsb2MoKTtcbiAyMDI6XHRcdFx0aWYgKHVubGlrZWx5KCFhbm9uX3ZtYSkpXG4gMjAzOlx0XHRcdFx0Z290byBvdXRfZW5vbWVtX2ZyZWVfYXZjO1xuIDIwNDpcdFx0XHRhbm9uX3ZtYS1cdTAwM2VudW1fY2hpbGRyZW4mIzQzOyYjNDM7OyAvKiBzZWxmLXBhcmVudCBsaW5rIGZvciBuZXcgcm9vdCAqL1xuIDIwNTpcdFx0XHRhbGxvY2F0ZWQgPSBhbm9uX3ZtYTtcbiAyMDY6XHRcdH1cbiAyMDc6XHRcbiAyMDg6XHRcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xuIDIwOTpcdFx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXG4gMjEwOlx0XHRzcGluX2xvY2soXHUwMDI2bW0tXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcbiAyMTE6XHRcdGlmIChsaWtlbHkoIXZtYS1cdTAwM2Vhbm9uX3ZtYSkpIHtcbiAyMTI6XHRcdFx0LypcbiAyMTM6XHRcdFx0ICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLlxuIDIxNDpcdFx0XHQgKiBQYWlyZWQgd2l0aCBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgaW4gcmV1c2FibGVfYW5vbl92bWEoKS5cbiAyMTU6XHRcdFx0ICovXG4gMjE2Olx0XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpO1xuIDIxNzpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbiAyMTg6XHRcdFx0YW5vbl9ybWFwX3RyZWVfaW5zZXJ0KGF2YywgYW5vbl92bWEpO1xuIDIxOTpcdFx0XHRhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMmIzQzOyYjNDM7O1xuIDIyMDpcdFx0XHRhbGxvY2F0ZWQgPSBOVUxMO1xuIDIyMTpcdFx0XHRhdmMgPSBOVUxMO1xuIDIyMjpcdFx0fVxuIDIyMzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW0tXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcbiAyMjQ6XHRcdGFub25fdm1hX3VubG9ja193cml0ZShhbm9uX3ZtYSk7XG4gMjI1Olx0XG4gMjI2Olx0XHRpZiAodW5saWtlbHkoYWxsb2NhdGVkKSlcbiAyMjc6XHRcdFx0cHV0X2Fub25fdm1hKGFsbG9jYXRlZCk7XG4gMjI4Olx0XHRpZiAodW5saWtlbHkoYXZjKSlcbiAyMjk6XHRcdFx0YW5vbl92bWFfY2hhaW5fZnJlZShhdmMpO1xuIDIzMDpcdFxuIDIzMTpcdFx0cmV0dXJuIDA7XG4gMjMyOlx0XG4gMjMzOlx0IG91dF9lbm9tZW1fZnJlZV9hdmM6XG4gMjM0Olx0XHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XG4gMjM1Olx0IG91dF9lbm9tZW06XG4gMjM2Olx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMzc6XHR9XG4gMjM4Olx0XG4gMjM5Olx0c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gMjQwOlx0XHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMjQxOlx0XHRcdFx0XHQgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbiAyNDI6XHR7XG4gMjQzOlx0XHQvKiBUaGUgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuICovXG4gMjQ0Olx0XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVx1MDAzZXZtX21tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODE0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBBbm9ueW1vdXMgVk1BcyBmb3IgUmV1c2FiaWxpdHkqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMsIGFuZCBiYXNlZCBvbiB3aGF0IEkmIzM5O3ZlIHNlZW4gc28gZmFyLCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gYG1tL3ZtYS5jYCBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgcmV1c2FibGVfYW5vbl92bWFgIGFzcGVjdC4gVGhlcmUmIzM5O3MgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCB0aGUgcHJvYmxlbSBtaWdodCBiZSBsdXJraW5nIGFyb3VuZCBob3cgd2UgaGFuZGxlIGFub255bW91cyBWaXJ0dWFsIE1lbW9yeSBBcmVhcyAoVk1BcykgYW5kIHRoZWlyIHJldXNhYmlsaXR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBJJiMzOTt2ZSBtaXNzZWQsIG9yIGFueSBzdWJ0bGUgYmVoYXZpb3IgdGhhdCYjMzk7cyBjb250cmlidXRpbmcgdG8gdGhpcyBidWcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBJIGNhbiBnbGVhbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDkwOlx0ICogTk9URSEgVGhpcyBydW5zIHdpdGggbW1hcF9sb2NrIGhlbGQgZm9yIHJlYWRpbmcsIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXRcbjIwOTE6XHQgKiB0aGUgYW5vbl92bWEgb2YgJiMzOTtvbGQmIzM5OyBpcyBjb25jdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc2V0IHVwXG4yMDkyOlx0ICogYnkgYW5vdGhlciBwYWdlIGZhdWx0IHRyeWluZyB0byBtZXJnZSBfdGhhdF8uIEJ1dCB0aGF0JiMzOTtzIG9rOiBpZiBpdFxuMjA5MzpcdCAqIGlzIGJlaW5nIHNldCB1cCwgdGhhdCBhdXRvbWF0aWNhbGx5IG1lYW5zIHRoYXQgaXQgd2lsbCBiZSBhIHNpbmdsZXRvblxuMjA5NDpcdCAqIGFjY2VwdGFibGUgZm9yIG1lcmdpbmcsIHNvIHdlIGNhbiBkbyBhbGwgb2YgdGhpcyBvcHRpbWlzdGljYWxseS4gQnV0XG4yMDk1Olx0ICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLlxuMjA5NjpcdCAqXG4yMDk3Olx0ICogVGhlIFJFQURfT05DRSgpIGVzdGFibGlzaGVzIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBiZXR3ZWVuIGFub25fdm1hIGFuZFxuMjA5ODpcdCAqIGFueSBhY2Nlc3MgdG8gaXRzIGZpZWxkcywgd2hpY2ggcGFpcnMgd2l0aCB0aGUgYXNzaWdubWVudCB0b1xuMjA5OTpcdCAqIHZtYS1cdTAwM2Vhbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS5cbjIxMDA6XHQgKlxuMjEwMTpcdCAqIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgYXMgYW5vbl92bWEmIzM5O3MgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVIHNvXG4yMTAyOlx0ICogYWNjZXNzaW5nIGFuIHVuaW5pdGlhbGlzZWQgYW5vbl92bWEmIzM5O3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXG4yMTAzOlx0ICpcbjIxMDQ6XHQgKiBJT1c6IHRoYXQgdGhlIFwmIzM0O2xpc3RfaXNfc2luZ3VsYXIoKVwmIzM0OyB0ZXN0IG9uIHRoZSBhbm9uX3ZtYV9jaGFpbiBvbmx5XG4yMTA1Olx0ICogbWF0dGVycyBmb3IgdGhlICYjMzk7c3RhYmxlIGFub25fdm1hJiMzOTsgY2FzZSAoaWUgdGhlIHRoaW5nIHdlIHdhbnQgdG8gYXZvaWRcbjIxMDY6XHQgKiBpcyB0byByZXR1cm4gYW4gYW5vbl92bWEgdGhhdCBpcyBcJiMzNDtjb21wbGV4XCYjMzQ7IGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXG4yMTA3Olx0ICogYSBmb3JrKS5cbjIxMDg6XHQgKlxuMjEwOTpcdCAqIFdlIGFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIHR3byB2bWEmIzM5O3MgYXJlIGNvbXBhdGlibGUgKGFkamFjZW50LFxuMjExMDpcdCAqIGFuZCB3aXRoIHRoZSBzYW1lIG1lbW9yeSBwb2xpY2llcykuIFRoYXQmIzM5O3MgYWxsIHN0YWJsZSwgZXZlbiB3aXRoIGp1c3RcbjIxMTE6XHQgKiBhIHJlYWQgbG9jayBvbiB0aGUgbW1hcF9sb2NrLlxuMjExMjpcdCAqL1xuMjExMzpcdHN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLFxuMjExNDpcdFx0XHRcdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSxcbjIxMTU6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmIpXG4yMTE2Olx0e1xuMjExNzpcdFx0aWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHtcbjIxMTg6XHRcdFx0LyogUGFpcmVkIHdpdGggYSBtZW1vcnkgYmFycmllciBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS4gKi9cbjIxMTk6XHRcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtXHUwMDNlYW5vbl92bWEpO1xuMjEyMDpcdFxuMjEyMTpcdFx0XHRpZiAoYW5vbl92bWEgXHUwMDI2XHUwMDI2IGxpc3RfaXNfc2luZ3VsYXIoXHUwMDI2b2xkLVx1MDAzZWFub25fdm1hX2NoYWluKSlcbjIxMjI6XHRcdFx0XHRyZXR1cm4gYW5vbl92bWE7XG4yMTIzOlx0XHR9XG4yMTI0Olx0XHRyZXR1cm4gTlVMTDtcbjIxMjU6XHR9XG4yMTI2Olx0XG4yMTI3Olx0LypcbjIxMjg6XHQgKiBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSBpcyB1c2VkIGJ5IGFub25fdm1hX3ByZXBhcmUsIHRvIGNoZWNrXG4yMTI5Olx0ICogbmVpZ2hib3VyaW5nIHZtYXMgZm9yIGEgc3VpdGFibGUgYW5vbl92bWEsIGJlZm9yZSBpdCBnb2VzIG9mZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbjogQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSBhbmFseXplIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbWAgKG1lbW9yeSBtYW5hZ2VtZW50KSBzdWJzeXN0ZW0uIFRoZSBrZXkgY2hhbmdlIGlzIGluIGBtbS9ybWFwLmNgOiB0aGV5JiMzOTt2ZSBzd2l0Y2hlZCBhIHNpbXBsZSBhc3NpZ25tZW50IChgdm1hLSZndDthbm9uX3ZtYSA9IGFub25fdm1hO2ApIHRvIGEgcmVsZWFzZSBzdG9yZSAoYHNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7dm1hLSZndDthbm9uX3ZtYSwgYW5vbl92bWEpO2ApIHdpdGhpbiB0aGUgYF9fYW5vbl92bWFfcHJlcGFyZSgpYCBmdW5jdGlvbi4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIHN1cHBvcnRpbmcgY29tbWVudCBhZGRlZCBpbiBgbW0vdm1hLmNgIGFib3V0IG1lbW9yeSBvcmRlcmluZywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgcGFpcmluZyBvZiB0aGUgcmVsZWFzZSBzdG9yZSB3aXRoIGBSRUFEX09OQ0VgIGluIGByZXVzYWJsZV9hbm9uX3ZtYSgpYC4KClRoZSBxdWVzdGlvbiBub3c6IGlzIHRoaXMgd29ydGggZnV6emluZz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjcml0ZXJpYS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGFueXRoaW5nIHRvdWNoaW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbS9gKSBpcyBhIGdvLiBBbHNvLCBJIHNob3VsZG4mIzM5O3QgYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IG9yICYjMzQ7cmVmYWN0b3JpbmcuJiMzNDsKCldlbGwsIHRoaXMgZGVmaW5pdGVseSBtb2RpZmllcyBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIGBtbS9gIGRpcmVjdG9yeSwgYW5kIGl0JiMzOTtzIGEgY2hhbmdlIHRvIHRoZSBzdG9yZSBvcGVyYXRpb24g4oCTIG1ha2luZyBpdCBhIHJlbGVhc2Ugc3RvcmUgbm93LiBTbywgeWVzLCBpdCYjMzk7cyBtb2RpZnlpbmcgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQnV0IGlzIGl0ICphY3R1YWxseSogcmVhY2hhYmxlPwoKT2theSwgc28gYF9fYW5vbl92bWFfcHJlcGFyZWAgZ2V0cyBjYWxsZWQgd2hlbiBhbiBhbm9ueW1vdXMgVk1BIGlzIHByZXBhcmVkLiBUaGF0IHNlZW1zIHByZXR0eSBnZW5lcmFsLCByaWdodD8gUGFnZSBmYXVsdHMsIGBtcHJvdGVjdGAsIGBtYWR2aXNlYC4uLiB0aGVzZSBhcmUgYWxsIGNvbW1vbiBvcGVyYXRpb25zLiBTbywgaXQmIzM5O3MgcHJldHR5IHViaXF1aXRvdXMhCgpXYWl0LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHdhcm4gYWdhaW5zdCBsaXN0aW5nICp1YmlxdWl0b3VzKiBmdW5jdGlvbnMsIGJlY2F1c2UgaXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQuICYjMzQ7QVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTLiYjMzQ7IFRoZXkgd2FudCBtZSB0byAmIzM0O1RBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUyYjMzQ7LiBTbywgSSBuZWVkIHRvIGNoZWNrIHdoYXQgc3BlY2lmaWNhbGx5IGNhbGxzIGBfX2Fub25fdm1hX3ByZXBhcmVgLCB0byBkZWNpZGUgaWYgdGhpcyBpcyB0YXJnZXRpbmcgYSBzcGVjaWZpYyBmZWF0dXJlL2xvZ2ljIGNoYW5nZSwgb3Igd2hldGhlciBpdCYjMzk7cyB0b28gZ2VuZXJpYyB0byBib3RoZXIuIExldCBtZSBzZWUgd2hhdCBmdW5jdGlvbnMgY2FsbCBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYGFub25fdm1hX3ByZXBhcmVgLCBvciB1c2UgYHJldXNhYmxlX2Fub25fdm1hYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IHNwZWNpZmljIGxvZ2ljIGJlaW5nIGNoYW5nZWQgb3IgaWYgaXQgaXMganVzdCBhIHN5bmNocm9uaXphdGlvbiBvcHRpbWl6YXRpb24gaW4gYSB2ZXJ5IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW5vbl92bWFfcHJlcGFyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmMtMTExLSAqICAtXHUwMDNlYW5vbl92bWEubG9ja1xubW0vZmlsZW1hcC5jOjExMjogKiAgICAtXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXHQoYW5vbl92bWFfcHJlcGFyZSBhbmQgdmFyaW91cylcbm1tL2ZpbGVtYXAuYy0xMTMtICpcbi0tXG5tbS9pbnRlcm5hbC5oPTMzNT1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKTtcbm1tL2ludGVybmFsLmg6MzM2OmludCAgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbm1tL2ludGVybmFsLmgtMzM3LXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5tbS9pbnRlcm5hbC5oLTMzOC1cbm1tL2ludGVybmFsLmg6MzM5OnN0YXRpYyBpbmxpbmUgaW50IGFub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9pbnRlcm5hbC5oLTM0MC17XG4tLVxubW0vaW50ZXJuYWwuaC0zNDMtXG5tbS9pbnRlcm5hbC5oOjM0NDpcdHJldHVybiBfX2Fub25fdm1hX3ByZXBhcmUodm1hKTtcbm1tL2ludGVybmFsLmgtMzQ1LX1cbi0tXG5tbS9tYWR2aXNlLmM9MTEyND1zdGF0aWMgbG9uZyBtYWR2aXNlX2d1YXJkX2luc3RhbGwoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTExNTgtXG5tbS9tYWR2aXNlLmM6MTE1OTpcdFx0ZXJyID0gYW5vbl92bWFfcHJlcGFyZSh2bWEpO1xubW0vbWFkdmlzZS5jLTExNjAtXHRcdGlmIChlcnIpXG4tLVxubW0vbWFkdmlzZS5jPTE1NzE9c3RhdGljIGJvb2wgcHJvY2Vzc19tYWR2aXNlX3JlbW90ZV92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1ODMtXG5tbS9tYWR2aXNlLmM6MTU4NDovKiBEb2VzIHRoaXMgb3BlcmF0aW9uIGludm9rZSBhbm9uX3ZtYV9wcmVwYXJlKCk/ICovXG5tbS9tYWR2aXNlLmMtMTU4NS1zdGF0aWMgYm9vbCBwcmVwYXJlc19hbm9uX3ZtYShpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jPTE1OTk9c3RhdGljIGJvb2wgaXNfdm1hX2xvY2tfc3VmZmljaWVudChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tYWR2aXNlLmMtMTYxMS1cdC8qXG5tbS9tYWR2aXNlLmM6MTYxMjpcdCAqIGFub25fdm1hX3ByZXBhcmUoKSBleHBsaWNpdGx5IHJlcXVpcmVzIGFuIG1tYXAgbG9jayBmb3Jcbm1tL21hZHZpc2UuYy0xNjEzLVx0ICogc2VyaWFsaXNhdGlvbiwgc28gd2UgY2Fubm90IHVzZSBhIFZNQSBsb2NrIGluIHRoaXMgY2FzZS5cbi0tXG5tbS9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtMzkzOS0gKiBXaGVuIHByZXBhcmluZyB0byBpbnNlcnQgYW4gYW5vbnltb3VzIHBhZ2UgaW50byBhIFZNQSBmcm9tIGFcbm1tL21lbW9yeS5jOjM5NDA6ICogZmF1bHQgaGFuZGxlciwgY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGFub25fdm1hX3ByZXBhcmUoKS5cbm1tL21lbW9yeS5jLTM5NDEtICogSWYgdGhpcyB2bWEgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGFuIGFzc29jaWF0ZWQgYW5vbl92bWEgYW5kIHdlIGFyZVxubW0vbWVtb3J5LmMtMzk0Mi0gKiBvbmx5IHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgd2l0aCB0aGVcbm1tL21lbW9yeS5jOjM5NDM6ICogbW1hcF9sb2NrIGhlbGQuICBfX2Fub25fdm1hX3ByZXBhcmUoKSB3aWxsIGxvb2sgYXQgYWRqYWNlbnQgVk1BcyB0b1xubW0vbWVtb3J5LmMtMzk0NC0gKiBkZXRlcm1pbmUgaWYgdGhpcyBWTUEgY2FuIHNoYXJlIGl0cyBhbm9uX3ZtYSwgYW5kIHRoYXQmIzM5O3Mgbm90IHNhZmUgdG9cbi0tXG5tbS9tZW1vcnkuYz0zOTUwPXZtX2ZhdWx0X3QgX192bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTM5NjAtXHR9XG5tbS9tZW1vcnkuYzozOTYxOlx0aWYgKF9fYW5vbl92bWFfcHJlcGFyZSh2bWEpKVxubW0vbWVtb3J5LmMtMzk2Mi1cdFx0cmV0ID0gVk1fRkFVTFRfT09NO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9Nzk4PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtODE5LVxubW0vbWlncmF0ZV9kZXZpY2UuYzo4MjA6XHRyZXQgPSBhbm9uX3ZtYV9wcmVwYXJlKHZtYSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTgyMS1cdGlmIChyZXQpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05NzY9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfaW5zZXJ0X3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTAyOC1cdFx0Z290byBhYm9ydDtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTAyOTpcdGlmICh1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDMwLVx0XHRnb3RvIGFib3J0O1xuLS1cbm1tL3JtYXAuYz0xNTA9c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fYXNzaWduKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0xNTktLyoqXG5tbS9ybWFwLmM6MTYwOiAqIF9fYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb25cbm1tL3JtYXAuYy0xNjEtICogQHZtYTogdGhlIG1lbW9yeSByZWdpb24gaW4gcXVlc3Rpb25cbi0tXG5tbS9ybWFwLmMtMTY3LSAqIFRoZSBjb21tb24gY2FzZSB3aWxsIGJlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIG9uZSwgd2hpY2hcbm1tL3JtYXAuYzoxNjg6ICogaXMgaGFuZGxlZCBpbmxpbmUgYnkgYW5vbl92bWFfcHJlcGFyZSgpLiBCdXQgaWZcbm1tL3JtYXAuYy0xNjktICogbm90IHdlIGVpdGhlciBuZWVkIHRvIGZpbmQgYW4gYWRqYWNlbnQgbWFwcGluZyB0aGF0IHdlXG4tLVxubW0vcm1hcC5jLTE4NC0gKi9cbm1tL3JtYXAuYzoxODU6aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL3JtYXAuYy0xODYte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTA5PXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF92bWFfYW5kX3ByZXBhcmVfYW5vbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTExOC1cdGVsc2UgaWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpIFx1MDAyNlx1MDAyNlxubW0vdXNlcmZhdWx0ZmQuYzoxMTk6XHRcdCB1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKVxubW0vdXNlcmZhdWx0ZmQuYy0xMjAtXHRcdHZtYSA9IEVSUl9QVFIoLUVOT01FTSk7XG4tLVxubW0vdm1hLmM9MjA1ND1zdGF0aWMgaW50IGFub25fdm1hX2NvbXBhdGlibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmIpXG4tLVxubW0vdm1hLmMtMjA5OC0gKiBhbnkgYWNjZXNzIHRvIGl0cyBmaWVsZHMsIHdoaWNoIHBhaXJzIHdpdGggdGhlIGFzc2lnbm1lbnQgdG9cbm1tL3ZtYS5jOjIwOTk6ICogdm1hLVx1MDAzZWFub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxubW0vdm1hLmMtMjEwMC0gKlxuLS1cbm1tL3ZtYS5jPTIxMTM9c3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcmV1c2FibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQsXG4tLVxubW0vdm1hLmMtMjExNy1cdGlmIChhbm9uX3ZtYV9jb21wYXRpYmxlKGEsIGIpKSB7XG5tbS92bWEuYzoyMTE4Olx0XHQvKiBQYWlyZWQgd2l0aCBhIG1lbW9yeSBiYXJyaWVyIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLiAqL1xubW0vdm1hLmMtMjExOS1cdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtXHUwMDNlYW5vbl92bWEpO1xuLS1cbm1tL3ZtYS5jLTIxMjctLypcbm1tL3ZtYS5jOjIxMjg6ICogZmluZF9tZXJnZWFibGVfYW5vbl92bWEgaXMgdXNlZCBieSBhbm9uX3ZtYV9wcmVwYXJlLCB0byBjaGVja1xubW0vdm1hLmMtMjEyOS0gKiBuZWlnaGJvdXJpbmcgdm1hcyBmb3IgYSBzdWl0YWJsZSBhbm9uX3ZtYSwgYmVmb3JlIGl0IGdvZXMgb2ZmXG4tLVxubW0vdm1hLmM9MzIzMD1pbnQgZXhwYW5kX3Vwd2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi0tXG5tbS92bWEuYy0zMjcwLVx0LyogV2UgbXVzdCBtYWtlIHN1cmUgdGhlIGFub25fdm1hIGlzIGFsbG9jYXRlZC4gKi9cbm1tL3ZtYS5jOjMyNzE6XHRpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2bWEpKSkge1xubW0vdm1hLmMtMzI3Mi1cdFx0dm1hX2l0ZXJfZnJlZShcdTAwMjZ2bWkpO1xuLS1cbm1tL3ZtYS5jPTMzMTU9aW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi0tXG5tbS92bWEuYy0zMzQ4LVx0LyogV2UgbXVzdCBtYWtlIHN1cmUgdGhlIGFub25fdm1hIGlzIGFsbG9jYXRlZC4gKi9cbm1tL3ZtYS5jOjMzNDk6XHRpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2bWEpKSkge1xubW0vdm1hLmMtMzM1MC1cdFx0dm1hX2l0ZXJfZnJlZShcdTAwMjZ2bWkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQW5vbnltb3VzIFZpcnR1YWwgTWVtb3J5IEFyZWEgTWVyZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYW5kIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBoYW5naW5nIG91dCBpbiBgbW0vcm1hcC5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdGhlIGJpZ2dlciBwaWN0dXJlIGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIHBsYXlpbmcgaW4gdGhpcyBzYW5kYm94LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGFuZCBgcmV1c2FibGVfYW5vbl92bWFgLiBUaG9zZSBzZWVtICpleHRyZW1lbHkqIHJlbGV2YW50LCBhbmQgdGhleSYjMzk7cmUgYXBwYXJlbnRseSBpbiBgbW0vdm1hLmNgLiBUaW1lIHRvIGRpZyBpbnRvIGBtbS92bWEuY2AgYW5kIGdldCBhIGZlZWwgZm9yIGhvdyBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGlzIGFjdHVhbGx5IHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSB3aG9sZSBtZXJnaW5nIHByb2Nlc3MgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMjA6XHRcbjIxMjE6XHRcdFx0aWYgKGFub25fdm1hIFx1MDAyNlx1MDAyNiBsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNm9sZC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpXG4yMTIyOlx0XHRcdFx0cmV0dXJuIGFub25fdm1hO1xuMjEyMzpcdFx0fVxuMjEyNDpcdFx0cmV0dXJuIE5VTEw7XG4yMTI1Olx0fVxuMjEyNjpcdFxuMjEyNzpcdC8qXG4yMTI4Olx0ICogZmluZF9tZXJnZWFibGVfYW5vbl92bWEgaXMgdXNlZCBieSBhbm9uX3ZtYV9wcmVwYXJlLCB0byBjaGVja1xuMjEyOTpcdCAqIG5laWdoYm91cmluZyB2bWFzIGZvciBhIHN1aXRhYmxlIGFub25fdm1hLCBiZWZvcmUgaXQgZ29lcyBvZmZcbjIxMzA6XHQgKiB0byBhbGxvY2F0ZSBhIG5ldyBhbm9uX3ZtYS4gIEl0IGNoZWNrcyBiZWNhdXNlIGEgcmVwZXRpdGl2ZVxuMjEzMTpcdCAqIHNlcXVlbmNlIG9mIG1wcm90ZWN0cyBhbmQgZmF1bHRzIG1heSBvdGhlcndpc2UgbGVhZCB0byBkaXN0aW5jdFxuMjEzMjpcdCAqIGFub25fdm1hcyBiZWluZyBhbGxvY2F0ZWQsIHByZXZlbnRpbmcgdm1hIG1lcmdlIGluIHN1YnNlcXVlbnRcbjIxMzM6XHQgKiBtcHJvdGVjdC5cbjIxMzQ6XHQgKi9cbjIxMzU6XHRzdHJ1Y3QgYW5vbl92bWEgKmZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuMjEzNjpcdHtcbjIxMzc6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBOVUxMO1xuMjEzODpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCAqbmV4dDtcbjIxMzk6XHRcdFZNQV9JVEVSQVRPUih2bWksIHZtYS1cdTAwM2V2bV9tbSwgdm1hLVx1MDAzZXZtX2VuZCk7XG4yMTQwOlx0XG4yMTQxOlx0XHQvKiBUcnkgbmV4dCBmaXJzdC4gKi9cbjIxNDI6XHRcdG5leHQgPSB2bWFfaXRlcl9sb2FkKFx1MDAyNnZtaSk7XG4yMTQzOlx0XHRpZiAobmV4dCkge1xuMjE0NDpcdFx0XHRhbm9uX3ZtYSA9IHJldXNhYmxlX2Fub25fdm1hKG5leHQsIHZtYSwgbmV4dCk7XG4yMTQ1Olx0XHRcdGlmIChhbm9uX3ZtYSlcbjIxNDY6XHRcdFx0XHRyZXR1cm4gYW5vbl92bWE7XG4yMTQ3Olx0XHR9XG4yMTQ4Olx0XG4yMTQ5Olx0XHRwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbjIxNTA6XHRcdFZNX0JVR19PTl9WTUEocHJldiAhPSB2bWEsIHZtYSk7XG4yMTUxOlx0XHRwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbjIxNTI6XHRcdC8qIFRyeSBwcmV2IG5leHQuICovXG4yMTUzOlx0XHRpZiAocHJldilcbjIxNTQ6XHRcdFx0YW5vbl92bWEgPSByZXVzYWJsZV9hbm9uX3ZtYShwcmV2LCBwcmV2LCB2bWEpO1xuMjE1NTpcdFxuMjE1NjpcdFx0LypcbjIxNTc6XHRcdCAqIFdlIG1pZ2h0IHJlYWNoIGhlcmUgd2l0aCBhbm9uX3ZtYSA9PSBOVUxMIGlmIHdlIGNhbiYjMzk7dCBmaW5kXG4yMTU4Olx0XHQgKiBhbnkgcmV1c2FibGUgYW5vbl92bWEuXG4yMTU5Olx0XHQgKiBUaGVyZSYjMzk7cyBubyBhYnNvbHV0ZSBuZWVkIHRvIGxvb2sgb25seSBhdCB0b3VjaGluZyBuZWlnaGJvdXJzOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTY1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogYGFub25fdm1hYCBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGlzIGV4cG9ydGVkIG9yIHN0YXRpYy4gVGhpcyBsb29rcyBsaWtlIGl0IGxpdmVzIGluIGBtbS92bWEuY2AsIGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyBpbiBgbW0vcm1hcC5jYC4KCk5vdywgcmVnYXJkaW5nIHRoZSBjaGFuZ2UsIHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIHN3aXRjaCBmcm9tIGEgZGlyZWN0IGFzc2lnbm1lbnQgYHZtYS0mZ3Q7YW5vbl92bWEgPSBhbm9uX3ZtYTtgIHRvIGBzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZtYS0mZ3Q7YW5vbl92bWEsIGFub25fdm1hKTtgIHdpdGhpbiBgX19hbm9uX3ZtYV9wcmVwYXJlYC4gVGhpcyBpcyBpbiB0aGUgY29yZSBNTSBjb2RlLCBgbW0vcm1hcC5jYC4gVGhlIGNvcmUgcXVlc3Rpb24gaGVyZSwgb2J2aW91c2x5LCBpcyB3aGV0aGVyIHRoaXMgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBzbXBfc3RvcmVfcmVsZWFzZWAsIGNvdWxkIGludHJvZHVjZSBhbiBleHBsb2l0YWJsZSByYWNlIGNvbmRpdGlvbi4KCk5leHQgc3RlcDogYXNzZXNzIHJlYWNoYWJpbGl0eS4gRG9lcyB0aGlzIGNoYW5nZSBhZmZlY3QgZXhlY3V0YWJsZSBjb2RlIHRoYXTigJlzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBpbiB0aGUgZmllbGQ/IENvbnNpZGVyaW5nIHRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQsIGBfX2Fub25fdm1hX3ByZXBhcmUoKWAgaXMgY2FsbGVkIGR1cmluZyBhbm9ueW1vdXMgbWVtb3J5IGhhbmRsaW5nLCBwYWdlIGZhdWx0cywgbWFkdmlzZSwgbXByb3RlY3QsIGFuZCBwb3RlbnRpYWxseSBtaWdyYXRlX3ZtYSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGNvZGUgaXMgcmVndWxhcmx5IGV4ZXJjaXNlZCBpbiBtb3N0IGVudmlyb25tZW50cy4gQm90aCBgbW0vcm1hcC5jYCBhbmQgYG1tL3ZtYS5jYCBhcmUgY29yZSBrZXJuZWwgY29tcG9uZW50cywgc28gdGhleSBhcmUgYWx3YXlzIGNvbXBpbGVkIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUuCgpGaW5hbGx5LCBjb25maWd1cmF0aW9uLiBBcmUgdGhlcmUgYW55IHVudXN1YWwga2VybmVsIGNvbmZpZ3MgdGhhdCB0aGlzIHJlbGllcyBvbj8gSSBuZWVkIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm1hcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS0zOS1cdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbm1tL01ha2VmaWxlOjQwOlx0XHRcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xubW0vTWFrZWZpbGUtNDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzQwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZToKCioqQ2hlY2tpbmcgTU1VIENvbmZpZ3VyYXRpb24gYW5kIFJlbGF0ZWQgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBsaW5lOiBgbW11LSQoQ09ORklHX01NVSkgOj0gLi4uIHJtYXAubyAuLi4gdm1hLm9gLiBSaWdodCBhd2F5LCBJIHNlZSB0aGlzIGlzIGxpbmtpbmcgb2JqZWN0IGZpbGVzIGJhc2VkIG9uIHRoZSBgQ09ORklHX01NVWAgdmFyaWFibGUuIFRoYXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkIGZvciBhbnkgYXJjaGl0ZWN0dXJlIHdpdGggYSBNZW1vcnkgTWFuYWdlbWVudCBVbml0LCBsaWtlIHg4NiBvciBhbWQ2NC4gQnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjb25zaWRlcmluZyBhbGwgcG9zc2liaWxpdGllcy4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBpbiBwbGF5IGhlcmU/IEFyZSB0aGVyZSBhbnkgbGVzcyBjb21tb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbiYjMzk7dCBmaXQgdGhlIHR5cGljYWwgbW9sZD8gSSBuZWVkIHRvIGNvbnNpZGVyIGFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb25zIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNjZW5hcmlvcy4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcywgSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHVzYWdlcyBvZiB0aGUgYF9fYW5vbl92bWFfcHJlcGFyZWAgb3IgYHJldXNhYmxlX2Fub25fdm1hYCBzeW1ib2xzLiBUaGVzZSBhcmUgb2Z0ZW4gaW5kaWNhdG9ycyBvZiBob3cgYW5vbnltb3VzIFZpcnR1YWwgTWVtb3J5IEFyZWFzIChWTUFzKSBhcmUgaGFuZGxlZC4gQ2hlY2tpbmcgZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhlc2Ugc3ltYm9scyB3aWxsIGltbWVkaWF0ZWx5IHJldmVhbCBob3cgdGhlIE1NVSBjb25maWd1cmF0aW9uIGltcGFjdHMgdGhlIFZNQSBoYW5kbGluZy4gVGhpcyB3aWxsIGhlbHAgbWUgY29uZmlybSB0aGUgYnJlYWR0aCBvZiB0aGUgYENPTkZJR19NTVVgJiMzOTtzIGluZmx1ZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbm9uX3ZtYV9wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MzM1PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpO1xubW0vaW50ZXJuYWwuaDozMzY6aW50ICBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xubW0vaW50ZXJuYWwuaC0zMzctdm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5tbS9pbnRlcm5hbC5oPTMzOT1zdGF0aWMgaW5saW5lIGludCBhbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2ludGVybmFsLmgtMzQzLVxubW0vaW50ZXJuYWwuaDozNDQ6XHRyZXR1cm4gX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSk7XG5tbS9pbnRlcm5hbC5oLTM0NS19XG4tLVxubW0vbWVtb3J5LmM9MzkyNT1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Nhbl9jYWxsX2ZhdWx0KGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTM5NDItICogb25seSBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgdGhlIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlXG5tbS9tZW1vcnkuYzozOTQzOiAqIG1tYXBfbG9jayBoZWxkLiAgX19hbm9uX3ZtYV9wcmVwYXJlKCkgd2lsbCBsb29rIGF0IGFkamFjZW50IFZNQXMgdG9cbm1tL21lbW9yeS5jLTM5NDQtICogZGV0ZXJtaW5lIGlmIHRoaXMgVk1BIGNhbiBzaGFyZSBpdHMgYW5vbl92bWEsIGFuZCB0aGF0JiMzOTtzIG5vdCBzYWZlIHRvXG4tLVxubW0vbWVtb3J5LmM9Mzk1MD12bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy0zOTYwLVx0fVxubW0vbWVtb3J5LmM6Mzk2MTpcdGlmIChfX2Fub25fdm1hX3ByZXBhcmUodm1hKSlcbm1tL21lbW9yeS5jLTM5NjItXHRcdHJldCA9IFZNX0ZBVUxUX09PTTtcbi0tXG5tbS9ybWFwLmM9MTUwPXN0YXRpYyB2b2lkIGFub25fdm1hX2NoYWluX2Fzc2lnbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMTU5LS8qKlxubW0vcm1hcC5jOjE2MDogKiBfX2Fub25fdm1hX3ByZXBhcmUgLSBhdHRhY2ggYW4gYW5vbl92bWEgdG8gYSBtZW1vcnkgcmVnaW9uXG5tbS9ybWFwLmMtMTYxLSAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uXG4tLVxubW0vcm1hcC5jLTE4NC0gKi9cbm1tL3JtYXAuYzoxODU6aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL3JtYXAuYy0xODYte1xuLS1cbm1tL3ZtYS5jPTIwNTQ9c3RhdGljIGludCBhbm9uX3ZtYV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpiKVxuLS1cbm1tL3ZtYS5jLTIwOTgtICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvXG5tbS92bWEuYzoyMDk5OiAqIHZtYS1cdTAwM2Vhbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS5cbm1tL3ZtYS5jLTIxMDAtICpcbi0tXG5tbS92bWEuYz0yMTEzPXN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLFxuLS1cbm1tL3ZtYS5jLTIxMTctXHRpZiAoYW5vbl92bWFfY29tcGF0aWJsZShhLCBiKSkge1xubW0vdm1hLmM6MjExODpcdFx0LyogUGFpcmVkIHdpdGggYSBtZW1vcnkgYmFycmllciBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS4gKi9cbm1tL3ZtYS5jLTIxMTktXHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWFub25fdm1hKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NDUKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogNDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCYjMzk7cyBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoYXQgdGhlIHByZXJlcXVpc2l0ZXMgYXJlIHNhdGlzZmllZC4gYF9fYW5vbl92bWFfcHJlcGFyZWAgaXMgaW4gYG1tL3JtYXAuY2AsIHdoaWNoLCBhcyBleHBlY3RlZCwgb25seSByZXF1aXJlcyB0aGUgYE1NVWAgZmVhdHVyZS4gR29vZCwgdGhlIGBNTVVgIGNvbmZpZ3VyYXRpb24gaXMgc3RhbmRhcmQsIHNvIHdlIGNhbiBzZXQgdGhhdCBjb25maWRlbnRseS4gSSYjMzk7bGwgdXNlIGBNTVVgIGV4cGxpY2l0bHksIHRob3VnaCBhbiBlbXB0eSBlbnRyeSBtaWdodCBhbHNvIHdvcmsgYnkgZGVmYXVsdC4KCk5vdyBmb3IgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGUgY29yZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UgYXJlIHdoYXQgSSB3YW50IHRvIG5haWwgZG93biBmb3IgdGVzdGluZy4gYF9fYW5vbl92bWFfcHJlcGFyZWAgaXMgdGhlIGtleSBmdW5jdGlvbiB0aGF0IHdhcyBkaXJlY3RseSBtb2RpZmllZCwgd2hlcmUgdGhhdCBgc21wX3N0b3JlX3JlbGVhc2VgIHdhcyBhZGRlZC4gVGhlbiB0aGVyZSYjMzk7cyBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgLCB3aGljaCBjYWxscyBgcmV1c2FibGVfYW5vbl92bWFgICh3aGljaCwgaW1wb3J0YW50bHksIGlzIHN0YXRpYyksIGFuZCBpdCYjMzk7cyBhbHNvIHJlZmVyZW5jZWQgaW4gdGhlIHBhdGNoIGNvbW1lbnRzIGluIHJlbGF0aW9uIHRvIHRoZSBzeW5jaHJvbml6YXRpb24uIEZpbmFsbHksIGBfX3ZtZl9hbm9uX3ByZXBhcmVgLCB3aGljaCBjYWxscyBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyBpbXBvcnRhbnQgYXMgdGhlIGNhbGxpbmcgZnVuY3Rpb24uCgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29tbW9uIG9yIHNwZWNpZmljLiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyBwcmV0dHkgc3BlY2lmaWMgdG8gdGhlIHByb2Nlc3Mgb2Ygc2V0dGluZyB1cCBhbm9ueW1vdXMgdmlydHVhbCBtZW1vcnkgYXJlYXM7IGl0JiMzOTtzIG5vdCBjYWxsZWQgb24gZXZlcnkgaG90IHBhdGgsIG9ubHkgd2hlbiBhbGxvY2F0aW5nIG9yIHByZXBhcmluZyB0aGVzZSBhbm9ueW1vdXMgVk1Bcy4gYGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hYCBpcyBsZXNzIHNwZWNpZmljIGluIGNvbmNlcHQgYnV0IGlzIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50IHRvIHRoZSBhbHRlcmVkIGxvZ2ljLCBnaXZlbiB0aGUgc3RhdGljIG5hdHVyZSBvZiBgcmV1c2FibGVfYW5vbl92bWFgLgoKTG9va2luZyBhdCBvdGhlciBmdW5jdGlvbnMsIEkgc2VlIHRoYXQgYHJldXNhYmxlX2Fub25fdm1hYCBpcyBzdGF0aWMsIGRlZmluZWQgaW4gYG1tL3ZtYS5jYCwgYW5kIG9ubHkgY2FsbGVkIGJ5IGBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYWAuIFRoaXMgcmVpbmZvcmNlcyB0aGUgaW1wb3J0YW5jZSBvZiBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGFuZCBgX19hbm9uX3ZtYV9wcmVwYXJlYCBhcyB0aGUgaW1wb3J0YW50IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRvIHRlc3QuCgpTbywgYWNjb3JkaW5nIHRvIG15IHJldmlldywgdGhlIGZ1enppbmcgcHJvcGVydGllcyBvZiB0aGlzIHBhdGNoIHNob3VsZCBiZToKCiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAgKGFic29sdXRlbHkpCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFsmIzM0O01NVSYjMzQ7XWAKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbJiMzNDtfX2Fub25fdm1hX3ByZXBhcmUmIzM0OywgJiMzNDtmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSYjMzQ7XWAKCkkmIzM5O2xsIHByb2NlZWQgdG8gdGhlIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYW5vbl92bWFfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBfX2Fub25fdm1hX3ByZXBhcmUoKSBpbiBtbS9ybWFwLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgd2hlbiBwdWJsaXNoaW5nIHZtYS1cdTAwM2Vhbm9uX3ZtYSwgcHJvcGVybHkgcGFpcmluZyB3aXRoIGxvY2tsZXNzIFJFQURfT05DRSgpIHJlYWRzIGFuZCBhZGRyZXNzIGRlcGVuZGVuY2llcyBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpIChjYWxsZWQgdmlhIGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKCkpLiBCZWNhdXNlIHRoaXMgYWx0ZXJzIG1lbW9yeSBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBjb25jdXJyZW5jeSBhbm9tYWxpZXMgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYW5vbl92bWFfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBfX2Fub25fdm1hX3ByZXBhcmUoKSBpbiBtbS9ybWFwLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgd2hlbiBwdWJsaXNoaW5nIHZtYS1cdTAwM2Vhbm9uX3ZtYSwgcHJvcGVybHkgcGFpcmluZyB3aXRoIGxvY2tsZXNzIFJFQURfT05DRSgpIHJlYWRzIGFuZCBhZGRyZXNzIGRlcGVuZGVuY2llcyBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpIChjYWxsZWQgdmlhIGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKCkpLiBCZWNhdXNlIHRoaXMgYWx0ZXJzIG1lbW9yeSBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBjb25jdXJyZW5jeSBhbm9tYWxpZXMgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS9ybWFwLmMgYW5kIG1tL3ZtYS5jIHRvIHVzZSBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKSBpbnN0ZWFkIG9mIGEgcGxhaW4gYXNzaWdubWVudCBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKSwgZW5zdXJpbmcgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyB3aXRoIFJFQURfT05DRSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBvbiBTTEFCX1RZUEVTQUZFX0JZX1JDVSBvYmplY3RzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGxlbmd0aCBtb2RpZmljYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGNvcGllcy9pbmZvbGVha3MuIENvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzg1Y2IyMGNkMzYzNzk5ZWMwYzZkNGExMjU3OWI3ZmJiZTcxNjQ5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTU6MzQ6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggZDE4MTlmZDY5OTM4MC4uZjNiMjFhYWEzNGVlOSAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMjA5LDcgJiM0MzsyMDksMTEgQEAgaW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi8KIAlzcGluX2xvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKTsKIAlpZiAobGlrZWx5KCF2bWEtJmd0O2Fub25fdm1hKSkgewotCQl2bWEtJmd0O2Fub25fdm1hID0gYW5vbl92bWE7CiYjNDM7CQkvKgomIzQzOwkJICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLgomIzQzOwkJICogUGFpcmVkIHdpdGggYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGluIHJldXNhYmxlX2Fub25fdm1hKCkuCiYjNDM7CQkgKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7dm1hLSZndDthbm9uX3ZtYSwgYW5vbl92bWEpOwogCQlhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTsKIAkJYW5vbl9ybWFwX3RyZWVfaW5zZXJ0KGF2YywgYW5vbl92bWEpOwogCQlhbm9uX3ZtYS0mZ3Q7bnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzOzsKZGlmZiAtLWdpdCBhL21tL3ZtYS5jIGIvbW0vdm1hLmMKaW5kZXggMzVlN2E2NDg1NWZhZC4uZWM0MTAxMjUwZDcxYiAxMDA2NDQKLS0tIGEvbW0vdm1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hLmMKQEAgLTIwOTQsNiAmIzQzOzIwOTQsMTMgQEAgc3RhdGljIGludCBhbm9uX3ZtYV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoKICAqIGFjY2VwdGFibGUgZm9yIG1lcmdpbmcsIHNvIHdlIGNhbiBkbyBhbGwgb2YgdGhpcyBvcHRpbWlzdGljYWxseS4gQnV0CiAgKiB3ZSBkbyB0aGF0IFJFQURfT05DRSgpIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIG5ldmVyIHJlLWxvYWQgdGhlIHBvaW50ZXIuCiAgKgomIzQzOyAqIFRoZSBSRUFEX09OQ0UoKSBlc3RhYmxpc2hlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgYmV0d2VlbiBhbm9uX3ZtYSBhbmQKJiM0MzsgKiBhbnkgYWNjZXNzIHRvIGl0cyBmaWVsZHMsIHdoaWNoIHBhaXJzIHdpdGggdGhlIGFzc2lnbm1lbnQgdG8KJiM0MzsgKiB2bWEtJmd0O2Fub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhcyBhbm9uX3ZtYSYjMzk7cyBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1Ugc28KJiM0MzsgKiBhY2Nlc3NpbmcgYW4gdW5pbml0aWFsaXNlZCBhbm9uX3ZtYSYjMzk7cyBmaWVsZHMgbWF5IHJlc3VsdCBpbiBhIFVBRi4KJiM0MzsgKgogICogSU9XOiB0aGF0IHRoZSAmIzM0O2xpc3RfaXNfc2luZ3VsYXIoKSYjMzQ7IHRlc3Qgb24gdGhlIGFub25fdm1hX2NoYWluIG9ubHkKICAqIG1hdHRlcnMgZm9yIHRoZSAmIzM5O3N0YWJsZSBhbm9uX3ZtYSYjMzk7IGNhc2UgKGllIHRoZSB0aGluZyB3ZSB3YW50IHRvIGF2b2lkCiAgKiBpcyB0byByZXR1cm4gYW4gYW5vbl92bWEgdGhhdCBpcyAmIzM0O2NvbXBsZXgmIzM0OyBkdWUgdG8gaGF2aW5nIGdvbmUgdGhyb3VnaApAQCAtMjEwOCw2ICYjNDM7MjExNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLAogCQkJCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYikKIHsKIAlpZiAoYW5vbl92bWFfY29tcGF0aWJsZShhLCBiKSkgewomIzQzOwkJLyogUGFpcmVkIHdpdGggYSBtZW1vcnkgYmFycmllciBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS4gKi8KIAkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtJmd0O2Fub25fdm1hKTsKIAogCQlpZiAoYW5vbl92bWEgJmFtcDsmYW1wOyBsaXN0X2lzX3Npbmd1bGFyKCZhbXA7b2xkLSZndDthbm9uX3ZtYV9jaGFpbikpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1tL3JtYXAuY2AgYW5kIGBtbS92bWEuY2AgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkaXZlIGludG8gdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYG1tL3JtYXAuY2AgYW5kIGBtbS92bWEuY2AgYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGZvciBpdC4gVGhhdCYjMzk7cyBmaW5lOyBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhlIGNoYW5nZSBiZWZvcmUganVtcGluZyBpbnRvIGFueSBjb25jbHVzaW9ucy4gTGV0JiMzOTtzIGRpZyBpbi4KCkl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgc3luY2hyb25pemF0aW9uIGFuZCB2aXNpYmlsaXR5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYW5vbl92bWFgIHN0cnVjdHVyZS4gSW4gYG1tL3JtYXAuY2AsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgaW4gYF9fYW5vbl92bWFfcHJlcGFyZWAsIHdoZXJlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBgdm1hLSZndDthbm9uX3ZtYSA9IGFub25fdm1hO2AgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2bWEtJmd0O2Fub25fdm1hLCBhbm9uX3ZtYSk7YC4gVGhleSYjMzk7dmUgYWxzbyBhZGRlZCBhIGNvbW1lbnQgdGhhdCBmbGFncyB0aGF0IHRoZSBgYW5vbl92bWFgIGZpZWxkcyBuZWVkIHRvIGJlIHZpc2libGUgYmVmb3JlIGBhbm9uX3ZtYWAgaXMgYWN0dWFsbHkgcHVibGlzaGVkIGFuZCB0aGF0IHRoaXMgY2hhbmdlIGlzIHBhaXJlZCB3aXRoIGFuIGFkZHJlc3MgZGVwZW5kZW5jeS4KCk5vdywgaW4gYG1tL3ZtYS5jYCwgYHJldXNhYmxlX2Fub25fdm1hYCBnb3Qgc29tZSB1cGRhdGVkIGNvbW1lbnRzLCBzcGVjaWZpY2FsbHkgY2FsbGluZyBvdXQgdGhhdCB0aGUgYFJFQURfT05DRSgpYCBlc3RhYmxpc2hlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgYmV0d2VlbiBgYW5vbl92bWFgIGFuZCBhbnkgYWNjZXNzIHRvIGl0cyBmaWVsZHMuIFRoZSBjb21tZW50IGFsc28gcG9pbnRzIG91dCB0aGF0IHRoaXMgcGFpcmluZyBpcyB2ZXJ5IGltcG9ydGFudCBiZWNhdXNlIGBhbm9uX3ZtYWAgdXNlcyBgU0xBQl9UWVBFU0FGRV9CWV9SQ1VgLCBzbyB1bmluaXRpYWxpemVkIGZpZWxkcyB3b3VsZCBjYXVzZSBhIFVzZS1BZnRlci1GcmVlIChVQUYpIHNpdHVhdGlvbi4gCgpTbyBpdCYjMzk7cyBhbGwgYWJvdXQgbWVtb3J5IGJhcnJpZXJzLCBkYXRhIGRlcGVuZGVuY2llcywgYW5kIHByZXZlbnRpbmcgVUFGIGJ1Z3MuIFRoaXMgYHNtcF9zdG9yZV9yZWxlYXNlYCB3aXRoIGEgcGFpcmVkIGBSRUFEX09OQ0UoKWAgc2VlbXMgdG8gYmUgZXN0YWJsaXNoaW5nIGEgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyB0byBlbnN1cmUgdGhhdCB3aGVuIHdlIGFjY2VzcyB0aGUgYGFub25fdm1hYCBmaWVsZHMgaW4gYHJldXNhYmxlX2Fub25fdm1hYCwgdGhleSBhcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgYW5kIHNhZmUgdG8gdXNlLgoKT2theSwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGZ1bGwgY29udGV4dC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB0ZWxsIGlmIEtNU0FOIG5lZWRzIHNvbWUgZGVkaWNhdGVkIGF0dGVudGlvbi4gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcm1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHQgKiBBcyBhIHJlc3VsdCwgd2UgbmVlZCB0byBkbyBwcm9wZXIgYW5vbl92bWEgbG9ja2luZyBldmVuXG4gMTgxOlx0ICogZm9yIHRoZSBuZXcgYWxsb2NhdGlvbi4gQXQgdGhlIHNhbWUgdGltZSwgd2UgZG8gbm90IHdhbnRcbiAxODI6XHQgKiB0byBkbyBhbnkgbG9ja2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIGFscmVhZHkgaGF2aW5nXG4gMTgzOlx0ICogYW4gYW5vbl92bWEuXG4gMTg0Olx0ICovXG4gMTg1Olx0aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAxODY6XHR7XG4gMTg3Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cdTAwM2V2bV9tbTtcbiAxODg6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEsICphbGxvY2F0ZWQ7XG4gMTg5Olx0XHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YztcbiAxOTA6XHRcbiAxOTE6XHRcdG1tYXBfYXNzZXJ0X2xvY2tlZChtbSk7XG4gMTkyOlx0XHRtaWdodF9zbGVlcCgpO1xuIDE5MzpcdFxuIDE5NDpcdFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XG4gMTk1Olx0XHRpZiAoIWF2YylcbiAxOTY6XHRcdFx0Z290byBvdXRfZW5vbWVtO1xuIDE5NzpcdFxuIDE5ODpcdFx0YW5vbl92bWEgPSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSh2bWEpO1xuIDE5OTpcdFx0YWxsb2NhdGVkID0gTlVMTDtcbiAyMDA6XHRcdGlmICghYW5vbl92bWEpIHtcbiAyMDE6XHRcdFx0YW5vbl92bWEgPSBhbm9uX3ZtYV9hbGxvYygpO1xuIDIwMjpcdFx0XHRpZiAodW5saWtlbHkoIWFub25fdm1hKSlcbiAyMDM6XHRcdFx0XHRnb3RvIG91dF9lbm9tZW1fZnJlZV9hdmM7XG4gMjA0Olx0XHRcdGFub25fdm1hLVx1MDAzZW51bV9jaGlsZHJlbiYjNDM7JiM0Mzs7IC8qIHNlbGYtcGFyZW50IGxpbmsgZm9yIG5ldyByb290ICovXG4gMjA1Olx0XHRcdGFsbG9jYXRlZCA9IGFub25fdm1hO1xuIDIwNjpcdFx0fVxuIDIwNzpcdFxuIDIwODpcdFx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XG4gMjA5Olx0XHQvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi9cbiAyMTA6XHRcdHNwaW5fbG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIDIxMTpcdFx0aWYgKGxpa2VseSghdm1hLVx1MDAzZWFub25fdm1hKSkge1xuIDIxMjpcdFx0XHQvKlxuIDIxMzpcdFx0XHQgKiBNYWtlIGFub25fdm1hIGZpZWxkcyB2aXNpYmxlIGJlZm9yZSBhbm9uX3ZtYSBpcyBwdWJsaXNoZWQuXG4gMjE0Olx0XHRcdCAqIFBhaXJlZCB3aXRoIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLlxuIDIxNTpcdFx0XHQgKi9cbiAyMTY6XHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dm1hLVx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSk7XG4gMjE3Olx0XHRcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xuIDIxODpcdFx0XHRhbm9uX3JtYXBfdHJlZV9pbnNlcnQoYXZjLCBhbm9uX3ZtYSk7XG4gMjE5Olx0XHRcdGFub25fdm1hLVx1MDAzZW51bV9hY3RpdmVfdm1hcyYjNDM7JiM0Mzs7XG4gMjIwOlx0XHRcdGFsbG9jYXRlZCA9IE5VTEw7XG4gMjIxOlx0XHRcdGF2YyA9IE5VTEw7XG4gMjIyOlx0XHR9XG4gMjIzOlx0XHRzcGluX3VubG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIDIyNDpcdFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFub25fdm1hKTtcbiAyMjU6XHRcbiAyMjY6XHRcdGlmICh1bmxpa2VseShhbGxvY2F0ZWQpKVxuIDIyNzpcdFx0XHRwdXRfYW5vbl92bWEoYWxsb2NhdGVkKTtcbiAyMjg6XHRcdGlmICh1bmxpa2VseShhdmMpKVxuIDIyOTpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XG4gMjMwOlx0XG4gMjMxOlx0XHRyZXR1cm4gMDtcbiAyMzI6XHRcbiAyMzM6XHQgb3V0X2Vub21lbV9mcmVlX2F2YzpcbiAyMzQ6XHRcdGFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTtcbiAyMzU6XHQgb3V0X2Vub21lbTpcbiAyMzY6XHRcdHJldHVybiAtRU5PTUVNO1xuIDIzNzpcdH1cbiAyMzg6XHRcbiAyMzk6XHRzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vdm1hLmNgIC0gYHJldXNhYmxlX2Fub25fdm1hYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgemVybyBpbiBvbiBgbW0vdm1hLmNgIGFnYWluLiBJJiMzOTt2ZSBnb3QgYSBodW5jaCwgYW5kIGl0JiMzOTtzIGFyb3VuZCBob3cgd2UgaGFuZGxlIGFub255bW91cyBWTUFzIGFuZCB0aGVpciByZXVzYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgYHJldXNhYmxlX2Fub25fdm1hYCBhc3BlY3QuIFRoZXJlJiMzOTtzIGEgcGFydGljdWxhciBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQsIGFuZCBJIGJlbGlldmUgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGhvbGRzIHRoZSBrZXkgdG8gdGhlIHNvbHV0aW9uLiBJIGtub3cgdGhlcmUgaGF2ZSBiZWVuIHN1YnRsZSBzaGlmdHMgaW4gdGhlIGJlaGF2aW91ciBhcm91bmQgcmVjbGFpbWluZyBhbm9ueW1vdXMgbWVtb3J5IHJlY2VudGx5LCBlc3BlY2lhbGx5IGluIGhpZ2hseSBjb250ZXN0ZWQgbWVtb3J5IHNjZW5hcmlvcywgYW5kIEkgc3VzcGVjdCB0aGVzZSBmdW5jdGlvbiBjYWxscyB3aWxsIGJlIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIGFuZCBzZWUgaWYgbXkgaW50dWl0aW9uIGhvbGRzIGFueSB3YXRlci4gVGhpcyBmdW5jdGlvbiBpbiBwYXJ0aWN1bGFyIGhhcyBiZWVuIHRvdWNoZWQgaW4gc2V2ZXJhbCBwYXRjaCBzZXRzLCBhbmQgSSB3b25kZXIgd2hhdCBhbGwgdGhlIGNodXJuIGlzIGFib3V0LiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBjYWxsIHBhdGggdGhyb3VnaCB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA4MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMDgxOlx0XHRyZXR1cm4gdHJ1ZTtcbjIwODI6XHR9XG4yMDgzOlx0XG4yMDg0Olx0LypcbjIwODU6XHQgKiBEbyBzb21lIGJhc2ljIHNhbml0eSBjaGVja2luZyB0byBzZWUgaWYgd2UgY2FuIHJlLXVzZSB0aGUgYW5vbl92bWFcbjIwODY6XHQgKiBmcm9tICYjMzk7b2xkJiMzOTsuIFRoZSAmIzM5O2EmIzM5Oy8mIzM5O2ImIzM5OyB2bWEmIzM5O3MgYXJlIGluIFZNIG9yZGVyIC0gb25lIG9mIHRoZW0gd2lsbCBiZVxuMjA4NzpcdCAqIHRoZSBzYW1lIGFzICYjMzk7b2xkJiMzOTssIHRoZSBvdGhlciB3aWxsIGJlIHRoZSBuZXcgb25lIHRoYXQgaXMgdHJ5aW5nXG4yMDg4Olx0ICogdG8gc2hhcmUgdGhlIGFub25fdm1hLlxuMjA4OTpcdCAqXG4yMDkwOlx0ICogTk9URSEgVGhpcyBydW5zIHdpdGggbW1hcF9sb2NrIGhlbGQgZm9yIHJlYWRpbmcsIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXRcbjIwOTE6XHQgKiB0aGUgYW5vbl92bWEgb2YgJiMzOTtvbGQmIzM5OyBpcyBjb25jdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc2V0IHVwXG4yMDkyOlx0ICogYnkgYW5vdGhlciBwYWdlIGZhdWx0IHRyeWluZyB0byBtZXJnZSBfdGhhdF8uIEJ1dCB0aGF0JiMzOTtzIG9rOiBpZiBpdFxuMjA5MzpcdCAqIGlzIGJlaW5nIHNldCB1cCwgdGhhdCBhdXRvbWF0aWNhbGx5IG1lYW5zIHRoYXQgaXQgd2lsbCBiZSBhIHNpbmdsZXRvblxuMjA5NDpcdCAqIGFjY2VwdGFibGUgZm9yIG1lcmdpbmcsIHNvIHdlIGNhbiBkbyBhbGwgb2YgdGhpcyBvcHRpbWlzdGljYWxseS4gQnV0XG4yMDk1Olx0ICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLlxuMjA5NjpcdCAqXG4yMDk3Olx0ICogVGhlIFJFQURfT05DRSgpIGVzdGFibGlzaGVzIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBiZXR3ZWVuIGFub25fdm1hIGFuZFxuMjA5ODpcdCAqIGFueSBhY2Nlc3MgdG8gaXRzIGZpZWxkcywgd2hpY2ggcGFpcnMgd2l0aCB0aGUgYXNzaWdubWVudCB0b1xuMjA5OTpcdCAqIHZtYS1cdTAwM2Vhbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS5cbjIxMDA6XHQgKlxuMjEwMTpcdCAqIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgYXMgYW5vbl92bWEmIzM5O3MgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVIHNvXG4yMTAyOlx0ICogYWNjZXNzaW5nIGFuIHVuaW5pdGlhbGlzZWQgYW5vbl92bWEmIzM5O3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXG4yMTAzOlx0ICpcbjIxMDQ6XHQgKiBJT1c6IHRoYXQgdGhlIFwmIzM0O2xpc3RfaXNfc2luZ3VsYXIoKVwmIzM0OyB0ZXN0IG9uIHRoZSBhbm9uX3ZtYV9jaGFpbiBvbmx5XG4yMTA1Olx0ICogbWF0dGVycyBmb3IgdGhlICYjMzk7c3RhYmxlIGFub25fdm1hJiMzOTsgY2FzZSAoaWUgdGhlIHRoaW5nIHdlIHdhbnQgdG8gYXZvaWRcbjIxMDY6XHQgKiBpcyB0byByZXR1cm4gYW4gYW5vbl92bWEgdGhhdCBpcyBcJiMzNDtjb21wbGV4XCYjMzQ7IGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXG4yMTA3Olx0ICogYSBmb3JrKS5cbjIxMDg6XHQgKlxuMjEwOTpcdCAqIFdlIGFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIHR3byB2bWEmIzM5O3MgYXJlIGNvbXBhdGlibGUgKGFkamFjZW50LFxuMjExMDpcdCAqIGFuZCB3aXRoIHRoZSBzYW1lIG1lbW9yeSBwb2xpY2llcykuIFRoYXQmIzM5O3MgYWxsIHN0YWJsZSwgZXZlbiB3aXRoIGp1c3RcbjIxMTE6XHQgKiBhIHJlYWQgbG9jayBvbiB0aGUgbW1hcF9sb2NrLlxuMjExMjpcdCAqL1xuMjExMzpcdHN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLFxuMjExNDpcdFx0XHRcdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSxcbjIxMTU6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmIpXG4yMTE2Olx0e1xuMjExNzpcdFx0aWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHtcbjIxMTg6XHRcdFx0LyogUGFpcmVkIHdpdGggYSBtZW1vcnkgYmFycmllciBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS4gKi9cbjIxMTk6XHRcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtXHUwMDNlYW5vbl92bWEpO1xuMjEyMDpcdFxuMjEyMTpcdFx0XHRpZiAoYW5vbl92bWEgXHUwMDI2XHUwMDI2IGxpc3RfaXNfc2luZ3VsYXIoXHUwMDI2b2xkLVx1MDAzZWFub25fdm1hX2NoYWluKSlcbjIxMjI6XHRcdFx0XHRyZXR1cm4gYW5vbl92bWE7XG4yMTIzOlx0XHR9XG4yMTI0Olx0XHRyZXR1cm4gTlVMTDtcbjIxMjU6XHR9XG4yMTI2Olx0XG4yMTI3Olx0LypcbjIxMjg6XHQgKiBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSBpcyB1c2VkIGJ5IGFub25fdm1hX3ByZXBhcmUsIHRvIGNoZWNrXG4yMTI5Olx0ICogbmVpZ2hib3VyaW5nIHZtYXMgZm9yIGEgc3VpdGFibGUgYW5vbl92bWEsIGJlZm9yZSBpdCBnb2VzIG9mZlxuMjEzMDpcdCAqIHRvIGFsbG9jYXRlIGEgbmV3IGFub25fdm1hLiAgSXQgY2hlY2tzIGJlY2F1c2UgYSByZXBldGl0aXZlXG4yMTMxOlx0ICogc2VxdWVuY2Ugb2YgbXByb3RlY3RzIGFuZCBmYXVsdHMgbWF5IG90aGVyd2lzZSBsZWFkIHRvIGRpc3RpbmN0XG4yMTMyOlx0ICogYW5vbl92bWFzIGJlaW5nIGFsbG9jYXRlZCwgcHJldmVudGluZyB2bWEgbWVyZ2UgaW4gc3Vic2VxdWVudFxuMjEzMzpcdCAqIG1wcm90ZWN0LlxuMjEzNDpcdCAqL1xuMjEzNTpcdHN0cnVjdCBhbm9uX3ZtYSAqZmluZF9tZXJnZWFibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4yMTM2Olx0e1xuMjEzNzpcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IE5VTEw7XG4yMTM4Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsICpuZXh0O1xuMjEzOTpcdFx0Vk1BX0lURVJBVE9SKHZtaSwgdm1hLVx1MDAzZXZtX21tLCB2bWEtXHUwMDNldm1fZW5kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyMgoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiA3NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBSZXF1aXJlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIGNvcmUgY2hhbmdlIGlzIGluIGBtbS9ybWFwLmNgLCB3aGVyZSBhIHBsYWluIHN0b3JlIHRvIGB2bWEtJmd0O2Fub25fdm1hYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZtYS0mZ3Q7YW5vbl92bWEsIGFub25fdm1hKTtgLiBUaGVyZSBhcmUgYWxzbyBzb21lIGNvbW1lbnQgdXBkYXRlcyBpbiBgbW0vdm1hLmNgLCB3aGljaCBpcyBnb29kIHRvIHNlZSwgY2xhcmlmeWluZyB0aGUgbWVtb3J5IGJhcnJpZXIgaW1wbGljYXRpb25zIGFsb25nc2lkZSBgUkVBRF9PTkNFYCBpbiBgcmV1c2FibGVfYW5vbl92bWFgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhZGRyZXNzaW5nIGEgbWVtb3J5IG9yZGVyaW5nIGlzc3VlLiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGxlYWQgdG8gYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYHZtYS0mZ3Q7YW5vbl92bWFgIHBvaW50ZXIgaXMgcHVibGlzaGVkIHRvIG90aGVyIHRocmVhZHMgKmJlZm9yZSogdGhlIGZpZWxkcyB3aXRoaW4gYGFub25fdm1hYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBhIG1lbW9yeSBvcmRlcmluZyBwZXJzcGVjdGl2ZS4gVGhpcyBpcyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8sIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gVXNlLUFmdGVyLUZyZWUgKFVBRikgaXNzdWVzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IG9mIFJDVS1tYW5hZ2VkIFNMQUIgY2FjaGVzLCB3aGljaCB0aGUgY29tbWVudCBjb3JyZWN0bHkgcG9pbnRzIG91dCAoYFNMQUJfVFlQRVNBRkVfQllfUkNVYCkuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcmVxdWlyZSBLTVNBTj8gTGV0JiMzOTtzIGNoZWNrIHRoZSBydWxlcy4gVGhlIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG1lYW5pbmcgbm8gYGNvcHlfdG9fdXNlcmAgcHJvYmxlbXMuIEl0IGFsc28gZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIG1vc3QgaW1wb3J0YW50bHksIGl0IGlzbiYjMzk7dCBLTVNBTi1kZXRlY3RhYmxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhpcyBwYXRjaCAqaXMqIGFib3V0IG1lbW9yeSBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uLCBpdCYjMzk7cyB0cnVlLiBCdXQgdGhlIHBvdGVudGlhbCBidWdzIGFyZSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlcyDigJMgcmFjZXMsIHVzZS1hZnRlci1mcmVlIOKAkyB0aGluZ3MgdGhhdCBzaG91bGQgYmUgcmVhZGlseSBjYXVnaHQgYnkgS0FTQU4sIEtDU0FOLCBvciBMT0NLREVQLiBJdCBpcyBleHBsaWNpdGx5IHN0YXRlZCB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMgYW5kIHNob3VsZCAqb25seSogYmUgdXNlZCBmb3IgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MuIEdpdmVuIHRoYXQgdGhpcyBwYXRjaCBkZWFscyB3aXRoIG1lbW9yeSBvcmRlcmluZywgYnV0ICpub3QqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LgoKVGhlcmVmb3JlLCBteSByZWFzb25pbmcgaXMgdGhpczogVGhlIHBhdGNoIGNvcnJlY3RseSBhZGRyZXNzZXMgYSBtZW1vcnkgb3JkZXJpbmcgcmFjZSBjb25kaXRpb24gd2hlbiBwdWJsaXNoaW5nIGBhbm9uX3ZtYWAgdG8gY29uY3VycmVudCByZWFkZXJzIHRoYXQgY291bGQgbGVhZCB0byBVc2UtQWZ0ZXItRnJlZSBpc3N1ZXMsIGFuZCBlbnN1cmVzIHByb3BlciBpbml0aWFsaXphdGlvbiB1c2luZyBgc21wX3N0b3JlX3JlbGVhc2VgLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgY3JlYXRlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBidWZmZXIgYm91bmRzLCBhbmQgaXQgKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocy4gVGhlIGJ1Z3MgaXQgcG90ZW50aWFsbHkgZml4ZXMgZmFsbCBpbnRvIHRoZSBLQVNBTi9LQ1NBTi9MT0NLREVQIGNhdGVnb3J5LiBTbywgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWxsIHRvb2wgcGFyYW1ldGVycyBhbmQgbWFrZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS9ybWFwLmMgYW5kIG1tL3ZtYS5jIHRvIHVzZSBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKSBpbnN0ZWFkIG9mIGEgcGxhaW4gYXNzaWdubWVudCBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKSwgZW5zdXJpbmcgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyB3aXRoIFJFQURfT05DRSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBvbiBTTEFCX1RZUEVTQUZFX0JZX1JDVSBvYmplY3RzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGxlbmd0aCBtb2RpZmljYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGNvcGllcy9pbmZvbGVha3MuIENvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbW0vcm1hcC5jIGFuZCBtbS92bWEuYyB0byB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dm1hLVx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSkgaW5zdGVhZCBvZiBhIHBsYWluIGFzc2lnbm1lbnQgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCksIGVuc3VyaW5nIHByb3BlciBtZW1vcnkgb3JkZXJpbmcgd2l0aCBSRUFEX09OQ0UgaW4gcmV1c2FibGVfYW5vbl92bWEoKS4gVGhpcyBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgb24gU0xBQl9UWVBFU0FGRV9CWV9SQ1Ugb2JqZWN0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBsZW5ndGggbW9kaWZpY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3BpZXMvaW5mb2xlYWtzLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzQ6NTQuMDUxMzI3NjUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1ODYyNjI1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19hbm9uX3ZtYV9wcmVwYXJlXCIsXG4gICAgXCJmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW0vcm1hcC5jIGFuZCBtbS92bWEuYyB0byB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnZtYS1cXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKSBpbnN0ZWFkIG9mIGEgcGxhaW4gYXNzaWdubWVudCBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKSwgZW5zdXJpbmcgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyB3aXRoIFJFQURfT05DRSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBvbiBTTEFCX1RZUEVTQUZFX0JZX1JDVSBvYmplY3RzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbGVuZ3RoIG1vZGlmaWNhdGlvbnMsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29waWVzL2luZm9sZWFrcy4gQ29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgX19hbm9uX3ZtYV9wcmVwYXJlKCkgaW4gbW0vcm1hcC5jIHRvIHVzZSBzbXBfc3RvcmVfcmVsZWFzZSgpIHdoZW4gcHVibGlzaGluZyB2bWEtXFx1MDAzZWFub25fdm1hLCBwcm9wZXJseSBwYWlyaW5nIHdpdGggbG9ja2xlc3MgUkVBRF9PTkNFKCkgcmVhZHMgYW5kIGFkZHJlc3MgZGVwZW5kZW5jaWVzIGluIHJldXNhYmxlX2Fub25fdm1hKCkgKGNhbGxlZCB2aWEgZmluZF9tZXJnZWFibGVfYW5vbl92bWEoKSkuIEJlY2F1c2UgdGhpcyBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgZnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IGNvbmN1cnJlbmN5IGFub21hbGllcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzQ6NTQuMDUxMzMyOTUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxNTc3OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzg1Y2IyMGNkMzYzNzk5ZWMwYzZkNGExMjU3OWI3ZmJiZTcxNjQ5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE1OjM0OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xcbmluZGV4IGQxODE5ZmQ2OTkzODAuLmYzYjIxYWFhMzRlZTkgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTIwOSw3ICsyMDksMTEgQEAgaW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2bW0tXFx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XFxuIFxcdGlmIChsaWtlbHkoIXZtYS1cXHUwMDNlYW5vbl92bWEpKSB7XFxuLVxcdFxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLlxcbitcXHRcXHQgKiBQYWlyZWQgd2l0aCBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgaW4gcmV1c2FibGVfYW5vbl92bWEoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2bWEtXFx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSk7XFxuIFxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xcbiBcXHRcXHRhbm9uX3JtYXBfdHJlZV9pbnNlcnQoYXZjLCBhbm9uX3ZtYSk7XFxuIFxcdFxcdGFub25fdm1hLVxcdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xcbmluZGV4IDM1ZTdhNjQ4NTVmYWQuLmVjNDEwMTI1MGQ3MWIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hLmNcXG4rKysgYi9tbS92bWEuY1xcbkBAIC0yMDk0LDYgKzIwOTQsMTMgQEAgc3RhdGljIGludCBhbm9uX3ZtYV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpcXG4gICogYWNjZXB0YWJsZSBmb3IgbWVyZ2luZywgc28gd2UgY2FuIGRvIGFsbCBvZiB0aGlzIG9wdGltaXN0aWNhbGx5LiBCdXRcXG4gICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLlxcbiAgKlxcbisgKiBUaGUgUkVBRF9PTkNFKCkgZXN0YWJsaXNoZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gYW5vbl92bWEgYW5kXFxuKyAqIGFueSBhY2Nlc3MgdG8gaXRzIGZpZWxkcywgd2hpY2ggcGFpcnMgd2l0aCB0aGUgYXNzaWdubWVudCB0b1xcbisgKiB2bWEtXFx1MDAzZWFub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxcbisgKlxcbisgKiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGFzIGFub25fdm1hJ3MgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVIHNvXFxuKyAqIGFjY2Vzc2luZyBhbiB1bmluaXRpYWxpc2VkIGFub25fdm1hJ3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXFxuKyAqXFxuICAqIElPVzogdGhhdCB0aGUgXFxcImxpc3RfaXNfc2luZ3VsYXIoKVxcXCIgdGVzdCBvbiB0aGUgYW5vbl92bWFfY2hhaW4gb25seVxcbiAgKiBtYXR0ZXJzIGZvciB0aGUgJ3N0YWJsZSBhbm9uX3ZtYScgY2FzZSAoaWUgdGhlIHRoaW5nIHdlIHdhbnQgdG8gYXZvaWRcXG4gICogaXMgdG8gcmV0dXJuIGFuIGFub25fdm1hIHRoYXQgaXMgXFxcImNvbXBsZXhcXFwiIGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXFxuQEAgLTIxMDgsNiArMjExNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYilcXG4ge1xcbiBcXHRpZiAoYW5vbl92bWFfY29tcGF0aWJsZShhLCBiKSkge1xcbitcXHRcXHQvKiBQYWlyZWQgd2l0aCBhIG1lbW9yeSBiYXJyaWVyIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLiAqL1xcbiBcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlYW5vbl92bWEpO1xcbiBcXG4gXFx0XFx0aWYgKGFub25fdm1hIFxcdTAwMjZcXHUwMDI2IGxpc3RfaXNfc2luZ3VsYXIoXFx1MDAyNm9sZC1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNDo1NS43MzM4ODM3NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4NDQyODU3NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYW5vbl92bWFfcHJlcGFyZVwiLFxuICAgIFwiZmluZF9tZXJnZWFibGVfYW5vbl92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX2Fub25fdm1hX3ByZXBhcmUoKSBpbiBtbS9ybWFwLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgd2hlbiBwdWJsaXNoaW5nIHZtYS1cXHUwMDNlYW5vbl92bWEsIHByb3Blcmx5IHBhaXJpbmcgd2l0aCBsb2NrbGVzcyBSRUFEX09OQ0UoKSByZWFkcyBhbmQgYWRkcmVzcyBkZXBlbmRlbmNpZXMgaW4gcmV1c2FibGVfYW5vbl92bWEoKSAoY2FsbGVkIHZpYSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSgpKS4gQmVjYXVzZSB0aGlzIGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBmdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgY29uY3VycmVuY3kgYW5vbWFsaWVzIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4NWNiMjBjZDM2Mzc5OWVjMGM2ZDRhMTI1NzliN2ZiYmU3MTY0OWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE1OjM0OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCBkMTgxOWZkNjk5MzgwLi5mM2IyMWFhYTM0ZWU5IDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC0yMDksNyArMjA5LDExIEBAIGludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHQvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIFx0aWYgKGxpa2VseSghdm1hLVx1MDAzZWFub25fdm1hKSkge1xuLVx0XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbitcdFx0LypcbitcdFx0ICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLlxuK1x0XHQgKiBQYWlyZWQgd2l0aCBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgaW4gcmV1c2FibGVfYW5vbl92bWEoKS5cbitcdFx0ICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpO1xuIFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbiBcdFx0YW5vbl9ybWFwX3RyZWVfaW5zZXJ0KGF2YywgYW5vbl92bWEpO1xuIFx0XHRhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcbmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jXG5pbmRleCAzNWU3YTY0ODU1ZmFkLi5lYzQxMDEyNTBkNzFiIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbisrKyBiL21tL3ZtYS5jXG5AQCAtMjA5NCw2ICsyMDk0LDEzIEBAIHN0YXRpYyBpbnQgYW5vbl92bWFfY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqXG4gICogYWNjZXB0YWJsZSBmb3IgbWVyZ2luZywgc28gd2UgY2FuIGRvIGFsbCBvZiB0aGlzIG9wdGltaXN0aWNhbGx5LiBCdXRcbiAgKiB3ZSBkbyB0aGF0IFJFQURfT05DRSgpIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIG5ldmVyIHJlLWxvYWQgdGhlIHBvaW50ZXIuXG4gICpcbisgKiBUaGUgUkVBRF9PTkNFKCkgZXN0YWJsaXNoZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gYW5vbl92bWEgYW5kXG4rICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvXG4rICogdm1hLVx1MDAzZWFub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxuKyAqXG4rICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhcyBhbm9uX3ZtYSdzIGFyZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSBzb1xuKyAqIGFjY2Vzc2luZyBhbiB1bmluaXRpYWxpc2VkIGFub25fdm1hJ3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXG4rICpcbiAgKiBJT1c6IHRoYXQgdGhlIFwibGlzdF9pc19zaW5ndWxhcigpXCIgdGVzdCBvbiB0aGUgYW5vbl92bWFfY2hhaW4gb25seVxuICAqIG1hdHRlcnMgZm9yIHRoZSAnc3RhYmxlIGFub25fdm1hJyBjYXNlIChpZSB0aGUgdGhpbmcgd2Ugd2FudCB0byBhdm9pZFxuICAqIGlzIHRvIHJldHVybiBhbiBhbm9uX3ZtYSB0aGF0IGlzIFwiY29tcGxleFwiIGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXG5AQCAtMjEwOCw2ICsyMTE1LDcgQEAgc3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcmV1c2FibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpiKVxuIHtcbiBcdGlmIChhbm9uX3ZtYV9jb21wYXRpYmxlKGEsIGIpKSB7XG4rXHRcdC8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovXG4gXHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWFub25fdm1hKTtcbiBcbiBcdFx0aWYgKGFub25fdm1hIFx1MDAyNlx1MDAyNiBsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNm9sZC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNDo1NS43MzM4ODYwODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTkyNjcyMjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gYG1tL3JtYXAuY2AgYW5kIGBtbS92bWEuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgY2VudHJhbCB0byB0aGUgcmV2ZXJzZSBtYXBwaW5nIGFuZCB2aXJ0dWFsIG1lbW9yeSBhcmVhIG1hbmFnZW1lbnQgcmVzcGVjdGl2ZWx5LlxuXG5TcGVjaWZpY2FsbHksIHRoZSBjb3JlIGNoYW5nZSBpbiBgbW0vcm1hcC5jYCBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYSBzaW1wbGUgYXNzaWdubWVudCAoYHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO2ApIHdpdGggYHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgY29uY2Vybi4gUmVwbGFjaW5nIGEgZGlyZWN0IGFzc2lnbm1lbnQgd2l0aCBgc21wX3N0b3JlX3JlbGVhc2VgIHN1Z2dlc3RzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGEgc2hhcmVkIGRhdGEgc3RydWN0dXJlIGFuZCBtZW1vcnkgb3JkZXJpbmcgaXMgY3J1Y2lhbC4gVGhlIG9yaWdpbmFsIGFzc2lnbm1lbnQgd2FzIGxpa2VseSBzdXNjZXB0aWJsZSB0byBhIHJhY2UgY29uZGl0aW9uIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktQ1BVIGVudmlyb25tZW50LCBhbmQgdGhpcyBwYXRjaCBhaW1zIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBtZW1vcnkgYmFycmllci4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgcm1hcC5jYCBtdWNoIGJldHRlci5cblxuVGhlIGNoYW5nZSBpbiBgbW0vdm1hLmNgIGlzIGp1c3QgdGhlIGFkZGl0aW9uIG9mIGNvbW1lbnRzIGFyb3VuZCBgcmV1c2FibGVfYW5vbl92bWFgLCB3aGljaCBzdWdnZXN0cyBpdOKAmXMgbm90IG1vZGlmeWluZyB0aGUgc3RydWN0dXJlLCBidXQgcmF0aGVyIGFkZGluZyBkb2N1bWVudGF0aW9uIG9yIGNsYXJpZmljYXRpb24uIFN0aWxsIGltcG9ydGFudCwgYnV0IGxlc3MgaW1tZWRpYXRlbHkgaW1wYWN0ZnVsLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwYXRjaC4gSeKAmW0gZ29pbmcgdG8gdXNlIG15IHByZWZlcnJlZCB0b29scywgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgdG8gcXVpY2tseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyByYWNlIGNvbmRpdGlvbiB3YXMgaW50cm9kdWNlZCBhbmQgd2hhdCBwb3RlbnRpYWwgaXNzdWVzIHdlcmUgYWRkcmVzc2VkIGJ5IGVtcGxveWluZyBgc21wX3N0b3JlX3JlbGVhc2VgLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBhZmZlY3RzIHRoZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBob3cgdGhlIGFub255bW91cyB2bWFzIGFyZSBiZWluZyBoYW5kbGVkLiBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYGFub25fdm1hYCBhbmQgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcyB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzLiBUaGlzIGlzIHRoZSBvbmx5IHdheSBJIGNhbiBlbnN1cmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIGFuZCB0aGF0IGl0IHdpbGwgaGF2ZSBubyBuZWdhdGl2ZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNTowMi4zMjY1NjE0MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzA1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcm1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NTpcXHRcXHRpZiAoIWF2YylcXG4gMTk2OlxcdFxcdFxcdGdvdG8gb3V0X2Vub21lbTtcXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0YW5vbl92bWEgPSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSh2bWEpO1xcbiAxOTk6XFx0XFx0YWxsb2NhdGVkID0gTlVMTDtcXG4gMjAwOlxcdFxcdGlmICghYW5vbl92bWEpIHtcXG4gMjAxOlxcdFxcdFxcdGFub25fdm1hID0gYW5vbl92bWFfYWxsb2MoKTtcXG4gMjAyOlxcdFxcdFxcdGlmICh1bmxpa2VseSghYW5vbl92bWEpKVxcbiAyMDM6XFx0XFx0XFx0XFx0Z290byBvdXRfZW5vbWVtX2ZyZWVfYXZjO1xcbiAyMDQ6XFx0XFx0XFx0YW5vbl92bWEtXFx1MDAzZW51bV9jaGlsZHJlbisrOyAvKiBzZWxmLXBhcmVudCBsaW5rIGZvciBuZXcgcm9vdCAqL1xcbiAyMDU6XFx0XFx0XFx0YWxsb2NhdGVkID0gYW5vbl92bWE7XFxuIDIwNjpcXHRcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbiAyMDk6XFx0XFx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXFxuIDIxMDpcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbiAyMTE6XFx0XFx0aWYgKGxpa2VseSghdm1hLVxcdTAwM2Vhbm9uX3ZtYSkpIHtcXG4gMjEyOlxcdFxcdFxcdC8qXFxuIDIxMzpcXHRcXHRcXHQgKiBNYWtlIGFub25fdm1hIGZpZWxkcyB2aXNpYmxlIGJlZm9yZSBhbm9uX3ZtYSBpcyBwdWJsaXNoZWQuXFxuIDIxNDpcXHRcXHRcXHQgKiBQYWlyZWQgd2l0aCBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgaW4gcmV1c2FibGVfYW5vbl92bWEoKS5cXG4gMjE1OlxcdFxcdFxcdCAqL1xcbiAyMTY6XFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnZtYS1cXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKTtcXG4gMjE3OlxcdFxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xcbiAyMTg6XFx0XFx0XFx0YW5vbl9ybWFwX3RyZWVfaW5zZXJ0KGF2YywgYW5vbl92bWEpO1xcbiAyMTk6XFx0XFx0XFx0YW5vbl92bWEtXFx1MDAzZW51bV9hY3RpdmVfdm1hcysrO1xcbiAyMjA6XFx0XFx0XFx0YWxsb2NhdGVkID0gTlVMTDtcXG4gMjIxOlxcdFxcdFxcdGF2YyA9IE5VTEw7XFxuIDIyMjpcXHRcXHR9XFxuIDIyMzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bW0tXFx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XFxuIDIyNDpcXHRcXHRhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYW5vbl92bWEpO1xcbiAyMjU6XFx0XFxuIDIyNjpcXHRcXHRpZiAodW5saWtlbHkoYWxsb2NhdGVkKSlcXG4gMjI3OlxcdFxcdFxcdHB1dF9hbm9uX3ZtYShhbGxvY2F0ZWQpO1xcbiAyMjg6XFx0XFx0aWYgKHVubGlrZWx5KGF2YykpXFxuIDIyOTpcXHRcXHRcXHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdHJldHVybiAwO1xcbiAyMzI6XFx0XFxuIDIzMzpcXHQgb3V0X2Vub21lbV9mcmVlX2F2YzpcXG4gMjM0OlxcdFxcdGFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTtcXG4gMjM1OlxcdCBvdXRfZW5vbWVtOlxcbiAyMzY6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDIzNzpcXHR9XFxuIDIzODpcXHRcXG4gMjM5OlxcdHN0YXRpYyB2b2lkIGNoZWNrX2Fub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxcbiAyNDA6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbiAyNDE6XFx0XFx0XFx0XFx0XFx0IGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXFxuIDI0MjpcXHR7XFxuIDI0MzpcXHRcXHQvKiBUaGUgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuICovXFxuIDI0NDpcXHRcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVxcdTAwM2V2bV9tbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE1OjM1OjAyLjMyNjg5NDU1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTcwOTI0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQW5vbnltb3VzIFZNQXMgZm9yIFJldXNhYmlsaXR5KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcywgYW5kIGJhc2VkIG9uIHdoYXQgSSd2ZSBzZWVuIHNvIGZhciwgSSB0aGluayBpdCdzIHRpbWUgdG8gZGlnIGludG8gYG1tL3ZtYS5jYCBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgcmV1c2FibGVfYW5vbl92bWFgIGFzcGVjdC4gVGhlcmUncyBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IHRoZSBwcm9ibGVtIG1pZ2h0IGJlIGx1cmtpbmcgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgYW5vbnltb3VzIFZpcnR1YWwgTWVtb3J5IEFyZWFzIChWTUFzKSBhbmQgdGhlaXIgcmV1c2FiaWxpdHkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9ucyB0aGVyZSBhbmQgc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgSSd2ZSBtaXNzZWQsIG9yIGFueSBzdWJ0bGUgYmVoYXZpb3IgdGhhdCdzIGNvbnRyaWJ1dGluZyB0byB0aGlzIGJ1Zy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGluc2lnaHRzIEkgY2FuIGdsZWFuIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODE0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNTowNC4zODM5ODk2NjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA5MDpcXHQgKiBOT1RFISBUaGlzIHJ1bnMgd2l0aCBtbWFwX2xvY2sgaGVsZCBmb3IgcmVhZGluZywgc28gaXQgaXMgcG9zc2libGUgdGhhdFxcbjIwOTE6XFx0ICogdGhlIGFub25fdm1hIG9mICdvbGQnIGlzIGNvbmN1cnJlbnRseSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzZXQgdXBcXG4yMDkyOlxcdCAqIGJ5IGFub3RoZXIgcGFnZSBmYXVsdCB0cnlpbmcgdG8gbWVyZ2UgX3RoYXRfLiBCdXQgdGhhdCdzIG9rOiBpZiBpdFxcbjIwOTM6XFx0ICogaXMgYmVpbmcgc2V0IHVwLCB0aGF0IGF1dG9tYXRpY2FsbHkgbWVhbnMgdGhhdCBpdCB3aWxsIGJlIGEgc2luZ2xldG9uXFxuMjA5NDpcXHQgKiBhY2NlcHRhYmxlIGZvciBtZXJnaW5nLCBzbyB3ZSBjYW4gZG8gYWxsIG9mIHRoaXMgb3B0aW1pc3RpY2FsbHkuIEJ1dFxcbjIwOTU6XFx0ICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLlxcbjIwOTY6XFx0ICpcXG4yMDk3OlxcdCAqIFRoZSBSRUFEX09OQ0UoKSBlc3RhYmxpc2hlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgYmV0d2VlbiBhbm9uX3ZtYSBhbmRcXG4yMDk4OlxcdCAqIGFueSBhY2Nlc3MgdG8gaXRzIGZpZWxkcywgd2hpY2ggcGFpcnMgd2l0aCB0aGUgYXNzaWdubWVudCB0b1xcbjIwOTk6XFx0ICogdm1hLVxcdTAwM2Vhbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS5cXG4yMTAwOlxcdCAqXFxuMjEwMTpcXHQgKiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGFzIGFub25fdm1hJ3MgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVIHNvXFxuMjEwMjpcXHQgKiBhY2Nlc3NpbmcgYW4gdW5pbml0aWFsaXNlZCBhbm9uX3ZtYSdzIGZpZWxkcyBtYXkgcmVzdWx0IGluIGEgVUFGLlxcbjIxMDM6XFx0ICpcXG4yMTA0OlxcdCAqIElPVzogdGhhdCB0aGUgXFxcImxpc3RfaXNfc2luZ3VsYXIoKVxcXCIgdGVzdCBvbiB0aGUgYW5vbl92bWFfY2hhaW4gb25seVxcbjIxMDU6XFx0ICogbWF0dGVycyBmb3IgdGhlICdzdGFibGUgYW5vbl92bWEnIGNhc2UgKGllIHRoZSB0aGluZyB3ZSB3YW50IHRvIGF2b2lkXFxuMjEwNjpcXHQgKiBpcyB0byByZXR1cm4gYW4gYW5vbl92bWEgdGhhdCBpcyBcXFwiY29tcGxleFxcXCIgZHVlIHRvIGhhdmluZyBnb25lIHRocm91Z2hcXG4yMTA3OlxcdCAqIGEgZm9yaykuXFxuMjEwODpcXHQgKlxcbjIxMDk6XFx0ICogV2UgYWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUgdHdvIHZtYSdzIGFyZSBjb21wYXRpYmxlIChhZGphY2VudCxcXG4yMTEwOlxcdCAqIGFuZCB3aXRoIHRoZSBzYW1lIG1lbW9yeSBwb2xpY2llcykuIFRoYXQncyBhbGwgc3RhYmxlLCBldmVuIHdpdGgganVzdFxcbjIxMTE6XFx0ICogYSByZWFkIGxvY2sgb24gdGhlIG1tYXBfbG9jay5cXG4yMTEyOlxcdCAqL1xcbjIxMTM6XFx0c3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcmV1c2FibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQsXFxuMjExNDpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSxcXG4yMTE1OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpiKVxcbjIxMTY6XFx0e1xcbjIxMTc6XFx0XFx0aWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHtcXG4yMTE4OlxcdFxcdFxcdC8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovXFxuMjExOTpcXHRcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlYW5vbl92bWEpO1xcbjIxMjA6XFx0XFxuMjEyMTpcXHRcXHRcXHRpZiAoYW5vbl92bWEgXFx1MDAyNlxcdTAwMjYgbGlzdF9pc19zaW5ndWxhcihcXHUwMDI2b2xkLVxcdTAwM2Vhbm9uX3ZtYV9jaGFpbikpXFxuMjEyMjpcXHRcXHRcXHRcXHRyZXR1cm4gYW5vbl92bWE7XFxuMjEyMzpcXHRcXHR9XFxuMjEyNDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMTI1OlxcdH1cXG4yMTI2OlxcdFxcbjIxMjc6XFx0LypcXG4yMTI4OlxcdCAqIGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hIGlzIHVzZWQgYnkgYW5vbl92bWFfcHJlcGFyZSwgdG8gY2hlY2tcXG4yMTI5OlxcdCAqIG5laWdoYm91cmluZyB2bWFzIGZvciBhIHN1aXRhYmxlIGFub25fdm1hLCBiZWZvcmUgaXQgZ29lcyBvZmZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6MDQuMzg0MTU2MzgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI4MzY1MTc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uOiBBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSBhbmFseXplIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbWAgKG1lbW9yeSBtYW5hZ2VtZW50KSBzdWJzeXN0ZW0uIFRoZSBrZXkgY2hhbmdlIGlzIGluIGBtbS9ybWFwLmNgOiB0aGV5J3ZlIHN3aXRjaGVkIGEgc2ltcGxlIGFzc2lnbm1lbnQgKGB2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtgKSB0byBhIHJlbGVhc2Ugc3RvcmUgKGBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKTtgKSB3aXRoaW4gdGhlIGBfX2Fub25fdm1hX3ByZXBhcmUoKWAgZnVuY3Rpb24uIFRoZXJlJ3MgYWxzbyBzb21lIHN1cHBvcnRpbmcgY29tbWVudCBhZGRlZCBpbiBgbW0vdm1hLmNgIGFib3V0IG1lbW9yeSBvcmRlcmluZywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgcGFpcmluZyBvZiB0aGUgcmVsZWFzZSBzdG9yZSB3aXRoIGBSRUFEX09OQ0VgIGluIGByZXVzYWJsZV9hbm9uX3ZtYSgpYC5cblxuVGhlIHF1ZXN0aW9uIG5vdzogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNyaXRlcmlhLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogYW55dGhpbmcgdG91Y2hpbmcgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL2ApIGlzIGEgZ28uIEFsc28sIEkgc2hvdWxkbid0IGJsaW5kbHkgdHJ1c3QgY2xhaW1zIG9mIFwibm8gZnVuY3Rpb25hbCBjaGFuZ2VcIiBvciBcInJlZmFjdG9yaW5nLlwiXG5cbldlbGwsIHRoaXMgZGVmaW5pdGVseSBtb2RpZmllcyBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIGBtbS9gIGRpcmVjdG9yeSwgYW5kIGl0J3MgYSBjaGFuZ2UgdG8gdGhlIHN0b3JlIG9wZXJhdGlvbiDigJMgbWFraW5nIGl0IGEgcmVsZWFzZSBzdG9yZSBub3cuIFNvLCB5ZXMsIGl0J3MgbW9kaWZ5aW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEJ1dCBpcyBpdCAqYWN0dWFsbHkqIHJlYWNoYWJsZT9cblxuT2theSwgc28gYF9fYW5vbl92bWFfcHJlcGFyZWAgZ2V0cyBjYWxsZWQgd2hlbiBhbiBhbm9ueW1vdXMgVk1BIGlzIHByZXBhcmVkLiBUaGF0IHNlZW1zIHByZXR0eSBnZW5lcmFsLCByaWdodD8gUGFnZSBmYXVsdHMsIGBtcHJvdGVjdGAsIGBtYWR2aXNlYC4uLiB0aGVzZSBhcmUgYWxsIGNvbW1vbiBvcGVyYXRpb25zLiBTbywgaXQncyBwcmV0dHkgdWJpcXVpdG91cyFcblxuV2FpdCwgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHdhcm4gYWdhaW5zdCBsaXN0aW5nICp1YmlxdWl0b3VzKiBmdW5jdGlvbnMsIGJlY2F1c2UgaXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQuIFwiQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTLlwiIFRoZXkgd2FudCBtZSB0byBcIlRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UU1wiLiBTbywgSSBuZWVkIHRvIGNoZWNrIHdoYXQgc3BlY2lmaWNhbGx5IGNhbGxzIGBfX2Fub25fdm1hX3ByZXBhcmVgLCB0byBkZWNpZGUgaWYgdGhpcyBpcyB0YXJnZXRpbmcgYSBzcGVjaWZpYyBmZWF0dXJlL2xvZ2ljIGNoYW5nZSwgb3Igd2hldGhlciBpdCdzIHRvbyBnZW5lcmljIHRvIGJvdGhlci4gTGV0IG1lIHNlZSB3aGF0IGZ1bmN0aW9ucyBjYWxsIGBfX2Fub25fdm1hX3ByZXBhcmVgLCBgYW5vbl92bWFfcHJlcGFyZWAsIG9yIHVzZSBgcmV1c2FibGVfYW5vbl92bWFgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBzcGVjaWZpYyBsb2dpYyBiZWluZyBjaGFuZ2VkIG9yIGlmIGl0IGlzIGp1c3QgYSBzeW5jaHJvbml6YXRpb24gb3B0aW1pemF0aW9uIGluIGEgdmVyeSBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODMwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6MTEuNjY3ODA5ODU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzQ1NzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmMtMTExLSAqICAtXFx1MDAzZWFub25fdm1hLmxvY2tcXG5tbS9maWxlbWFwLmM6MTEyOiAqICAgIC1cXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXFx0KGFub25fdm1hX3ByZXBhcmUgYW5kIHZhcmlvdXMpXFxubW0vZmlsZW1hcC5jLTExMy0gKlxcbi0tXFxubW0vaW50ZXJuYWwuaD0zMzU9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSk7XFxubW0vaW50ZXJuYWwuaDozMzY6aW50ICBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbm1tL2ludGVybmFsLmgtMzM3LXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxubW0vaW50ZXJuYWwuaC0zMzgtXFxubW0vaW50ZXJuYWwuaDozMzk6c3RhdGljIGlubGluZSBpbnQgYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9pbnRlcm5hbC5oLTM0MC17XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTM0My1cXG5tbS9pbnRlcm5hbC5oOjM0NDpcXHRyZXR1cm4gX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSk7XFxubW0vaW50ZXJuYWwuaC0zNDUtfVxcbi0tXFxubW0vbWFkdmlzZS5jPTExMjQ9c3RhdGljIGxvbmcgbWFkdmlzZV9ndWFyZF9pbnN0YWxsKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTExNTgtXFxubW0vbWFkdmlzZS5jOjExNTk6XFx0XFx0ZXJyID0gYW5vbl92bWFfcHJlcGFyZSh2bWEpO1xcbm1tL21hZHZpc2UuYy0xMTYwLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTU3MT1zdGF0aWMgYm9vbCBwcm9jZXNzX21hZHZpc2VfcmVtb3RlX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTgzLVxcbm1tL21hZHZpc2UuYzoxNTg0Oi8qIERvZXMgdGhpcyBvcGVyYXRpb24gaW52b2tlIGFub25fdm1hX3ByZXBhcmUoKT8gKi9cXG5tbS9tYWR2aXNlLmMtMTU4NS1zdGF0aWMgYm9vbCBwcmVwYXJlc19hbm9uX3ZtYShpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTU5OT1zdGF0aWMgYm9vbCBpc192bWFfbG9ja19zdWZmaWNpZW50KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE2MTEtXFx0LypcXG5tbS9tYWR2aXNlLmM6MTYxMjpcXHQgKiBhbm9uX3ZtYV9wcmVwYXJlKCkgZXhwbGljaXRseSByZXF1aXJlcyBhbiBtbWFwIGxvY2sgZm9yXFxubW0vbWFkdmlzZS5jLTE2MTMtXFx0ICogc2VyaWFsaXNhdGlvbiwgc28gd2UgY2Fubm90IHVzZSBhIFZNQSBsb2NrIGluIHRoaXMgY2FzZS5cXG4tLVxcbm1tL21lbW9yeS5jPTM5MjU9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9jYW5fY2FsbF9mYXVsdChjb25zdCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTM5MzktICogV2hlbiBwcmVwYXJpbmcgdG8gaW5zZXJ0IGFuIGFub255bW91cyBwYWdlIGludG8gYSBWTUEgZnJvbSBhXFxubW0vbWVtb3J5LmM6Mzk0MDogKiBmYXVsdCBoYW5kbGVyLCBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYW5vbl92bWFfcHJlcGFyZSgpLlxcbm1tL21lbW9yeS5jLTM5NDEtICogSWYgdGhpcyB2bWEgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGFuIGFzc29jaWF0ZWQgYW5vbl92bWEgYW5kIHdlIGFyZVxcbm1tL21lbW9yeS5jLTM5NDItICogb25seSBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgdGhlIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlXFxubW0vbWVtb3J5LmM6Mzk0MzogKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXFxubW0vbWVtb3J5LmMtMzk0NC0gKiBkZXRlcm1pbmUgaWYgdGhpcyBWTUEgY2FuIHNoYXJlIGl0cyBhbm9uX3ZtYSwgYW5kIHRoYXQncyBub3Qgc2FmZSB0b1xcbi0tXFxubW0vbWVtb3J5LmM9Mzk1MD12bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTM5NjAtXFx0fVxcbm1tL21lbW9yeS5jOjM5NjE6XFx0aWYgKF9fYW5vbl92bWFfcHJlcGFyZSh2bWEpKVxcbm1tL21lbW9yeS5jLTM5NjItXFx0XFx0cmV0ID0gVk1fRkFVTFRfT09NO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz03OTg9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTgxOS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjgyMDpcXHRyZXQgPSBhbm9uX3ZtYV9wcmVwYXJlKHZtYSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy04MjEtXFx0aWYgKHJldClcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTc2PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTAyOC1cXHRcXHRnb3RvIGFib3J0O1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTAyOTpcXHRpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2bWEpKSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEwMzAtXFx0XFx0Z290byBhYm9ydDtcXG4tLVxcbm1tL3JtYXAuYz0xNTA9c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fYXNzaWduKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTE1OS0vKipcXG5tbS9ybWFwLmM6MTYwOiAqIF9fYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb25cXG5tbS9ybWFwLmMtMTYxLSAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uXFxuLS1cXG5tbS9ybWFwLmMtMTY3LSAqIFRoZSBjb21tb24gY2FzZSB3aWxsIGJlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIG9uZSwgd2hpY2hcXG5tbS9ybWFwLmM6MTY4OiAqIGlzIGhhbmRsZWQgaW5saW5lIGJ5IGFub25fdm1hX3ByZXBhcmUoKS4gQnV0IGlmXFxubW0vcm1hcC5jLTE2OS0gKiBub3Qgd2UgZWl0aGVyIG5lZWQgdG8gZmluZCBhbiBhZGphY2VudCBtYXBwaW5nIHRoYXQgd2VcXG4tLVxcbm1tL3JtYXAuYy0xODQtICovXFxubW0vcm1hcC5jOjE4NTppbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL3JtYXAuYy0xODYte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xMDk9c3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xMTgtXFx0ZWxzZSBpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3VzZXJmYXVsdGZkLmM6MTE5OlxcdFxcdCB1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKVxcbm1tL3VzZXJmYXVsdGZkLmMtMTIwLVxcdFxcdHZtYSA9IEVSUl9QVFIoLUVOT01FTSk7XFxuLS1cXG5tbS92bWEuYz0yMDU0PXN0YXRpYyBpbnQgYW5vbl92bWFfY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYilcXG4tLVxcbm1tL3ZtYS5jLTIwOTgtICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvXFxubW0vdm1hLmM6MjA5OTogKiB2bWEtXFx1MDAzZWFub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxcbm1tL3ZtYS5jLTIxMDAtICpcXG4tLVxcbm1tL3ZtYS5jPTIxMTM9c3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcmV1c2FibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQsXFxuLS1cXG5tbS92bWEuYy0yMTE3LVxcdGlmIChhbm9uX3ZtYV9jb21wYXRpYmxlKGEsIGIpKSB7XFxubW0vdm1hLmM6MjExODpcXHRcXHQvKiBQYWlyZWQgd2l0aCBhIG1lbW9yeSBiYXJyaWVyIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLiAqL1xcbm1tL3ZtYS5jLTIxMTktXFx0XFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtXFx1MDAzZWFub25fdm1hKTtcXG4tLVxcbm1tL3ZtYS5jLTIxMjctLypcXG5tbS92bWEuYzoyMTI4OiAqIGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hIGlzIHVzZWQgYnkgYW5vbl92bWFfcHJlcGFyZSwgdG8gY2hlY2tcXG5tbS92bWEuYy0yMTI5LSAqIG5laWdoYm91cmluZyB2bWFzIGZvciBhIHN1aXRhYmxlIGFub25fdm1hLCBiZWZvcmUgaXQgZ29lcyBvZmZcXG4tLVxcbm1tL3ZtYS5jPTMyMzA9aW50IGV4cGFuZF91cHdhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5tbS92bWEuYy0zMjcwLVxcdC8qIFdlIG11c3QgbWFrZSBzdXJlIHRoZSBhbm9uX3ZtYSBpcyBhbGxvY2F0ZWQuICovXFxubW0vdm1hLmM6MzI3MTpcXHRpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2bWEpKSkge1xcbm1tL3ZtYS5jLTMyNzItXFx0XFx0dm1hX2l0ZXJfZnJlZShcXHUwMDI2dm1pKTtcXG4tLVxcbm1tL3ZtYS5jPTMzMTU9aW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbm1tL3ZtYS5jLTMzNDgtXFx0LyogV2UgbXVzdCBtYWtlIHN1cmUgdGhlIGFub25fdm1hIGlzIGFsbG9jYXRlZC4gKi9cXG5tbS92bWEuYzozMzQ5OlxcdGlmICh1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKSB7XFxubW0vdm1hLmMtMzM1MC1cXHRcXHR2bWFfaXRlcl9mcmVlKFxcdTAwMjZ2bWkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNToxMS44MzEyNzQxMzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk2NTc3MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBbm9ueW1vdXMgVmlydHVhbCBNZW1vcnkgQXJlYSBNZXJnaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYW5kIGl0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uIGhhbmdpbmcgb3V0IGluIGBtbS9ybWFwLmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZSBoZXJlLiBMZXQncyBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIHBsYXlpbmcgaW4gdGhpcyBzYW5kYm94LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGFuZCBgcmV1c2FibGVfYW5vbl92bWFgLiBUaG9zZSBzZWVtICpleHRyZW1lbHkqIHJlbGV2YW50LCBhbmQgdGhleSdyZSBhcHBhcmVudGx5IGluIGBtbS92bWEuY2AuIFRpbWUgdG8gZGlnIGludG8gYG1tL3ZtYS5jYCBhbmQgZ2V0IGEgZmVlbCBmb3IgaG93IGBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYWAgaXMgYWN0dWFsbHkgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIHdob2xlIG1lcmdpbmcgcHJvY2VzcyBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE1OjM1OjEzLjkyNzg1MzUxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEyMDpcXHRcXG4yMTIxOlxcdFxcdFxcdGlmIChhbm9uX3ZtYSBcXHUwMDI2XFx1MDAyNiBsaXN0X2lzX3Npbmd1bGFyKFxcdTAwMjZvbGQtXFx1MDAzZWFub25fdm1hX2NoYWluKSlcXG4yMTIyOlxcdFxcdFxcdFxcdHJldHVybiBhbm9uX3ZtYTtcXG4yMTIzOlxcdFxcdH1cXG4yMTI0OlxcdFxcdHJldHVybiBOVUxMO1xcbjIxMjU6XFx0fVxcbjIxMjY6XFx0XFxuMjEyNzpcXHQvKlxcbjIxMjg6XFx0ICogZmluZF9tZXJnZWFibGVfYW5vbl92bWEgaXMgdXNlZCBieSBhbm9uX3ZtYV9wcmVwYXJlLCB0byBjaGVja1xcbjIxMjk6XFx0ICogbmVpZ2hib3VyaW5nIHZtYXMgZm9yIGEgc3VpdGFibGUgYW5vbl92bWEsIGJlZm9yZSBpdCBnb2VzIG9mZlxcbjIxMzA6XFx0ICogdG8gYWxsb2NhdGUgYSBuZXcgYW5vbl92bWEuICBJdCBjaGVja3MgYmVjYXVzZSBhIHJlcGV0aXRpdmVcXG4yMTMxOlxcdCAqIHNlcXVlbmNlIG9mIG1wcm90ZWN0cyBhbmQgZmF1bHRzIG1heSBvdGhlcndpc2UgbGVhZCB0byBkaXN0aW5jdFxcbjIxMzI6XFx0ICogYW5vbl92bWFzIGJlaW5nIGFsbG9jYXRlZCwgcHJldmVudGluZyB2bWEgbWVyZ2UgaW4gc3Vic2VxdWVudFxcbjIxMzM6XFx0ICogbXByb3RlY3QuXFxuMjEzNDpcXHQgKi9cXG4yMTM1OlxcdHN0cnVjdCBhbm9uX3ZtYSAqZmluZF9tZXJnZWFibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuMjEzNjpcXHR7XFxuMjEzNzpcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gTlVMTDtcXG4yMTM4OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgKm5leHQ7XFxuMjEzOTpcXHRcXHRWTUFfSVRFUkFUT1Iodm1pLCB2bWEtXFx1MDAzZXZtX21tLCB2bWEtXFx1MDAzZXZtX2VuZCk7XFxuMjE0MDpcXHRcXG4yMTQxOlxcdFxcdC8qIFRyeSBuZXh0IGZpcnN0LiAqL1xcbjIxNDI6XFx0XFx0bmV4dCA9IHZtYV9pdGVyX2xvYWQoXFx1MDAyNnZtaSk7XFxuMjE0MzpcXHRcXHRpZiAobmV4dCkge1xcbjIxNDQ6XFx0XFx0XFx0YW5vbl92bWEgPSByZXVzYWJsZV9hbm9uX3ZtYShuZXh0LCB2bWEsIG5leHQpO1xcbjIxNDU6XFx0XFx0XFx0aWYgKGFub25fdm1hKVxcbjIxNDY6XFx0XFx0XFx0XFx0cmV0dXJuIGFub25fdm1hO1xcbjIxNDc6XFx0XFx0fVxcbjIxNDg6XFx0XFxuMjE0OTpcXHRcXHRwcmV2ID0gdm1hX3ByZXYoXFx1MDAyNnZtaSk7XFxuMjE1MDpcXHRcXHRWTV9CVUdfT05fVk1BKHByZXYgIT0gdm1hLCB2bWEpO1xcbjIxNTE6XFx0XFx0cHJldiA9IHZtYV9wcmV2KFxcdTAwMjZ2bWkpO1xcbjIxNTI6XFx0XFx0LyogVHJ5IHByZXYgbmV4dC4gKi9cXG4yMTUzOlxcdFxcdGlmIChwcmV2KVxcbjIxNTQ6XFx0XFx0XFx0YW5vbl92bWEgPSByZXVzYWJsZV9hbm9uX3ZtYShwcmV2LCBwcmV2LCB2bWEpO1xcbjIxNTU6XFx0XFxuMjE1NjpcXHRcXHQvKlxcbjIxNTc6XFx0XFx0ICogV2UgbWlnaHQgcmVhY2ggaGVyZSB3aXRoIGFub25fdm1hID09IE5VTEwgaWYgd2UgY2FuJ3QgZmluZFxcbjIxNTg6XFx0XFx0ICogYW55IHJldXNhYmxlIGFub25fdm1hLlxcbjIxNTk6XFx0XFx0ICogVGhlcmUncyBubyBhYnNvbHV0ZSBuZWVkIHRvIGxvb2sgb25seSBhdCB0b3VjaGluZyBuZWlnaGJvdXJzOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNToxMy45MjgwNzE0MTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA3MDk4NDg0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBgYW5vbl92bWFgIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGlzIGV4cG9ydGVkIG9yIHN0YXRpYy4gVGhpcyBsb29rcyBsaWtlIGl0IGxpdmVzIGluIGBtbS92bWEuY2AsIGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyBpbiBgbW0vcm1hcC5jYC5cblxuTm93LCByZWdhcmRpbmcgdGhlIGNoYW5nZSwgdGhlIGNydWNpYWwgcGFydCBpcyB0aGUgc3dpdGNoIGZyb20gYSBkaXJlY3QgYXNzaWdubWVudCBgdm1hLVx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7YCB0byBgc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dm1hLVx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSk7YCB3aXRoaW4gYF9fYW5vbl92bWFfcHJlcGFyZWAuIFRoaXMgaXMgaW4gdGhlIGNvcmUgTU0gY29kZSwgYG1tL3JtYXAuY2AuIFRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUsIG9idmlvdXNseSwgaXMgd2hldGhlciB0aGlzIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgc21wX3N0b3JlX3JlbGVhc2VgLCBjb3VsZCBpbnRyb2R1Y2UgYW4gZXhwbG9pdGFibGUgcmFjZSBjb25kaXRpb24uXG5cbk5leHQgc3RlcDogYXNzZXNzIHJlYWNoYWJpbGl0eS4gRG9lcyB0aGlzIGNoYW5nZSBhZmZlY3QgZXhlY3V0YWJsZSBjb2RlIHRoYXTigJlzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBpbiB0aGUgZmllbGQ/IENvbnNpZGVyaW5nIHRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQsIGBfX2Fub25fdm1hX3ByZXBhcmUoKWAgaXMgY2FsbGVkIGR1cmluZyBhbm9ueW1vdXMgbWVtb3J5IGhhbmRsaW5nLCBwYWdlIGZhdWx0cywgbWFkdmlzZSwgbXByb3RlY3QsIGFuZCBwb3RlbnRpYWxseSBtaWdyYXRlX3ZtYSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgY29kZSBpcyByZWd1bGFybHkgZXhlcmNpc2VkIGluIG1vc3QgZW52aXJvbm1lbnRzLiBCb3RoIGBtbS9ybWFwLmNgIGFuZCBgbW0vdm1hLmNgIGFyZSBjb3JlIGtlcm5lbCBjb21wb25lbnRzLCBzbyB0aGV5IGFyZSBhbHdheXMgY29tcGlsZWQgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUUVNVS5cblxuRmluYWxseSwgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGtlcm5lbCBjb25maWdzIHRoYXQgdGhpcyByZWxpZXMgb24/IEkgbmVlZCB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NjUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNToyNC42Mzc5MzIzMzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTE2Mzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJybWFwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0zNz1tbXUtJChDT05GSUdfTU1VKVxcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtMzktXFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG5tbS9NYWtlZmlsZTo0MDpcXHRcXHRcXHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cXG5tbS9NYWtlZmlsZS00MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6MjQuNzY3MTAxMTE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MzAzNzU1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIE1NVSBDb25maWd1cmF0aW9uIGFuZCBSZWxhdGVkIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGxpbmU6IGBtbXUtJChDT05GSUdfTU1VKSA6PSAuLi4gcm1hcC5vIC4uLiB2bWEub2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgaXMgbGlua2luZyBvYmplY3QgZmlsZXMgYmFzZWQgb24gdGhlIGBDT05GSUdfTU1VYCB2YXJpYWJsZS4gVGhhdCdzIHByZXR0eSBzdGFuZGFyZCBmb3IgYW55IGFyY2hpdGVjdHVyZSB3aXRoIGEgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCwgbGlrZSB4ODYgb3IgYW1kNjQuIEJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb25zaWRlcmluZyBhbGwgcG9zc2liaWxpdGllcy4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBpbiBwbGF5IGhlcmU/IEFyZSB0aGVyZSBhbnkgbGVzcyBjb21tb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IGZpdCB0aGUgdHlwaWNhbCBtb2xkPyBJIG5lZWQgdG8gY29uc2lkZXIgYWx0ZXJuYXRpdmUgY29uZmlndXJhdGlvbnMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW9zLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoaXMsIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHVzYWdlcyBvZiB0aGUgYF9fYW5vbl92bWFfcHJlcGFyZWAgb3IgYHJldXNhYmxlX2Fub25fdm1hYCBzeW1ib2xzLiBUaGVzZSBhcmUgb2Z0ZW4gaW5kaWNhdG9ycyBvZiBob3cgYW5vbnltb3VzIFZpcnR1YWwgTWVtb3J5IEFyZWFzIChWTUFzKSBhcmUgaGFuZGxlZC4gQ2hlY2tpbmcgZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhlc2Ugc3ltYm9scyB3aWxsIGltbWVkaWF0ZWx5IHJldmVhbCBob3cgdGhlIE1NVSBjb25maWd1cmF0aW9uIGltcGFjdHMgdGhlIFZNQSBoYW5kbGluZy4gVGhpcyB3aWxsIGhlbHAgbWUgY29uZmlybSB0aGUgYnJlYWR0aCBvZiB0aGUgYENPTkZJR19NTVVgJ3MgaW5mbHVlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc0MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE1OjM1OjI3LjU5NzQ4MjY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzMwOTcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Fub25fdm1hX3ByZXBhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9MzM1PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpO1xcbm1tL2ludGVybmFsLmg6MzM2OmludCAgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5tbS9pbnRlcm5hbC5oLTMzNy12b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbi0tXFxubW0vaW50ZXJuYWwuaD0zMzk9c3RhdGljIGlubGluZSBpbnQgYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2ludGVybmFsLmgtMzQzLVxcbm1tL2ludGVybmFsLmg6MzQ0OlxcdHJldHVybiBfX2Fub25fdm1hX3ByZXBhcmUodm1hKTtcXG5tbS9pbnRlcm5hbC5oLTM0NS19XFxuLS1cXG5tbS9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy0zOTQyLSAqIG9ubHkgcHJvdGVjdGVkIGJ5IHRoZSBwZXItVk1BIGxvY2ssIHRoZSBjYWxsZXIgbXVzdCByZXRyeSB3aXRoIHRoZVxcbm1tL21lbW9yeS5jOjM5NDM6ICogbW1hcF9sb2NrIGhlbGQuICBfX2Fub25fdm1hX3ByZXBhcmUoKSB3aWxsIGxvb2sgYXQgYWRqYWNlbnQgVk1BcyB0b1xcbm1tL21lbW9yeS5jLTM5NDQtICogZGV0ZXJtaW5lIGlmIHRoaXMgVk1BIGNhbiBzaGFyZSBpdHMgYW5vbl92bWEsIGFuZCB0aGF0J3Mgbm90IHNhZmUgdG9cXG4tLVxcbm1tL21lbW9yeS5jPTM5NTA9dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy0zOTYwLVxcdH1cXG5tbS9tZW1vcnkuYzozOTYxOlxcdGlmIChfX2Fub25fdm1hX3ByZXBhcmUodm1hKSlcXG5tbS9tZW1vcnkuYy0zOTYyLVxcdFxcdHJldCA9IFZNX0ZBVUxUX09PTTtcXG4tLVxcbm1tL3JtYXAuYz0xNTA9c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fYXNzaWduKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTE1OS0vKipcXG5tbS9ybWFwLmM6MTYwOiAqIF9fYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb25cXG5tbS9ybWFwLmMtMTYxLSAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uXFxuLS1cXG5tbS9ybWFwLmMtMTg0LSAqL1xcbm1tL3JtYXAuYzoxODU6aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9ybWFwLmMtMTg2LXtcXG4tLVxcbm1tL3ZtYS5jPTIwNTQ9c3RhdGljIGludCBhbm9uX3ZtYV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpiKVxcbi0tXFxubW0vdm1hLmMtMjA5OC0gKiBhbnkgYWNjZXNzIHRvIGl0cyBmaWVsZHMsIHdoaWNoIHBhaXJzIHdpdGggdGhlIGFzc2lnbm1lbnQgdG9cXG5tbS92bWEuYzoyMDk5OiAqIHZtYS1cXHUwMDNlYW5vbl92bWEgcGVyZm9ybWVkIHdpdGggcmVsZWFzZSBzZW1hbnRpY3MgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuXFxubW0vdm1hLmMtMjEwMC0gKlxcbi0tXFxubW0vdm1hLmM9MjExMz1zdGF0aWMgc3RydWN0IGFub25fdm1hICpyZXVzYWJsZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9sZCxcXG4tLVxcbm1tL3ZtYS5jLTIxMTctXFx0aWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHtcXG5tbS92bWEuYzoyMTE4OlxcdFxcdC8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovXFxubW0vdm1hLmMtMjExOS1cXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlYW5vbl92bWEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNToyNy42OTA3OTY2ODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMzODEyNTgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gncyBDb3ZlcmFnZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgY29uZmlybSB0aGF0IHRoZSBwcmVyZXF1aXNpdGVzIGFyZSBzYXRpc2ZpZWQuIGBfX2Fub25fdm1hX3ByZXBhcmVgIGlzIGluIGBtbS9ybWFwLmNgLCB3aGljaCwgYXMgZXhwZWN0ZWQsIG9ubHkgcmVxdWlyZXMgdGhlIGBNTVVgIGZlYXR1cmUuIEdvb2QsIHRoZSBgTU1VYCBjb25maWd1cmF0aW9uIGlzIHN0YW5kYXJkLCBzbyB3ZSBjYW4gc2V0IHRoYXQgY29uZmlkZW50bHkuIEknbGwgdXNlIGBNTVVgIGV4cGxpY2l0bHksIHRob3VnaCBhbiBlbXB0eSBlbnRyeSBtaWdodCBhbHNvIHdvcmsgYnkgZGVmYXVsdC5cblxuTm93IGZvciB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSBhcmUgd2hhdCBJIHdhbnQgdG8gbmFpbCBkb3duIGZvciB0ZXN0aW5nLiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQgd2FzIGRpcmVjdGx5IG1vZGlmaWVkLCB3aGVyZSB0aGF0IGBzbXBfc3RvcmVfcmVsZWFzZWAgd2FzIGFkZGVkLiBUaGVuIHRoZXJlJ3MgYGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hYCwgd2hpY2ggY2FsbHMgYHJldXNhYmxlX2Fub25fdm1hYCAod2hpY2gsIGltcG9ydGFudGx5LCBpcyBzdGF0aWMpLCBhbmQgaXQncyBhbHNvIHJlZmVyZW5jZWQgaW4gdGhlIHBhdGNoIGNvbW1lbnRzIGluIHJlbGF0aW9uIHRvIHRoZSBzeW5jaHJvbml6YXRpb24uIEZpbmFsbHksIGBfX3ZtZl9hbm9uX3ByZXBhcmVgLCB3aGljaCBjYWxscyBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyBpbXBvcnRhbnQgYXMgdGhlIGNhbGxpbmcgZnVuY3Rpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb21tb24gb3Igc3BlY2lmaWMuIGBfX2Fub25fdm1hX3ByZXBhcmVgIGlzIHByZXR0eSBzcGVjaWZpYyB0byB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIHVwIGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhczsgaXQncyBub3QgY2FsbGVkIG9uIGV2ZXJ5IGhvdCBwYXRoLCBvbmx5IHdoZW4gYWxsb2NhdGluZyBvciBwcmVwYXJpbmcgdGhlc2UgYW5vbnltb3VzIFZNQXMuIGBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYWAgaXMgbGVzcyBzcGVjaWZpYyBpbiBjb25jZXB0IGJ1dCBpcyB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCB0byB0aGUgYWx0ZXJlZCBsb2dpYywgZ2l2ZW4gdGhlIHN0YXRpYyBuYXR1cmUgb2YgYHJldXNhYmxlX2Fub25fdm1hYC5cblxuTG9va2luZyBhdCBvdGhlciBmdW5jdGlvbnMsIEkgc2VlIHRoYXQgYHJldXNhYmxlX2Fub25fdm1hYCBpcyBzdGF0aWMsIGRlZmluZWQgaW4gYG1tL3ZtYS5jYCwgYW5kIG9ubHkgY2FsbGVkIGJ5IGBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYWAuIFRoaXMgcmVpbmZvcmNlcyB0aGUgaW1wb3J0YW5jZSBvZiBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGFuZCBgX19hbm9uX3ZtYV9wcmVwYXJlYCBhcyB0aGUgaW1wb3J0YW50IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRvIHRlc3QuXG5cblNvLCBhY2NvcmRpbmcgdG8gbXkgcmV2aWV3LCB0aGUgZnV6emluZyBwcm9wZXJ0aWVzIG9mIHRoaXMgcGF0Y2ggc2hvdWxkIGJlOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgIChhYnNvbHV0ZWx5KVxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW1wiTU1VXCJdYFxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJfX2Fub25fdm1hX3ByZXBhcmVcIiwgXCJmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYVwiXWBcblxuSSdsbCBwcm9jZWVkIHRvIHRoZSB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQ1LCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNTozNC4wMjg5MjU1NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4MTI3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYW5vbl92bWFfcHJlcGFyZVwiLFxuICAgIFwiZmluZF9tZXJnZWFibGVfYW5vbl92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX2Fub25fdm1hX3ByZXBhcmUoKSBpbiBtbS9ybWFwLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgd2hlbiBwdWJsaXNoaW5nIHZtYS1cXHUwMDNlYW5vbl92bWEsIHByb3Blcmx5IHBhaXJpbmcgd2l0aCBsb2NrbGVzcyBSRUFEX09OQ0UoKSByZWFkcyBhbmQgYWRkcmVzcyBkZXBlbmRlbmNpZXMgaW4gcmV1c2FibGVfYW5vbl92bWEoKSAoY2FsbGVkIHZpYSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSgpKS4gQmVjYXVzZSB0aGlzIGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBmdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgY29uY3VycmVuY3kgYW5vbWFsaWVzIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYW5vbl92bWFfcHJlcGFyZVwiLFxuICAgIFwiZmluZF9tZXJnZWFibGVfYW5vbl92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX2Fub25fdm1hX3ByZXBhcmUoKSBpbiBtbS9ybWFwLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgd2hlbiBwdWJsaXNoaW5nIHZtYS1cXHUwMDNlYW5vbl92bWEsIHByb3Blcmx5IHBhaXJpbmcgd2l0aCBsb2NrbGVzcyBSRUFEX09OQ0UoKSByZWFkcyBhbmQgYWRkcmVzcyBkZXBlbmRlbmNpZXMgaW4gcmV1c2FibGVfYW5vbl92bWEoKSAoY2FsbGVkIHZpYSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSgpKS4gQmVjYXVzZSB0aGlzIGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBmdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgY29uY3VycmVuY3kgYW5vbWFsaWVzIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNTozNC4xNzY3NDUyOTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDYwODMyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6MzQuMTc3MzIzNDg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjk0NjAyNDg3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL3JtYXAuYyBhbmQgbW0vdm1hLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2bWEtXFx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSkgaW5zdGVhZCBvZiBhIHBsYWluIGFzc2lnbm1lbnQgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCksIGVuc3VyaW5nIHByb3BlciBtZW1vcnkgb3JkZXJpbmcgd2l0aCBSRUFEX09OQ0UgaW4gcmV1c2FibGVfYW5vbl92bWEoKS4gVGhpcyBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgb24gU0xBQl9UWVBFU0FGRV9CWV9SQ1Ugb2JqZWN0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGxlbmd0aCBtb2RpZmljYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGNvcGllcy9pbmZvbGVha3MuIENvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4NWNiMjBjZDM2Mzc5OWVjMGM2ZDRhMTI1NzliN2ZiYmU3MTY0OWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE1OjM0OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCBkMTgxOWZkNjk5MzgwLi5mM2IyMWFhYTM0ZWU5IDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC0yMDksNyArMjA5LDExIEBAIGludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHQvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIFx0aWYgKGxpa2VseSghdm1hLVx1MDAzZWFub25fdm1hKSkge1xuLVx0XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbitcdFx0LypcbitcdFx0ICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLlxuK1x0XHQgKiBQYWlyZWQgd2l0aCBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgaW4gcmV1c2FibGVfYW5vbl92bWEoKS5cbitcdFx0ICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpO1xuIFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbiBcdFx0YW5vbl9ybWFwX3RyZWVfaW5zZXJ0KGF2YywgYW5vbl92bWEpO1xuIFx0XHRhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcbmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jXG5pbmRleCAzNWU3YTY0ODU1ZmFkLi5lYzQxMDEyNTBkNzFiIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbisrKyBiL21tL3ZtYS5jXG5AQCAtMjA5NCw2ICsyMDk0LDEzIEBAIHN0YXRpYyBpbnQgYW5vbl92bWFfY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqXG4gICogYWNjZXB0YWJsZSBmb3IgbWVyZ2luZywgc28gd2UgY2FuIGRvIGFsbCBvZiB0aGlzIG9wdGltaXN0aWNhbGx5LiBCdXRcbiAgKiB3ZSBkbyB0aGF0IFJFQURfT05DRSgpIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIG5ldmVyIHJlLWxvYWQgdGhlIHBvaW50ZXIuXG4gICpcbisgKiBUaGUgUkVBRF9PTkNFKCkgZXN0YWJsaXNoZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gYW5vbl92bWEgYW5kXG4rICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvXG4rICogdm1hLVx1MDAzZWFub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxuKyAqXG4rICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhcyBhbm9uX3ZtYSdzIGFyZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSBzb1xuKyAqIGFjY2Vzc2luZyBhbiB1bmluaXRpYWxpc2VkIGFub25fdm1hJ3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXG4rICpcbiAgKiBJT1c6IHRoYXQgdGhlIFwibGlzdF9pc19zaW5ndWxhcigpXCIgdGVzdCBvbiB0aGUgYW5vbl92bWFfY2hhaW4gb25seVxuICAqIG1hdHRlcnMgZm9yIHRoZSAnc3RhYmxlIGFub25fdm1hJyBjYXNlIChpZSB0aGUgdGhpbmcgd2Ugd2FudCB0byBhdm9pZFxuICAqIGlzIHRvIHJldHVybiBhbiBhbm9uX3ZtYSB0aGF0IGlzIFwiY29tcGxleFwiIGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXG5AQCAtMjEwOCw2ICsyMTE1LDcgQEAgc3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcmV1c2FibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpiKVxuIHtcbiBcdGlmIChhbm9uX3ZtYV9jb21wYXRpYmxlKGEsIGIpKSB7XG4rXHRcdC8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovXG4gXHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWFub25fdm1hKTtcbiBcbiBcdFx0aWYgKGFub25fdm1hIFx1MDAyNlx1MDAyNiBsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNm9sZC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNTozNC4xNzczMjQzNzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5NzY0NTQ5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbW0vcm1hcC5jYCBhbmQgYG1tL3ZtYS5jYCBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBtbS9ybWFwLmNgIGFuZCBgbW0vdm1hLmNgIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBmb3IgaXQuIFRoYXQncyBmaW5lOyBsZXQncyBnZXQgcmlnaHQgdG8gaXQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGUgY2hhbmdlIGJlZm9yZSBqdW1waW5nIGludG8gYW55IGNvbmNsdXNpb25zLiBMZXQncyBkaWcgaW4uXG5cbkl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gYW5kIHZpc2liaWxpdHksIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBhbm9uX3ZtYWAgc3RydWN0dXJlLiBJbiBgbW0vcm1hcC5jYCwgdGhlIGNyaXRpY2FsIGNoYW5nZSBpcyBpbiBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgd2hlcmUgdGhlIHNpbXBsZSBhc3NpZ25tZW50IGB2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpO2AuIFRoZXkndmUgYWxzbyBhZGRlZCBhIGNvbW1lbnQgdGhhdCBmbGFncyB0aGF0IHRoZSBgYW5vbl92bWFgIGZpZWxkcyBuZWVkIHRvIGJlIHZpc2libGUgYmVmb3JlIGBhbm9uX3ZtYWAgaXMgYWN0dWFsbHkgcHVibGlzaGVkIGFuZCB0aGF0IHRoaXMgY2hhbmdlIGlzIHBhaXJlZCB3aXRoIGFuIGFkZHJlc3MgZGVwZW5kZW5jeS5cblxuTm93LCBpbiBgbW0vdm1hLmNgLCBgcmV1c2FibGVfYW5vbl92bWFgIGdvdCBzb21lIHVwZGF0ZWQgY29tbWVudHMsIHNwZWNpZmljYWxseSBjYWxsaW5nIG91dCB0aGF0IHRoZSBgUkVBRF9PTkNFKClgIGVzdGFibGlzaGVzIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBiZXR3ZWVuIGBhbm9uX3ZtYWAgYW5kIGFueSBhY2Nlc3MgdG8gaXRzIGZpZWxkcy4gVGhlIGNvbW1lbnQgYWxzbyBwb2ludHMgb3V0IHRoYXQgdGhpcyBwYWlyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2UgYGFub25fdm1hYCB1c2VzIGBTTEFCX1RZUEVTQUZFX0JZX1JDVWAsIHNvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHdvdWxkIGNhdXNlIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgc2l0dWF0aW9uLiBcblxuU28gaXQncyBhbGwgYWJvdXQgbWVtb3J5IGJhcnJpZXJzLCBkYXRhIGRlcGVuZGVuY2llcywgYW5kIHByZXZlbnRpbmcgVUFGIGJ1Z3MuIFRoaXMgYHNtcF9zdG9yZV9yZWxlYXNlYCB3aXRoIGEgcGFpcmVkIGBSRUFEX09OQ0UoKWAgc2VlbXMgdG8gYmUgZXN0YWJsaXNoaW5nIGEgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyB0byBlbnN1cmUgdGhhdCB3aGVuIHdlIGFjY2VzcyB0aGUgYGFub25fdm1hYCBmaWVsZHMgaW4gYHJldXNhYmxlX2Fub25fdm1hYCwgdGhleSBhcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgYW5kIHNhZmUgdG8gdXNlLlxuXG5Pa2F5LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgZnVsbCBjb250ZXh0LiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gdGVsbCBpZiBLTVNBTiBuZWVkcyBzb21lIGRlZGljYXRlZCBhdHRlbnRpb24uIFxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6NTQuMTUzNzgxOTY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ybWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdCAqIEFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIGRvIHByb3BlciBhbm9uX3ZtYSBsb2NraW5nIGV2ZW5cXG4gMTgxOlxcdCAqIGZvciB0aGUgbmV3IGFsbG9jYXRpb24uIEF0IHRoZSBzYW1lIHRpbWUsIHdlIGRvIG5vdCB3YW50XFxuIDE4MjpcXHQgKiB0byBkbyBhbnkgbG9ja2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIGFscmVhZHkgaGF2aW5nXFxuIDE4MzpcXHQgKiBhbiBhbm9uX3ZtYS5cXG4gMTg0OlxcdCAqL1xcbiAxODU6XFx0aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gMTg2OlxcdHtcXG4gMTg3OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG4gMTg4OlxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEsICphbGxvY2F0ZWQ7XFxuIDE4OTpcXHRcXHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YztcXG4gMTkwOlxcdFxcbiAxOTE6XFx0XFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcXG4gMTkyOlxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdGF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpO1xcbiAxOTU6XFx0XFx0aWYgKCFhdmMpXFxuIDE5NjpcXHRcXHRcXHRnb3RvIG91dF9lbm9tZW07XFxuIDE5NzpcXHRcXG4gMTk4OlxcdFxcdGFub25fdm1hID0gZmluZF9tZXJnZWFibGVfYW5vbl92bWEodm1hKTtcXG4gMTk5OlxcdFxcdGFsbG9jYXRlZCA9IE5VTEw7XFxuIDIwMDpcXHRcXHRpZiAoIWFub25fdm1hKSB7XFxuIDIwMTpcXHRcXHRcXHRhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7XFxuIDIwMjpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWFub25fdm1hKSlcXG4gMjAzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2Vub21lbV9mcmVlX2F2YztcXG4gMjA0OlxcdFxcdFxcdGFub25fdm1hLVxcdTAwM2VudW1fY2hpbGRyZW4rKzsgLyogc2VsZi1wYXJlbnQgbGluayBmb3IgbmV3IHJvb3QgKi9cXG4gMjA1OlxcdFxcdFxcdGFsbG9jYXRlZCA9IGFub25fdm1hO1xcbiAyMDY6XFx0XFx0fVxcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcXG4gMjA5OlxcdFxcdC8qIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IGFnYWluc3QgdGhyZWFkcyAqL1xcbiAyMTA6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZtbS1cXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcXG4gMjExOlxcdFxcdGlmIChsaWtlbHkoIXZtYS1cXHUwMDNlYW5vbl92bWEpKSB7XFxuIDIxMjpcXHRcXHRcXHQvKlxcbiAyMTM6XFx0XFx0XFx0ICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLlxcbiAyMTQ6XFx0XFx0XFx0ICogUGFpcmVkIHdpdGggYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGluIHJldXNhYmxlX2Fub25fdm1hKCkuXFxuIDIxNTpcXHRcXHRcXHQgKi9cXG4gMjE2OlxcdFxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2bWEtXFx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSk7XFxuIDIxNzpcXHRcXHRcXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcXG4gMjE4OlxcdFxcdFxcdGFub25fcm1hcF90cmVlX2luc2VydChhdmMsIGFub25fdm1hKTtcXG4gMjE5OlxcdFxcdFxcdGFub25fdm1hLVxcdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcXG4gMjIwOlxcdFxcdFxcdGFsbG9jYXRlZCA9IE5VTEw7XFxuIDIyMTpcXHRcXHRcXHRhdmMgPSBOVUxMO1xcbiAyMjI6XFx0XFx0fVxcbiAyMjM6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbiAyMjQ6XFx0XFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFub25fdm1hKTtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCkpXFxuIDIyNzpcXHRcXHRcXHRwdXRfYW5vbl92bWEoYWxsb2NhdGVkKTtcXG4gMjI4OlxcdFxcdGlmICh1bmxpa2VseShhdmMpKVxcbiAyMjk6XFx0XFx0XFx0YW5vbl92bWFfY2hhaW5fZnJlZShhdmMpO1xcbiAyMzA6XFx0XFxuIDIzMTpcXHRcXHRyZXR1cm4gMDtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0IG91dF9lbm9tZW1fZnJlZV9hdmM6XFxuIDIzNDpcXHRcXHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XFxuIDIzNTpcXHQgb3V0X2Vub21lbTpcXG4gMjM2OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMzc6XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHRzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6NTQuMTU0MDYzNTA5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjYyNDUxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vdm1hLmNgIC0gYHJldXNhYmxlX2Fub25fdm1hYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgbGV0J3MgemVybyBpbiBvbiBgbW0vdm1hLmNgIGFnYWluLiBJJ3ZlIGdvdCBhIGh1bmNoLCBhbmQgaXQncyBhcm91bmQgaG93IHdlIGhhbmRsZSBhbm9ueW1vdXMgVk1BcyBhbmQgdGhlaXIgcmV1c2FiaWxpdHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJldmlzaXQgdGhlIGByZXVzYWJsZV9hbm9uX3ZtYWAgYXNwZWN0LiBUaGVyZSdzIGEgcGFydGljdWxhciBwcm9ibGVtIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCwgYW5kIEkgYmVsaWV2ZSB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUgaG9sZHMgdGhlIGtleSB0byB0aGUgc29sdXRpb24uIEkga25vdyB0aGVyZSBoYXZlIGJlZW4gc3VidGxlIHNoaWZ0cyBpbiB0aGUgYmVoYXZpb3VyIGFyb3VuZCByZWNsYWltaW5nIGFub255bW91cyBtZW1vcnkgcmVjZW50bHksIGVzcGVjaWFsbHkgaW4gaGlnaGx5IGNvbnRlc3RlZCBtZW1vcnkgc2NlbmFyaW9zLCBhbmQgSSBzdXNwZWN0IHRoZXNlIGZ1bmN0aW9uIGNhbGxzIHdpbGwgYmUgdGhlIGNydXggb2YgdGhlIGlzc3VlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgYW5kIHNlZSBpZiBteSBpbnR1aXRpb24gaG9sZHMgYW55IHdhdGVyLiBUaGlzIGZ1bmN0aW9uIGluIHBhcnRpY3VsYXIgaGFzIGJlZW4gdG91Y2hlZCBpbiBzZXZlcmFsIHBhdGNoIHNldHMsIGFuZCBJIHdvbmRlciB3aGF0IGFsbCB0aGUgY2h1cm4gaXMgYWJvdXQuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY2FsbCBwYXRoIHRocm91Z2ggdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE1OjM1OjU2LjI4MDMxMTQ3NloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA4MDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjA4MTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yMDgyOlxcdH1cXG4yMDgzOlxcdFxcbjIwODQ6XFx0LypcXG4yMDg1OlxcdCAqIERvIHNvbWUgYmFzaWMgc2FuaXR5IGNoZWNraW5nIHRvIHNlZSBpZiB3ZSBjYW4gcmUtdXNlIHRoZSBhbm9uX3ZtYVxcbjIwODY6XFx0ICogZnJvbSAnb2xkJy4gVGhlICdhJy8nYicgdm1hJ3MgYXJlIGluIFZNIG9yZGVyIC0gb25lIG9mIHRoZW0gd2lsbCBiZVxcbjIwODc6XFx0ICogdGhlIHNhbWUgYXMgJ29sZCcsIHRoZSBvdGhlciB3aWxsIGJlIHRoZSBuZXcgb25lIHRoYXQgaXMgdHJ5aW5nXFxuMjA4ODpcXHQgKiB0byBzaGFyZSB0aGUgYW5vbl92bWEuXFxuMjA4OTpcXHQgKlxcbjIwOTA6XFx0ICogTk9URSEgVGhpcyBydW5zIHdpdGggbW1hcF9sb2NrIGhlbGQgZm9yIHJlYWRpbmcsIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXRcXG4yMDkxOlxcdCAqIHRoZSBhbm9uX3ZtYSBvZiAnb2xkJyBpcyBjb25jdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc2V0IHVwXFxuMjA5MjpcXHQgKiBieSBhbm90aGVyIHBhZ2UgZmF1bHQgdHJ5aW5nIHRvIG1lcmdlIF90aGF0Xy4gQnV0IHRoYXQncyBvazogaWYgaXRcXG4yMDkzOlxcdCAqIGlzIGJlaW5nIHNldCB1cCwgdGhhdCBhdXRvbWF0aWNhbGx5IG1lYW5zIHRoYXQgaXQgd2lsbCBiZSBhIHNpbmdsZXRvblxcbjIwOTQ6XFx0ICogYWNjZXB0YWJsZSBmb3IgbWVyZ2luZywgc28gd2UgY2FuIGRvIGFsbCBvZiB0aGlzIG9wdGltaXN0aWNhbGx5LiBCdXRcXG4yMDk1OlxcdCAqIHdlIGRvIHRoYXQgUkVBRF9PTkNFKCkgdG8gbWFrZSBzdXJlIHRoYXQgd2UgbmV2ZXIgcmUtbG9hZCB0aGUgcG9pbnRlci5cXG4yMDk2OlxcdCAqXFxuMjA5NzpcXHQgKiBUaGUgUkVBRF9PTkNFKCkgZXN0YWJsaXNoZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gYW5vbl92bWEgYW5kXFxuMjA5ODpcXHQgKiBhbnkgYWNjZXNzIHRvIGl0cyBmaWVsZHMsIHdoaWNoIHBhaXJzIHdpdGggdGhlIGFzc2lnbm1lbnQgdG9cXG4yMDk5OlxcdCAqIHZtYS1cXHUwMDNlYW5vbl92bWEgcGVyZm9ybWVkIHdpdGggcmVsZWFzZSBzZW1hbnRpY3MgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuXFxuMjEwMDpcXHQgKlxcbjIxMDE6XFx0ICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhcyBhbm9uX3ZtYSdzIGFyZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSBzb1xcbjIxMDI6XFx0ICogYWNjZXNzaW5nIGFuIHVuaW5pdGlhbGlzZWQgYW5vbl92bWEncyBmaWVsZHMgbWF5IHJlc3VsdCBpbiBhIFVBRi5cXG4yMTAzOlxcdCAqXFxuMjEwNDpcXHQgKiBJT1c6IHRoYXQgdGhlIFxcXCJsaXN0X2lzX3Npbmd1bGFyKClcXFwiIHRlc3Qgb24gdGhlIGFub25fdm1hX2NoYWluIG9ubHlcXG4yMTA1OlxcdCAqIG1hdHRlcnMgZm9yIHRoZSAnc3RhYmxlIGFub25fdm1hJyBjYXNlIChpZSB0aGUgdGhpbmcgd2Ugd2FudCB0byBhdm9pZFxcbjIxMDY6XFx0ICogaXMgdG8gcmV0dXJuIGFuIGFub25fdm1hIHRoYXQgaXMgXFxcImNvbXBsZXhcXFwiIGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXFxuMjEwNzpcXHQgKiBhIGZvcmspLlxcbjIxMDg6XFx0ICpcXG4yMTA5OlxcdCAqIFdlIGFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIHR3byB2bWEncyBhcmUgY29tcGF0aWJsZSAoYWRqYWNlbnQsXFxuMjExMDpcXHQgKiBhbmQgd2l0aCB0aGUgc2FtZSBtZW1vcnkgcG9saWNpZXMpLiBUaGF0J3MgYWxsIHN0YWJsZSwgZXZlbiB3aXRoIGp1c3RcXG4yMTExOlxcdCAqIGEgcmVhZCBsb2NrIG9uIHRoZSBtbWFwX2xvY2suXFxuMjExMjpcXHQgKi9cXG4yMTEzOlxcdHN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLFxcbjIxMTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsXFxuMjExNTpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYilcXG4yMTE2OlxcdHtcXG4yMTE3OlxcdFxcdGlmIChhbm9uX3ZtYV9jb21wYXRpYmxlKGEsIGIpKSB7XFxuMjExODpcXHRcXHRcXHQvKiBQYWlyZWQgd2l0aCBhIG1lbW9yeSBiYXJyaWVyIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLiAqL1xcbjIxMTk6XFx0XFx0XFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtXFx1MDAzZWFub25fdm1hKTtcXG4yMTIwOlxcdFxcbjIxMjE6XFx0XFx0XFx0aWYgKGFub25fdm1hIFxcdTAwMjZcXHUwMDI2IGxpc3RfaXNfc2luZ3VsYXIoXFx1MDAyNm9sZC1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKVxcbjIxMjI6XFx0XFx0XFx0XFx0cmV0dXJuIGFub25fdm1hO1xcbjIxMjM6XFx0XFx0fVxcbjIxMjQ6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjEyNTpcXHR9XFxuMjEyNjpcXHRcXG4yMTI3OlxcdC8qXFxuMjEyODpcXHQgKiBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSBpcyB1c2VkIGJ5IGFub25fdm1hX3ByZXBhcmUsIHRvIGNoZWNrXFxuMjEyOTpcXHQgKiBuZWlnaGJvdXJpbmcgdm1hcyBmb3IgYSBzdWl0YWJsZSBhbm9uX3ZtYSwgYmVmb3JlIGl0IGdvZXMgb2ZmXFxuMjEzMDpcXHQgKiB0byBhbGxvY2F0ZSBhIG5ldyBhbm9uX3ZtYS4gIEl0IGNoZWNrcyBiZWNhdXNlIGEgcmVwZXRpdGl2ZVxcbjIxMzE6XFx0ICogc2VxdWVuY2Ugb2YgbXByb3RlY3RzIGFuZCBmYXVsdHMgbWF5IG90aGVyd2lzZSBsZWFkIHRvIGRpc3RpbmN0XFxuMjEzMjpcXHQgKiBhbm9uX3ZtYXMgYmVpbmcgYWxsb2NhdGVkLCBwcmV2ZW50aW5nIHZtYSBtZXJnZSBpbiBzdWJzZXF1ZW50XFxuMjEzMzpcXHQgKiBtcHJvdGVjdC5cXG4yMTM0OlxcdCAqL1xcbjIxMzU6XFx0c3RydWN0IGFub25fdm1hICpmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4yMTM2OlxcdHtcXG4yMTM3OlxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBOVUxMO1xcbjIxMzg6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCAqbmV4dDtcXG4yMTM5OlxcdFxcdFZNQV9JVEVSQVRPUih2bWksIHZtYS1cXHUwMDNldm1fbW0sIHZtYS1cXHUwMDNldm1fZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6NTYuMjgwNTM3MDU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczNTcwMDc1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBSZXF1aXJlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBjb3JlIGNoYW5nZSBpcyBpbiBgbW0vcm1hcC5jYCwgd2hlcmUgYSBwbGFpbiBzdG9yZSB0byBgdm1hLVx1MDAzZWFub25fdm1hYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKTtgLiBUaGVyZSBhcmUgYWxzbyBzb21lIGNvbW1lbnQgdXBkYXRlcyBpbiBgbW0vdm1hLmNgLCB3aGljaCBpcyBnb29kIHRvIHNlZSwgY2xhcmlmeWluZyB0aGUgbWVtb3J5IGJhcnJpZXIgaW1wbGljYXRpb25zIGFsb25nc2lkZSBgUkVBRF9PTkNFYCBpbiBgcmV1c2FibGVfYW5vbl92bWFgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBtZW1vcnkgb3JkZXJpbmcgaXNzdWUuIFNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgbGVhZCB0byBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBgdm1hLVx1MDAzZWFub25fdm1hYCBwb2ludGVyIGlzIHB1Ymxpc2hlZCB0byBvdGhlciB0aHJlYWRzICpiZWZvcmUqIHRoZSBmaWVsZHMgd2l0aGluIGBhbm9uX3ZtYWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gYSBtZW1vcnkgb3JkZXJpbmcgcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIGlzc3VlcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiBSQ1UtbWFuYWdlZCBTTEFCIGNhY2hlcywgd2hpY2ggdGhlIGNvbW1lbnQgY29ycmVjdGx5IHBvaW50cyBvdXQgKGBTTEFCX1RZUEVTQUZFX0JZX1JDVWApLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcmVxdWlyZSBLTVNBTj8gTGV0J3MgY2hlY2sgdGhlIHJ1bGVzLiBUaGUgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIG5vIGBjb3B5X3RvX3VzZXJgIHByb2JsZW1zLiBJdCBhbHNvIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIG1vc3QgaW1wb3J0YW50bHksIGl0IGlzbid0IEtNU0FOLWRldGVjdGFibGUgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoaXMgcGF0Y2ggKmlzKiBhYm91dCBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiwgaXQncyB0cnVlLiBCdXQgdGhlIHBvdGVudGlhbCBidWdzIGFyZSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlcyDigJMgcmFjZXMsIHVzZS1hZnRlci1mcmVlIOKAkyB0aGluZ3MgdGhhdCBzaG91bGQgYmUgcmVhZGlseSBjYXVnaHQgYnkgS0FTQU4sIEtDU0FOLCBvciBMT0NLREVQLiBJdCBpcyBleHBsaWNpdGx5IHN0YXRlZCB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMgYW5kIHNob3VsZCAqb25seSogYmUgdXNlZCBmb3IgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MuIEdpdmVuIHRoYXQgdGhpcyBwYXRjaCBkZWFscyB3aXRoIG1lbW9yeSBvcmRlcmluZywgYnV0ICpub3QqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LlxuXG5UaGVyZWZvcmUsIG15IHJlYXNvbmluZyBpcyB0aGlzOiBUaGUgcGF0Y2ggY29ycmVjdGx5IGFkZHJlc3NlcyBhIG1lbW9yeSBvcmRlcmluZyByYWNlIGNvbmRpdGlvbiB3aGVuIHB1Ymxpc2hpbmcgYGFub25fdm1hYCB0byBjb25jdXJyZW50IHJlYWRlcnMgdGhhdCBjb3VsZCBsZWFkIHRvIFVzZS1BZnRlci1GcmVlIGlzc3VlcywgYW5kIGVuc3VyZXMgcHJvcGVyIGluaXRpYWxpemF0aW9uIHVzaW5nIGBzbXBfc3RvcmVfcmVsZWFzZWAuIFRoZSBwYXRjaCBkb2Vzbid0IGNyZWF0ZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcywgYW5kIGl0ICpkb2Vzbid0KiBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocy4gVGhlIGJ1Z3MgaXQgcG90ZW50aWFsbHkgZml4ZXMgZmFsbCBpbnRvIHRoZSBLQVNBTi9LQ1NBTi9MT0NLREVQIGNhdGVnb3J5LiBTbywgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBOb3csIGxldCdzIGRvdWJsZS1jaGVjayBhbGwgdG9vbCBwYXJhbWV0ZXJzIGFuZCBtYWtlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MjIsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzY6MDMuNjM3NTQ4MTg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtbS9ybWFwLmMgYW5kIG1tL3ZtYS5jIHRvIHVzZSBzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dm1hLVxcdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpIGluc3RlYWQgb2YgYSBwbGFpbiBhc3NpZ25tZW50IGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLCBlbnN1cmluZyBwcm9wZXIgbWVtb3J5IG9yZGVyaW5nIHdpdGggUkVBRF9PTkNFIGluIHJldXNhYmxlX2Fub25fdm1hKCkuIFRoaXMgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIG9uIFNMQUJfVFlQRVNBRkVfQllfUkNVIG9iamVjdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBsZW5ndGggbW9kaWZpY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3BpZXMvaW5mb2xlYWtzLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtbS9ybWFwLmMgYW5kIG1tL3ZtYS5jIHRvIHVzZSBzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dm1hLVxcdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpIGluc3RlYWQgb2YgYSBwbGFpbiBhc3NpZ25tZW50IGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLCBlbnN1cmluZyBwcm9wZXIgbWVtb3J5IG9yZGVyaW5nIHdpdGggUkVBRF9PTkNFIGluIHJldXNhYmxlX2Fub25fdm1hKCkuIFRoaXMgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIG9uIFNMQUJfVFlQRVNBRkVfQllfUkNVIG9iamVjdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBsZW5ndGggbW9kaWZpY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3BpZXMvaW5mb2xlYWtzLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 14:46:47 +0000 UTC FinishedAt: 2026-09-08 15:36:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e14a3454806468b086fe2e4ca2e1bff95b528531", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e14a3454806468b086fe2e4ca2e1bff95b528531", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "c42d2d11-a269-4327-bbf9-67ed62403e3b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__anon_vma_prepare", "find_mergeable_anon_vma" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYW5vbl92bWFfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL3JtYXAuYyBhbmQgbW0vdm1hLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpIGluc3RlYWQgb2YgYSBwbGFpbiBhc3NpZ25tZW50IGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLCBlbnN1cmluZyBwcm9wZXIgbWVtb3J5IG9yZGVyaW5nIHdpdGggUkVBRF9PTkNFIGluIHJldXNhYmxlX2Fub25fdm1hKCkuIFRoaXMgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIG9uIFNMQUJfVFlQRVNBRkVfQllfUkNVIG9iamVjdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbGVuZ3RoIG1vZGlmaWNhdGlvbnMsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29waWVzL2luZm9sZWFrcy4gQ29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYW5vbl92bWFfcHJlcGFyZSgpIGluIG1tL3JtYXAuYyB0byB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoKSB3aGVuIHB1Ymxpc2hpbmcgdm1hLVx1MDAzZWFub25fdm1hLCBwcm9wZXJseSBwYWlyaW5nIHdpdGggbG9ja2xlc3MgUkVBRF9PTkNFKCkgcmVhZHMgYW5kIGFkZHJlc3MgZGVwZW5kZW5jaWVzIGluIHJldXNhYmxlX2Fub25fdm1hKCkgKGNhbGxlZCB2aWEgZmluZF9tZXJnZWFibGVfYW5vbl92bWEoKSkuIEJlY2F1c2UgdGhpcyBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgZnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IGNvbmN1cnJlbmN5IGFub21hbGllcyBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4NWNiMjBjZDM2Mzc5OWVjMGM2ZDRhMTI1NzliN2ZiYmU3MTY0OWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE1OjM0OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggZDE4MTlmZDY5OTM4MC4uZjNiMjFhYWEzNGVlOSAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jXG5AQCAtMjA5LDcgJiM0MzsyMDksMTEgQEAgaW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdC8qIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IGFnYWluc3QgdGhyZWFkcyAqL1xuIFx0c3Bpbl9sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4gXHRpZiAobGlrZWx5KCF2bWEtXHUwMDNlYW5vbl92bWEpKSB7XG4tXHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE1ha2UgYW5vbl92bWEgZmllbGRzIHZpc2libGUgYmVmb3JlIGFub25fdm1hIGlzIHB1Ymxpc2hlZC5cbiYjNDM7XHRcdCAqIFBhaXJlZCB3aXRoIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKTtcbiBcdFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XG4gXHRcdGFub25fcm1hcF90cmVlX2luc2VydChhdmMsIGFub25fdm1hKTtcbiBcdFx0YW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jXG5pbmRleCAzNWU3YTY0ODU1ZmFkLi5lYzQxMDEyNTBkNzFiIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jXG5AQCAtMjA5NCw2ICYjNDM7MjA5NCwxMyBAQCBzdGF0aWMgaW50IGFub25fdm1hX2NvbXBhdGlibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKlxuICAqIGFjY2VwdGFibGUgZm9yIG1lcmdpbmcsIHNvIHdlIGNhbiBkbyBhbGwgb2YgdGhpcyBvcHRpbWlzdGljYWxseS4gQnV0XG4gICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLlxuICAqXG4mIzQzOyAqIFRoZSBSRUFEX09OQ0UoKSBlc3RhYmxpc2hlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgYmV0d2VlbiBhbm9uX3ZtYSBhbmRcbiYjNDM7ICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvXG4mIzQzOyAqIHZtYS1cdTAwM2Vhbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhcyBhbm9uX3ZtYSYjMzk7cyBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1Ugc29cbiYjNDM7ICogYWNjZXNzaW5nIGFuIHVuaW5pdGlhbGlzZWQgYW5vbl92bWEmIzM5O3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXG4mIzQzOyAqXG4gICogSU9XOiB0aGF0IHRoZSBcJiMzNDtsaXN0X2lzX3Npbmd1bGFyKClcJiMzNDsgdGVzdCBvbiB0aGUgYW5vbl92bWFfY2hhaW4gb25seVxuICAqIG1hdHRlcnMgZm9yIHRoZSAmIzM5O3N0YWJsZSBhbm9uX3ZtYSYjMzk7IGNhc2UgKGllIHRoZSB0aGluZyB3ZSB3YW50IHRvIGF2b2lkXG4gICogaXMgdG8gcmV0dXJuIGFuIGFub25fdm1hIHRoYXQgaXMgXCYjMzQ7Y29tcGxleFwmIzM0OyBkdWUgdG8gaGF2aW5nIGdvbmUgdGhyb3VnaFxuQEAgLTIxMDgsNiAmIzQzOzIxMTUsNyBAQCBzdGF0aWMgc3RydWN0IGFub25fdm1hICpyZXVzYWJsZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9sZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmIpXG4ge1xuIFx0aWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHtcbiYjNDM7XHRcdC8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovXG4gXHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWFub25fdm1hKTtcbiBcbiBcdFx0aWYgKGFub25fdm1hIFx1MDAyNlx1MDAyNiBsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNm9sZC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19hbm9uX3ZtYV9wcmVwYXJlJiMzNDssCiAgICAmIzM0O2ZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fYW5vbl92bWFfcHJlcGFyZSgpIGluIG1tL3JtYXAuYyB0byB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoKSB3aGVuIHB1Ymxpc2hpbmcgdm1hLVx1MDAzZWFub25fdm1hLCBwcm9wZXJseSBwYWlyaW5nIHdpdGggbG9ja2xlc3MgUkVBRF9PTkNFKCkgcmVhZHMgYW5kIGFkZHJlc3MgZGVwZW5kZW5jaWVzIGluIHJldXNhYmxlX2Fub25fdm1hKCkgKGNhbGxlZCB2aWEgZmluZF9tZXJnZWFibGVfYW5vbl92bWEoKSkuIEJlY2F1c2UgdGhpcyBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgZnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IGNvbmN1cnJlbmN5IGFub21hbGllcyBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4NWNiMjBjZDM2Mzc5OWVjMGM2ZDRhMTI1NzliN2ZiYmU3MTY0OWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE1OjM0OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IGQxODE5ZmQ2OTkzODAuLmYzYjIxYWFhMzRlZTkgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmMKQEAgLTIwOSw3ICYjNDM7MjA5LDExIEBAIGludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJLyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovCiAJc3Bpbl9sb2NrKCZhbXA7bW0tJmd0O3BhZ2VfdGFibGVfbG9jayk7CiAJaWYgKGxpa2VseSghdm1hLSZndDthbm9uX3ZtYSkpIHsKLQkJdm1hLSZndDthbm9uX3ZtYSA9IGFub25fdm1hOwomIzQzOwkJLyoKJiM0MzsJCSAqIE1ha2UgYW5vbl92bWEgZmllbGRzIHZpc2libGUgYmVmb3JlIGFub25fdm1hIGlzIHB1Ymxpc2hlZC4KJiM0MzsJCSAqIFBhaXJlZCB3aXRoIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLgomIzQzOwkJICovCiYjNDM7CQlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZtYS0mZ3Q7YW5vbl92bWEsIGFub25fdm1hKTsKIAkJYW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7CiAJCWFub25fcm1hcF90cmVlX2luc2VydChhdmMsIGFub25fdm1hKTsKIAkJYW5vbl92bWEtJmd0O251bV9hY3RpdmVfdm1hcyYjNDM7JiM0Mzs7CmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jCmluZGV4IDM1ZTdhNjQ4NTVmYWQuLmVjNDEwMTI1MGQ3MWIgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jCkBAIC0yMDk0LDYgJiM0MzsyMDk0LDEzIEBAIHN0YXRpYyBpbnQgYW5vbl92bWFfY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqCiAgKiBhY2NlcHRhYmxlIGZvciBtZXJnaW5nLCBzbyB3ZSBjYW4gZG8gYWxsIG9mIHRoaXMgb3B0aW1pc3RpY2FsbHkuIEJ1dAogICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLgogICoKJiM0MzsgKiBUaGUgUkVBRF9PTkNFKCkgZXN0YWJsaXNoZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gYW5vbl92bWEgYW5kCiYjNDM7ICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvCiYjNDM7ICogdm1hLSZndDthbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgYXMgYW5vbl92bWEmIzM5O3MgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVIHNvCiYjNDM7ICogYWNjZXNzaW5nIGFuIHVuaW5pdGlhbGlzZWQgYW5vbl92bWEmIzM5O3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuCiYjNDM7ICoKICAqIElPVzogdGhhdCB0aGUgJiMzNDtsaXN0X2lzX3Npbmd1bGFyKCkmIzM0OyB0ZXN0IG9uIHRoZSBhbm9uX3ZtYV9jaGFpbiBvbmx5CiAgKiBtYXR0ZXJzIGZvciB0aGUgJiMzOTtzdGFibGUgYW5vbl92bWEmIzM5OyBjYXNlIChpZSB0aGUgdGhpbmcgd2Ugd2FudCB0byBhdm9pZAogICogaXMgdG8gcmV0dXJuIGFuIGFub25fdm1hIHRoYXQgaXMgJiMzNDtjb21wbGV4JiMzNDsgZHVlIHRvIGhhdmluZyBnb25lIHRocm91Z2gKQEAgLTIxMDgsNiAmIzQzOzIxMTUsNyBAQCBzdGF0aWMgc3RydWN0IGFub25fdm1hICpyZXVzYWJsZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9sZCwKIAkJCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmIpCiB7CiAJaWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHsKJiM0MzsJCS8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovCiAJCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBSRUFEX09OQ0Uob2xkLSZndDthbm9uX3ZtYSk7CiAKIAkJaWYgKGFub25fdm1hICZhbXA7JmFtcDsgbGlzdF9pc19zaW5ndWxhcigmYW1wO29sZC0mZ3Q7YW5vbl92bWFfY2hhaW4pKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gYG1tL3JtYXAuY2AgYW5kIGBtbS92bWEuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgY2VudHJhbCB0byB0aGUgcmV2ZXJzZSBtYXBwaW5nIGFuZCB2aXJ0dWFsIG1lbW9yeSBhcmVhIG1hbmFnZW1lbnQgcmVzcGVjdGl2ZWx5LgoKU3BlY2lmaWNhbGx5LCB0aGUgY29yZSBjaGFuZ2UgaW4gYG1tL3JtYXAuY2AgaXMgdGhlIHJlcGxhY2VtZW50IG9mIGEgc2ltcGxlIGFzc2lnbm1lbnQgKGB2bWEtJmd0O2Fub25fdm1hID0gYW5vbl92bWE7YCkgd2l0aCBgc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2bWEtJmd0O2Fub25fdm1hLCBhbm9uX3ZtYSk7YC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBjb25jdXJyZW5jeSBjb25jZXJuLiBSZXBsYWNpbmcgYSBkaXJlY3QgYXNzaWdubWVudCB3aXRoIGBzbXBfc3RvcmVfcmVsZWFzZWAgc3VnZ2VzdHMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2hhcmVkIGRhdGEgc3RydWN0dXJlIGFuZCBtZW1vcnkgb3JkZXJpbmcgaXMgY3J1Y2lhbC4gVGhlIG9yaWdpbmFsIGFzc2lnbm1lbnQgd2FzIGxpa2VseSBzdXNjZXB0aWJsZSB0byBhIHJhY2UgY29uZGl0aW9uIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktQ1BVIGVudmlyb25tZW50LCBhbmQgdGhpcyBwYXRjaCBhaW1zIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBtZW1vcnkgYmFycmllci4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgcm1hcC5jYCBtdWNoIGJldHRlci4KClRoZSBjaGFuZ2UgaW4gYG1tL3ZtYS5jYCBpcyBqdXN0IHRoZSBhZGRpdGlvbiBvZiBjb21tZW50cyBhcm91bmQgYHJldXNhYmxlX2Fub25fdm1hYCwgd2hpY2ggc3VnZ2VzdHMgaXTigJlzIG5vdCBtb2RpZnlpbmcgdGhlIHN0cnVjdHVyZSwgYnV0IHJhdGhlciBhZGRpbmcgZG9jdW1lbnRhdGlvbiBvciBjbGFyaWZpY2F0aW9uLiBTdGlsbCBpbXBvcnRhbnQsIGJ1dCBsZXNzIGltbWVkaWF0ZWx5IGltcGFjdGZ1bC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwYXRjaC4gSeKAmW0gZ29pbmcgdG8gdXNlIG15IHByZWZlcnJlZCB0b29scywgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgdG8gcXVpY2tseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyByYWNlIGNvbmRpdGlvbiB3YXMgaW50cm9kdWNlZCBhbmQgd2hhdCBwb3RlbnRpYWwgaXNzdWVzIHdlcmUgYWRkcmVzc2VkIGJ5IGVtcGxveWluZyBgc21wX3N0b3JlX3JlbGVhc2VgLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBhZmZlY3RzIHRoZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBob3cgdGhlIGFub255bW91cyB2bWFzIGFyZSBiZWluZyBoYW5kbGVkLiBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYGFub25fdm1hYCBhbmQgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcyB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzLiBUaGlzIGlzIHRoZSBvbmx5IHdheSBJIGNhbiBlbnN1cmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIGFuZCB0aGF0IGl0IHdpbGwgaGF2ZSBubyBuZWdhdGl2ZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9ybWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdFx0aWYgKCFhdmMpXG4gMTk2Olx0XHRcdGdvdG8gb3V0X2Vub21lbTtcbiAxOTc6XHRcbiAxOTg6XHRcdGFub25fdm1hID0gZmluZF9tZXJnZWFibGVfYW5vbl92bWEodm1hKTtcbiAxOTk6XHRcdGFsbG9jYXRlZCA9IE5VTEw7XG4gMjAwOlx0XHRpZiAoIWFub25fdm1hKSB7XG4gMjAxOlx0XHRcdGFub25fdm1hID0gYW5vbl92bWFfYWxsb2MoKTtcbiAyMDI6XHRcdFx0aWYgKHVubGlrZWx5KCFhbm9uX3ZtYSkpXG4gMjAzOlx0XHRcdFx0Z290byBvdXRfZW5vbWVtX2ZyZWVfYXZjO1xuIDIwNDpcdFx0XHRhbm9uX3ZtYS1cdTAwM2VudW1fY2hpbGRyZW4mIzQzOyYjNDM7OyAvKiBzZWxmLXBhcmVudCBsaW5rIGZvciBuZXcgcm9vdCAqL1xuIDIwNTpcdFx0XHRhbGxvY2F0ZWQgPSBhbm9uX3ZtYTtcbiAyMDY6XHRcdH1cbiAyMDc6XHRcbiAyMDg6XHRcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xuIDIwOTpcdFx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXG4gMjEwOlx0XHRzcGluX2xvY2soXHUwMDI2bW0tXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcbiAyMTE6XHRcdGlmIChsaWtlbHkoIXZtYS1cdTAwM2Vhbm9uX3ZtYSkpIHtcbiAyMTI6XHRcdFx0LypcbiAyMTM6XHRcdFx0ICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLlxuIDIxNDpcdFx0XHQgKiBQYWlyZWQgd2l0aCBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgaW4gcmV1c2FibGVfYW5vbl92bWEoKS5cbiAyMTU6XHRcdFx0ICovXG4gMjE2Olx0XHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpO1xuIDIxNzpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbiAyMTg6XHRcdFx0YW5vbl9ybWFwX3RyZWVfaW5zZXJ0KGF2YywgYW5vbl92bWEpO1xuIDIxOTpcdFx0XHRhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMmIzQzOyYjNDM7O1xuIDIyMDpcdFx0XHRhbGxvY2F0ZWQgPSBOVUxMO1xuIDIyMTpcdFx0XHRhdmMgPSBOVUxMO1xuIDIyMjpcdFx0fVxuIDIyMzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW0tXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcbiAyMjQ6XHRcdGFub25fdm1hX3VubG9ja193cml0ZShhbm9uX3ZtYSk7XG4gMjI1Olx0XG4gMjI2Olx0XHRpZiAodW5saWtlbHkoYWxsb2NhdGVkKSlcbiAyMjc6XHRcdFx0cHV0X2Fub25fdm1hKGFsbG9jYXRlZCk7XG4gMjI4Olx0XHRpZiAodW5saWtlbHkoYXZjKSlcbiAyMjk6XHRcdFx0YW5vbl92bWFfY2hhaW5fZnJlZShhdmMpO1xuIDIzMDpcdFxuIDIzMTpcdFx0cmV0dXJuIDA7XG4gMjMyOlx0XG4gMjMzOlx0IG91dF9lbm9tZW1fZnJlZV9hdmM6XG4gMjM0Olx0XHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XG4gMjM1Olx0IG91dF9lbm9tZW06XG4gMjM2Olx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMzc6XHR9XG4gMjM4Olx0XG4gMjM5Olx0c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gMjQwOlx0XHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMjQxOlx0XHRcdFx0XHQgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbiAyNDI6XHR7XG4gMjQzOlx0XHQvKiBUaGUgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuICovXG4gMjQ0Olx0XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVx1MDAzZXZtX21tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODE0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBBbm9ueW1vdXMgVk1BcyBmb3IgUmV1c2FiaWxpdHkqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMsIGFuZCBiYXNlZCBvbiB3aGF0IEkmIzM5O3ZlIHNlZW4gc28gZmFyLCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gYG1tL3ZtYS5jYCBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgcmV1c2FibGVfYW5vbl92bWFgIGFzcGVjdC4gVGhlcmUmIzM5O3MgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCB0aGUgcHJvYmxlbSBtaWdodCBiZSBsdXJraW5nIGFyb3VuZCBob3cgd2UgaGFuZGxlIGFub255bW91cyBWaXJ0dWFsIE1lbW9yeSBBcmVhcyAoVk1BcykgYW5kIHRoZWlyIHJldXNhYmlsaXR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBJJiMzOTt2ZSBtaXNzZWQsIG9yIGFueSBzdWJ0bGUgYmVoYXZpb3IgdGhhdCYjMzk7cyBjb250cmlidXRpbmcgdG8gdGhpcyBidWcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBJIGNhbiBnbGVhbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDkwOlx0ICogTk9URSEgVGhpcyBydW5zIHdpdGggbW1hcF9sb2NrIGhlbGQgZm9yIHJlYWRpbmcsIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXRcbjIwOTE6XHQgKiB0aGUgYW5vbl92bWEgb2YgJiMzOTtvbGQmIzM5OyBpcyBjb25jdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc2V0IHVwXG4yMDkyOlx0ICogYnkgYW5vdGhlciBwYWdlIGZhdWx0IHRyeWluZyB0byBtZXJnZSBfdGhhdF8uIEJ1dCB0aGF0JiMzOTtzIG9rOiBpZiBpdFxuMjA5MzpcdCAqIGlzIGJlaW5nIHNldCB1cCwgdGhhdCBhdXRvbWF0aWNhbGx5IG1lYW5zIHRoYXQgaXQgd2lsbCBiZSBhIHNpbmdsZXRvblxuMjA5NDpcdCAqIGFjY2VwdGFibGUgZm9yIG1lcmdpbmcsIHNvIHdlIGNhbiBkbyBhbGwgb2YgdGhpcyBvcHRpbWlzdGljYWxseS4gQnV0XG4yMDk1Olx0ICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLlxuMjA5NjpcdCAqXG4yMDk3Olx0ICogVGhlIFJFQURfT05DRSgpIGVzdGFibGlzaGVzIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBiZXR3ZWVuIGFub25fdm1hIGFuZFxuMjA5ODpcdCAqIGFueSBhY2Nlc3MgdG8gaXRzIGZpZWxkcywgd2hpY2ggcGFpcnMgd2l0aCB0aGUgYXNzaWdubWVudCB0b1xuMjA5OTpcdCAqIHZtYS1cdTAwM2Vhbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS5cbjIxMDA6XHQgKlxuMjEwMTpcdCAqIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgYXMgYW5vbl92bWEmIzM5O3MgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVIHNvXG4yMTAyOlx0ICogYWNjZXNzaW5nIGFuIHVuaW5pdGlhbGlzZWQgYW5vbl92bWEmIzM5O3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXG4yMTAzOlx0ICpcbjIxMDQ6XHQgKiBJT1c6IHRoYXQgdGhlIFwmIzM0O2xpc3RfaXNfc2luZ3VsYXIoKVwmIzM0OyB0ZXN0IG9uIHRoZSBhbm9uX3ZtYV9jaGFpbiBvbmx5XG4yMTA1Olx0ICogbWF0dGVycyBmb3IgdGhlICYjMzk7c3RhYmxlIGFub25fdm1hJiMzOTsgY2FzZSAoaWUgdGhlIHRoaW5nIHdlIHdhbnQgdG8gYXZvaWRcbjIxMDY6XHQgKiBpcyB0byByZXR1cm4gYW4gYW5vbl92bWEgdGhhdCBpcyBcJiMzNDtjb21wbGV4XCYjMzQ7IGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXG4yMTA3Olx0ICogYSBmb3JrKS5cbjIxMDg6XHQgKlxuMjEwOTpcdCAqIFdlIGFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIHR3byB2bWEmIzM5O3MgYXJlIGNvbXBhdGlibGUgKGFkamFjZW50LFxuMjExMDpcdCAqIGFuZCB3aXRoIHRoZSBzYW1lIG1lbW9yeSBwb2xpY2llcykuIFRoYXQmIzM5O3MgYWxsIHN0YWJsZSwgZXZlbiB3aXRoIGp1c3RcbjIxMTE6XHQgKiBhIHJlYWQgbG9jayBvbiB0aGUgbW1hcF9sb2NrLlxuMjExMjpcdCAqL1xuMjExMzpcdHN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLFxuMjExNDpcdFx0XHRcdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSxcbjIxMTU6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmIpXG4yMTE2Olx0e1xuMjExNzpcdFx0aWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHtcbjIxMTg6XHRcdFx0LyogUGFpcmVkIHdpdGggYSBtZW1vcnkgYmFycmllciBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS4gKi9cbjIxMTk6XHRcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtXHUwMDNlYW5vbl92bWEpO1xuMjEyMDpcdFxuMjEyMTpcdFx0XHRpZiAoYW5vbl92bWEgXHUwMDI2XHUwMDI2IGxpc3RfaXNfc2luZ3VsYXIoXHUwMDI2b2xkLVx1MDAzZWFub25fdm1hX2NoYWluKSlcbjIxMjI6XHRcdFx0XHRyZXR1cm4gYW5vbl92bWE7XG4yMTIzOlx0XHR9XG4yMTI0Olx0XHRyZXR1cm4gTlVMTDtcbjIxMjU6XHR9XG4yMTI2Olx0XG4yMTI3Olx0LypcbjIxMjg6XHQgKiBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSBpcyB1c2VkIGJ5IGFub25fdm1hX3ByZXBhcmUsIHRvIGNoZWNrXG4yMTI5Olx0ICogbmVpZ2hib3VyaW5nIHZtYXMgZm9yIGEgc3VpdGFibGUgYW5vbl92bWEsIGJlZm9yZSBpdCBnb2VzIG9mZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbjogQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSBhbmFseXplIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbWAgKG1lbW9yeSBtYW5hZ2VtZW50KSBzdWJzeXN0ZW0uIFRoZSBrZXkgY2hhbmdlIGlzIGluIGBtbS9ybWFwLmNgOiB0aGV5JiMzOTt2ZSBzd2l0Y2hlZCBhIHNpbXBsZSBhc3NpZ25tZW50IChgdm1hLSZndDthbm9uX3ZtYSA9IGFub25fdm1hO2ApIHRvIGEgcmVsZWFzZSBzdG9yZSAoYHNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7dm1hLSZndDthbm9uX3ZtYSwgYW5vbl92bWEpO2ApIHdpdGhpbiB0aGUgYF9fYW5vbl92bWFfcHJlcGFyZSgpYCBmdW5jdGlvbi4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIHN1cHBvcnRpbmcgY29tbWVudCBhZGRlZCBpbiBgbW0vdm1hLmNgIGFib3V0IG1lbW9yeSBvcmRlcmluZywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgcGFpcmluZyBvZiB0aGUgcmVsZWFzZSBzdG9yZSB3aXRoIGBSRUFEX09OQ0VgIGluIGByZXVzYWJsZV9hbm9uX3ZtYSgpYC4KClRoZSBxdWVzdGlvbiBub3c6IGlzIHRoaXMgd29ydGggZnV6emluZz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjcml0ZXJpYS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGFueXRoaW5nIHRvdWNoaW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbS9gKSBpcyBhIGdvLiBBbHNvLCBJIHNob3VsZG4mIzM5O3QgYmxpbmRseSB0cnVzdCBjbGFpbXMgb2YgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IG9yICYjMzQ7cmVmYWN0b3JpbmcuJiMzNDsKCldlbGwsIHRoaXMgZGVmaW5pdGVseSBtb2RpZmllcyBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIGBtbS9gIGRpcmVjdG9yeSwgYW5kIGl0JiMzOTtzIGEgY2hhbmdlIHRvIHRoZSBzdG9yZSBvcGVyYXRpb24g4oCTIG1ha2luZyBpdCBhIHJlbGVhc2Ugc3RvcmUgbm93LiBTbywgeWVzLCBpdCYjMzk7cyBtb2RpZnlpbmcgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQnV0IGlzIGl0ICphY3R1YWxseSogcmVhY2hhYmxlPwoKT2theSwgc28gYF9fYW5vbl92bWFfcHJlcGFyZWAgZ2V0cyBjYWxsZWQgd2hlbiBhbiBhbm9ueW1vdXMgVk1BIGlzIHByZXBhcmVkLiBUaGF0IHNlZW1zIHByZXR0eSBnZW5lcmFsLCByaWdodD8gUGFnZSBmYXVsdHMsIGBtcHJvdGVjdGAsIGBtYWR2aXNlYC4uLiB0aGVzZSBhcmUgYWxsIGNvbW1vbiBvcGVyYXRpb25zLiBTbywgaXQmIzM5O3MgcHJldHR5IHViaXF1aXRvdXMhCgpXYWl0LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHdhcm4gYWdhaW5zdCBsaXN0aW5nICp1YmlxdWl0b3VzKiBmdW5jdGlvbnMsIGJlY2F1c2UgaXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQuICYjMzQ7QVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTLiYjMzQ7IFRoZXkgd2FudCBtZSB0byAmIzM0O1RBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUyYjMzQ7LiBTbywgSSBuZWVkIHRvIGNoZWNrIHdoYXQgc3BlY2lmaWNhbGx5IGNhbGxzIGBfX2Fub25fdm1hX3ByZXBhcmVgLCB0byBkZWNpZGUgaWYgdGhpcyBpcyB0YXJnZXRpbmcgYSBzcGVjaWZpYyBmZWF0dXJlL2xvZ2ljIGNoYW5nZSwgb3Igd2hldGhlciBpdCYjMzk7cyB0b28gZ2VuZXJpYyB0byBib3RoZXIuIExldCBtZSBzZWUgd2hhdCBmdW5jdGlvbnMgY2FsbCBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYGFub25fdm1hX3ByZXBhcmVgLCBvciB1c2UgYHJldXNhYmxlX2Fub25fdm1hYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IHNwZWNpZmljIGxvZ2ljIGJlaW5nIGNoYW5nZWQgb3IgaWYgaXQgaXMganVzdCBhIHN5bmNocm9uaXphdGlvbiBvcHRpbWl6YXRpb24gaW4gYSB2ZXJ5IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW5vbl92bWFfcHJlcGFyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmMtMTExLSAqICAtXHUwMDNlYW5vbl92bWEubG9ja1xubW0vZmlsZW1hcC5jOjExMjogKiAgICAtXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXHQoYW5vbl92bWFfcHJlcGFyZSBhbmQgdmFyaW91cylcbm1tL2ZpbGVtYXAuYy0xMTMtICpcbi0tXG5tbS9pbnRlcm5hbC5oPTMzNT1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKTtcbm1tL2ludGVybmFsLmg6MzM2OmludCAgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbm1tL2ludGVybmFsLmgtMzM3LXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5tbS9pbnRlcm5hbC5oLTMzOC1cbm1tL2ludGVybmFsLmg6MzM5OnN0YXRpYyBpbmxpbmUgaW50IGFub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9pbnRlcm5hbC5oLTM0MC17XG4tLVxubW0vaW50ZXJuYWwuaC0zNDMtXG5tbS9pbnRlcm5hbC5oOjM0NDpcdHJldHVybiBfX2Fub25fdm1hX3ByZXBhcmUodm1hKTtcbm1tL2ludGVybmFsLmgtMzQ1LX1cbi0tXG5tbS9tYWR2aXNlLmM9MTEyND1zdGF0aWMgbG9uZyBtYWR2aXNlX2d1YXJkX2luc3RhbGwoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTExNTgtXG5tbS9tYWR2aXNlLmM6MTE1OTpcdFx0ZXJyID0gYW5vbl92bWFfcHJlcGFyZSh2bWEpO1xubW0vbWFkdmlzZS5jLTExNjAtXHRcdGlmIChlcnIpXG4tLVxubW0vbWFkdmlzZS5jPTE1NzE9c3RhdGljIGJvb2wgcHJvY2Vzc19tYWR2aXNlX3JlbW90ZV92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1ODMtXG5tbS9tYWR2aXNlLmM6MTU4NDovKiBEb2VzIHRoaXMgb3BlcmF0aW9uIGludm9rZSBhbm9uX3ZtYV9wcmVwYXJlKCk/ICovXG5tbS9tYWR2aXNlLmMtMTU4NS1zdGF0aWMgYm9vbCBwcmVwYXJlc19hbm9uX3ZtYShpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jPTE1OTk9c3RhdGljIGJvb2wgaXNfdm1hX2xvY2tfc3VmZmljaWVudChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tYWR2aXNlLmMtMTYxMS1cdC8qXG5tbS9tYWR2aXNlLmM6MTYxMjpcdCAqIGFub25fdm1hX3ByZXBhcmUoKSBleHBsaWNpdGx5IHJlcXVpcmVzIGFuIG1tYXAgbG9jayBmb3Jcbm1tL21hZHZpc2UuYy0xNjEzLVx0ICogc2VyaWFsaXNhdGlvbiwgc28gd2UgY2Fubm90IHVzZSBhIFZNQSBsb2NrIGluIHRoaXMgY2FzZS5cbi0tXG5tbS9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtMzkzOS0gKiBXaGVuIHByZXBhcmluZyB0byBpbnNlcnQgYW4gYW5vbnltb3VzIHBhZ2UgaW50byBhIFZNQSBmcm9tIGFcbm1tL21lbW9yeS5jOjM5NDA6ICogZmF1bHQgaGFuZGxlciwgY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGFub25fdm1hX3ByZXBhcmUoKS5cbm1tL21lbW9yeS5jLTM5NDEtICogSWYgdGhpcyB2bWEgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGFuIGFzc29jaWF0ZWQgYW5vbl92bWEgYW5kIHdlIGFyZVxubW0vbWVtb3J5LmMtMzk0Mi0gKiBvbmx5IHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgd2l0aCB0aGVcbm1tL21lbW9yeS5jOjM5NDM6ICogbW1hcF9sb2NrIGhlbGQuICBfX2Fub25fdm1hX3ByZXBhcmUoKSB3aWxsIGxvb2sgYXQgYWRqYWNlbnQgVk1BcyB0b1xubW0vbWVtb3J5LmMtMzk0NC0gKiBkZXRlcm1pbmUgaWYgdGhpcyBWTUEgY2FuIHNoYXJlIGl0cyBhbm9uX3ZtYSwgYW5kIHRoYXQmIzM5O3Mgbm90IHNhZmUgdG9cbi0tXG5tbS9tZW1vcnkuYz0zOTUwPXZtX2ZhdWx0X3QgX192bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTM5NjAtXHR9XG5tbS9tZW1vcnkuYzozOTYxOlx0aWYgKF9fYW5vbl92bWFfcHJlcGFyZSh2bWEpKVxubW0vbWVtb3J5LmMtMzk2Mi1cdFx0cmV0ID0gVk1fRkFVTFRfT09NO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9Nzk4PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtODE5LVxubW0vbWlncmF0ZV9kZXZpY2UuYzo4MjA6XHRyZXQgPSBhbm9uX3ZtYV9wcmVwYXJlKHZtYSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTgyMS1cdGlmIChyZXQpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05NzY9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfaW5zZXJ0X3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTAyOC1cdFx0Z290byBhYm9ydDtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTAyOTpcdGlmICh1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDMwLVx0XHRnb3RvIGFib3J0O1xuLS1cbm1tL3JtYXAuYz0xNTA9c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fYXNzaWduKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0xNTktLyoqXG5tbS9ybWFwLmM6MTYwOiAqIF9fYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb25cbm1tL3JtYXAuYy0xNjEtICogQHZtYTogdGhlIG1lbW9yeSByZWdpb24gaW4gcXVlc3Rpb25cbi0tXG5tbS9ybWFwLmMtMTY3LSAqIFRoZSBjb21tb24gY2FzZSB3aWxsIGJlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIG9uZSwgd2hpY2hcbm1tL3JtYXAuYzoxNjg6ICogaXMgaGFuZGxlZCBpbmxpbmUgYnkgYW5vbl92bWFfcHJlcGFyZSgpLiBCdXQgaWZcbm1tL3JtYXAuYy0xNjktICogbm90IHdlIGVpdGhlciBuZWVkIHRvIGZpbmQgYW4gYWRqYWNlbnQgbWFwcGluZyB0aGF0IHdlXG4tLVxubW0vcm1hcC5jLTE4NC0gKi9cbm1tL3JtYXAuYzoxODU6aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL3JtYXAuYy0xODYte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTA5PXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF92bWFfYW5kX3ByZXBhcmVfYW5vbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTExOC1cdGVsc2UgaWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpIFx1MDAyNlx1MDAyNlxubW0vdXNlcmZhdWx0ZmQuYzoxMTk6XHRcdCB1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKVxubW0vdXNlcmZhdWx0ZmQuYy0xMjAtXHRcdHZtYSA9IEVSUl9QVFIoLUVOT01FTSk7XG4tLVxubW0vdm1hLmM9MjA1ND1zdGF0aWMgaW50IGFub25fdm1hX2NvbXBhdGlibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmIpXG4tLVxubW0vdm1hLmMtMjA5OC0gKiBhbnkgYWNjZXNzIHRvIGl0cyBmaWVsZHMsIHdoaWNoIHBhaXJzIHdpdGggdGhlIGFzc2lnbm1lbnQgdG9cbm1tL3ZtYS5jOjIwOTk6ICogdm1hLVx1MDAzZWFub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxubW0vdm1hLmMtMjEwMC0gKlxuLS1cbm1tL3ZtYS5jPTIxMTM9c3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcmV1c2FibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQsXG4tLVxubW0vdm1hLmMtMjExNy1cdGlmIChhbm9uX3ZtYV9jb21wYXRpYmxlKGEsIGIpKSB7XG5tbS92bWEuYzoyMTE4Olx0XHQvKiBQYWlyZWQgd2l0aCBhIG1lbW9yeSBiYXJyaWVyIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLiAqL1xubW0vdm1hLmMtMjExOS1cdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtXHUwMDNlYW5vbl92bWEpO1xuLS1cbm1tL3ZtYS5jLTIxMjctLypcbm1tL3ZtYS5jOjIxMjg6ICogZmluZF9tZXJnZWFibGVfYW5vbl92bWEgaXMgdXNlZCBieSBhbm9uX3ZtYV9wcmVwYXJlLCB0byBjaGVja1xubW0vdm1hLmMtMjEyOS0gKiBuZWlnaGJvdXJpbmcgdm1hcyBmb3IgYSBzdWl0YWJsZSBhbm9uX3ZtYSwgYmVmb3JlIGl0IGdvZXMgb2ZmXG4tLVxubW0vdm1hLmM9MzIzMD1pbnQgZXhwYW5kX3Vwd2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi0tXG5tbS92bWEuYy0zMjcwLVx0LyogV2UgbXVzdCBtYWtlIHN1cmUgdGhlIGFub25fdm1hIGlzIGFsbG9jYXRlZC4gKi9cbm1tL3ZtYS5jOjMyNzE6XHRpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2bWEpKSkge1xubW0vdm1hLmMtMzI3Mi1cdFx0dm1hX2l0ZXJfZnJlZShcdTAwMjZ2bWkpO1xuLS1cbm1tL3ZtYS5jPTMzMTU9aW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi0tXG5tbS92bWEuYy0zMzQ4LVx0LyogV2UgbXVzdCBtYWtlIHN1cmUgdGhlIGFub25fdm1hIGlzIGFsbG9jYXRlZC4gKi9cbm1tL3ZtYS5jOjMzNDk6XHRpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2bWEpKSkge1xubW0vdm1hLmMtMzM1MC1cdFx0dm1hX2l0ZXJfZnJlZShcdTAwMjZ2bWkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQW5vbnltb3VzIFZpcnR1YWwgTWVtb3J5IEFyZWEgTWVyZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYW5kIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBoYW5naW5nIG91dCBpbiBgbW0vcm1hcC5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdGhlIGJpZ2dlciBwaWN0dXJlIGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIHBsYXlpbmcgaW4gdGhpcyBzYW5kYm94LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGFuZCBgcmV1c2FibGVfYW5vbl92bWFgLiBUaG9zZSBzZWVtICpleHRyZW1lbHkqIHJlbGV2YW50LCBhbmQgdGhleSYjMzk7cmUgYXBwYXJlbnRseSBpbiBgbW0vdm1hLmNgLiBUaW1lIHRvIGRpZyBpbnRvIGBtbS92bWEuY2AgYW5kIGdldCBhIGZlZWwgZm9yIGhvdyBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGlzIGFjdHVhbGx5IHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSB3aG9sZSBtZXJnaW5nIHByb2Nlc3MgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMjA6XHRcbjIxMjE6XHRcdFx0aWYgKGFub25fdm1hIFx1MDAyNlx1MDAyNiBsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNm9sZC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpXG4yMTIyOlx0XHRcdFx0cmV0dXJuIGFub25fdm1hO1xuMjEyMzpcdFx0fVxuMjEyNDpcdFx0cmV0dXJuIE5VTEw7XG4yMTI1Olx0fVxuMjEyNjpcdFxuMjEyNzpcdC8qXG4yMTI4Olx0ICogZmluZF9tZXJnZWFibGVfYW5vbl92bWEgaXMgdXNlZCBieSBhbm9uX3ZtYV9wcmVwYXJlLCB0byBjaGVja1xuMjEyOTpcdCAqIG5laWdoYm91cmluZyB2bWFzIGZvciBhIHN1aXRhYmxlIGFub25fdm1hLCBiZWZvcmUgaXQgZ29lcyBvZmZcbjIxMzA6XHQgKiB0byBhbGxvY2F0ZSBhIG5ldyBhbm9uX3ZtYS4gIEl0IGNoZWNrcyBiZWNhdXNlIGEgcmVwZXRpdGl2ZVxuMjEzMTpcdCAqIHNlcXVlbmNlIG9mIG1wcm90ZWN0cyBhbmQgZmF1bHRzIG1heSBvdGhlcndpc2UgbGVhZCB0byBkaXN0aW5jdFxuMjEzMjpcdCAqIGFub25fdm1hcyBiZWluZyBhbGxvY2F0ZWQsIHByZXZlbnRpbmcgdm1hIG1lcmdlIGluIHN1YnNlcXVlbnRcbjIxMzM6XHQgKiBtcHJvdGVjdC5cbjIxMzQ6XHQgKi9cbjIxMzU6XHRzdHJ1Y3QgYW5vbl92bWEgKmZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuMjEzNjpcdHtcbjIxMzc6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBOVUxMO1xuMjEzODpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCAqbmV4dDtcbjIxMzk6XHRcdFZNQV9JVEVSQVRPUih2bWksIHZtYS1cdTAwM2V2bV9tbSwgdm1hLVx1MDAzZXZtX2VuZCk7XG4yMTQwOlx0XG4yMTQxOlx0XHQvKiBUcnkgbmV4dCBmaXJzdC4gKi9cbjIxNDI6XHRcdG5leHQgPSB2bWFfaXRlcl9sb2FkKFx1MDAyNnZtaSk7XG4yMTQzOlx0XHRpZiAobmV4dCkge1xuMjE0NDpcdFx0XHRhbm9uX3ZtYSA9IHJldXNhYmxlX2Fub25fdm1hKG5leHQsIHZtYSwgbmV4dCk7XG4yMTQ1Olx0XHRcdGlmIChhbm9uX3ZtYSlcbjIxNDY6XHRcdFx0XHRyZXR1cm4gYW5vbl92bWE7XG4yMTQ3Olx0XHR9XG4yMTQ4Olx0XG4yMTQ5Olx0XHRwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbjIxNTA6XHRcdFZNX0JVR19PTl9WTUEocHJldiAhPSB2bWEsIHZtYSk7XG4yMTUxOlx0XHRwcmV2ID0gdm1hX3ByZXYoXHUwMDI2dm1pKTtcbjIxNTI6XHRcdC8qIFRyeSBwcmV2IG5leHQuICovXG4yMTUzOlx0XHRpZiAocHJldilcbjIxNTQ6XHRcdFx0YW5vbl92bWEgPSByZXVzYWJsZV9hbm9uX3ZtYShwcmV2LCBwcmV2LCB2bWEpO1xuMjE1NTpcdFxuMjE1NjpcdFx0LypcbjIxNTc6XHRcdCAqIFdlIG1pZ2h0IHJlYWNoIGhlcmUgd2l0aCBhbm9uX3ZtYSA9PSBOVUxMIGlmIHdlIGNhbiYjMzk7dCBmaW5kXG4yMTU4Olx0XHQgKiBhbnkgcmV1c2FibGUgYW5vbl92bWEuXG4yMTU5Olx0XHQgKiBUaGVyZSYjMzk7cyBubyBhYnNvbHV0ZSBuZWVkIHRvIGxvb2sgb25seSBhdCB0b3VjaGluZyBuZWlnaGJvdXJzOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTY1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogYGFub25fdm1hYCBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGlzIGV4cG9ydGVkIG9yIHN0YXRpYy4gVGhpcyBsb29rcyBsaWtlIGl0IGxpdmVzIGluIGBtbS92bWEuY2AsIGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyBpbiBgbW0vcm1hcC5jYC4KCk5vdywgcmVnYXJkaW5nIHRoZSBjaGFuZ2UsIHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIHN3aXRjaCBmcm9tIGEgZGlyZWN0IGFzc2lnbm1lbnQgYHZtYS0mZ3Q7YW5vbl92bWEgPSBhbm9uX3ZtYTtgIHRvIGBzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZtYS0mZ3Q7YW5vbl92bWEsIGFub25fdm1hKTtgIHdpdGhpbiBgX19hbm9uX3ZtYV9wcmVwYXJlYC4gVGhpcyBpcyBpbiB0aGUgY29yZSBNTSBjb2RlLCBgbW0vcm1hcC5jYC4gVGhlIGNvcmUgcXVlc3Rpb24gaGVyZSwgb2J2aW91c2x5LCBpcyB3aGV0aGVyIHRoaXMgbW9kaWZpY2F0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBzbXBfc3RvcmVfcmVsZWFzZWAsIGNvdWxkIGludHJvZHVjZSBhbiBleHBsb2l0YWJsZSByYWNlIGNvbmRpdGlvbi4KCk5leHQgc3RlcDogYXNzZXNzIHJlYWNoYWJpbGl0eS4gRG9lcyB0aGlzIGNoYW5nZSBhZmZlY3QgZXhlY3V0YWJsZSBjb2RlIHRoYXTigJlzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBpbiB0aGUgZmllbGQ/IENvbnNpZGVyaW5nIHRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQsIGBfX2Fub25fdm1hX3ByZXBhcmUoKWAgaXMgY2FsbGVkIGR1cmluZyBhbm9ueW1vdXMgbWVtb3J5IGhhbmRsaW5nLCBwYWdlIGZhdWx0cywgbWFkdmlzZSwgbXByb3RlY3QsIGFuZCBwb3RlbnRpYWxseSBtaWdyYXRlX3ZtYSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGNvZGUgaXMgcmVndWxhcmx5IGV4ZXJjaXNlZCBpbiBtb3N0IGVudmlyb25tZW50cy4gQm90aCBgbW0vcm1hcC5jYCBhbmQgYG1tL3ZtYS5jYCBhcmUgY29yZSBrZXJuZWwgY29tcG9uZW50cywgc28gdGhleSBhcmUgYWx3YXlzIGNvbXBpbGVkIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUuCgpGaW5hbGx5LCBjb25maWd1cmF0aW9uLiBBcmUgdGhlcmUgYW55IHVudXN1YWwga2VybmVsIGNvbmZpZ3MgdGhhdCB0aGlzIHJlbGllcyBvbj8gSSBuZWVkIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm1hcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS0zOS1cdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbm1tL01ha2VmaWxlOjQwOlx0XHRcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xubW0vTWFrZWZpbGUtNDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzQwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZToKCioqQ2hlY2tpbmcgTU1VIENvbmZpZ3VyYXRpb24gYW5kIFJlbGF0ZWQgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBsaW5lOiBgbW11LSQoQ09ORklHX01NVSkgOj0gLi4uIHJtYXAubyAuLi4gdm1hLm9gLiBSaWdodCBhd2F5LCBJIHNlZSB0aGlzIGlzIGxpbmtpbmcgb2JqZWN0IGZpbGVzIGJhc2VkIG9uIHRoZSBgQ09ORklHX01NVWAgdmFyaWFibGUuIFRoYXQmIzM5O3MgcHJldHR5IHN0YW5kYXJkIGZvciBhbnkgYXJjaGl0ZWN0dXJlIHdpdGggYSBNZW1vcnkgTWFuYWdlbWVudCBVbml0LCBsaWtlIHg4NiBvciBhbWQ2NC4gQnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjb25zaWRlcmluZyBhbGwgcG9zc2liaWxpdGllcy4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBpbiBwbGF5IGhlcmU/IEFyZSB0aGVyZSBhbnkgbGVzcyBjb21tb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbiYjMzk7dCBmaXQgdGhlIHR5cGljYWwgbW9sZD8gSSBuZWVkIHRvIGNvbnNpZGVyIGFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb25zIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNjZW5hcmlvcy4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcywgSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHVzYWdlcyBvZiB0aGUgYF9fYW5vbl92bWFfcHJlcGFyZWAgb3IgYHJldXNhYmxlX2Fub25fdm1hYCBzeW1ib2xzLiBUaGVzZSBhcmUgb2Z0ZW4gaW5kaWNhdG9ycyBvZiBob3cgYW5vbnltb3VzIFZpcnR1YWwgTWVtb3J5IEFyZWFzIChWTUFzKSBhcmUgaGFuZGxlZC4gQ2hlY2tpbmcgZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhlc2Ugc3ltYm9scyB3aWxsIGltbWVkaWF0ZWx5IHJldmVhbCBob3cgdGhlIE1NVSBjb25maWd1cmF0aW9uIGltcGFjdHMgdGhlIFZNQSBoYW5kbGluZy4gVGhpcyB3aWxsIGhlbHAgbWUgY29uZmlybSB0aGUgYnJlYWR0aCBvZiB0aGUgYENPTkZJR19NTVVgJiMzOTtzIGluZmx1ZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbm9uX3ZtYV9wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MzM1PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpO1xubW0vaW50ZXJuYWwuaDozMzY6aW50ICBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xubW0vaW50ZXJuYWwuaC0zMzctdm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5tbS9pbnRlcm5hbC5oPTMzOT1zdGF0aWMgaW5saW5lIGludCBhbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2ludGVybmFsLmgtMzQzLVxubW0vaW50ZXJuYWwuaDozNDQ6XHRyZXR1cm4gX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSk7XG5tbS9pbnRlcm5hbC5oLTM0NS19XG4tLVxubW0vbWVtb3J5LmM9MzkyNT1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Nhbl9jYWxsX2ZhdWx0KGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTM5NDItICogb25seSBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgdGhlIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlXG5tbS9tZW1vcnkuYzozOTQzOiAqIG1tYXBfbG9jayBoZWxkLiAgX19hbm9uX3ZtYV9wcmVwYXJlKCkgd2lsbCBsb29rIGF0IGFkamFjZW50IFZNQXMgdG9cbm1tL21lbW9yeS5jLTM5NDQtICogZGV0ZXJtaW5lIGlmIHRoaXMgVk1BIGNhbiBzaGFyZSBpdHMgYW5vbl92bWEsIGFuZCB0aGF0JiMzOTtzIG5vdCBzYWZlIHRvXG4tLVxubW0vbWVtb3J5LmM9Mzk1MD12bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy0zOTYwLVx0fVxubW0vbWVtb3J5LmM6Mzk2MTpcdGlmIChfX2Fub25fdm1hX3ByZXBhcmUodm1hKSlcbm1tL21lbW9yeS5jLTM5NjItXHRcdHJldCA9IFZNX0ZBVUxUX09PTTtcbi0tXG5tbS9ybWFwLmM9MTUwPXN0YXRpYyB2b2lkIGFub25fdm1hX2NoYWluX2Fzc2lnbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMTU5LS8qKlxubW0vcm1hcC5jOjE2MDogKiBfX2Fub25fdm1hX3ByZXBhcmUgLSBhdHRhY2ggYW4gYW5vbl92bWEgdG8gYSBtZW1vcnkgcmVnaW9uXG5tbS9ybWFwLmMtMTYxLSAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uXG4tLVxubW0vcm1hcC5jLTE4NC0gKi9cbm1tL3JtYXAuYzoxODU6aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL3JtYXAuYy0xODYte1xuLS1cbm1tL3ZtYS5jPTIwNTQ9c3RhdGljIGludCBhbm9uX3ZtYV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpiKVxuLS1cbm1tL3ZtYS5jLTIwOTgtICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvXG5tbS92bWEuYzoyMDk5OiAqIHZtYS1cdTAwM2Vhbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS5cbm1tL3ZtYS5jLTIxMDAtICpcbi0tXG5tbS92bWEuYz0yMTEzPXN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLFxuLS1cbm1tL3ZtYS5jLTIxMTctXHRpZiAoYW5vbl92bWFfY29tcGF0aWJsZShhLCBiKSkge1xubW0vdm1hLmM6MjExODpcdFx0LyogUGFpcmVkIHdpdGggYSBtZW1vcnkgYmFycmllciBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS4gKi9cbm1tL3ZtYS5jLTIxMTktXHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWFub25fdm1hKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NDUKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogNDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCYjMzk7cyBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoYXQgdGhlIHByZXJlcXVpc2l0ZXMgYXJlIHNhdGlzZmllZC4gYF9fYW5vbl92bWFfcHJlcGFyZWAgaXMgaW4gYG1tL3JtYXAuY2AsIHdoaWNoLCBhcyBleHBlY3RlZCwgb25seSByZXF1aXJlcyB0aGUgYE1NVWAgZmVhdHVyZS4gR29vZCwgdGhlIGBNTVVgIGNvbmZpZ3VyYXRpb24gaXMgc3RhbmRhcmQsIHNvIHdlIGNhbiBzZXQgdGhhdCBjb25maWRlbnRseS4gSSYjMzk7bGwgdXNlIGBNTVVgIGV4cGxpY2l0bHksIHRob3VnaCBhbiBlbXB0eSBlbnRyeSBtaWdodCBhbHNvIHdvcmsgYnkgZGVmYXVsdC4KCk5vdyBmb3IgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGUgY29yZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UgYXJlIHdoYXQgSSB3YW50IHRvIG5haWwgZG93biBmb3IgdGVzdGluZy4gYF9fYW5vbl92bWFfcHJlcGFyZWAgaXMgdGhlIGtleSBmdW5jdGlvbiB0aGF0IHdhcyBkaXJlY3RseSBtb2RpZmllZCwgd2hlcmUgdGhhdCBgc21wX3N0b3JlX3JlbGVhc2VgIHdhcyBhZGRlZC4gVGhlbiB0aGVyZSYjMzk7cyBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgLCB3aGljaCBjYWxscyBgcmV1c2FibGVfYW5vbl92bWFgICh3aGljaCwgaW1wb3J0YW50bHksIGlzIHN0YXRpYyksIGFuZCBpdCYjMzk7cyBhbHNvIHJlZmVyZW5jZWQgaW4gdGhlIHBhdGNoIGNvbW1lbnRzIGluIHJlbGF0aW9uIHRvIHRoZSBzeW5jaHJvbml6YXRpb24uIEZpbmFsbHksIGBfX3ZtZl9hbm9uX3ByZXBhcmVgLCB3aGljaCBjYWxscyBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyBpbXBvcnRhbnQgYXMgdGhlIGNhbGxpbmcgZnVuY3Rpb24uCgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY29tbW9uIG9yIHNwZWNpZmljLiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyBwcmV0dHkgc3BlY2lmaWMgdG8gdGhlIHByb2Nlc3Mgb2Ygc2V0dGluZyB1cCBhbm9ueW1vdXMgdmlydHVhbCBtZW1vcnkgYXJlYXM7IGl0JiMzOTtzIG5vdCBjYWxsZWQgb24gZXZlcnkgaG90IHBhdGgsIG9ubHkgd2hlbiBhbGxvY2F0aW5nIG9yIHByZXBhcmluZyB0aGVzZSBhbm9ueW1vdXMgVk1Bcy4gYGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hYCBpcyBsZXNzIHNwZWNpZmljIGluIGNvbmNlcHQgYnV0IGlzIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50IHRvIHRoZSBhbHRlcmVkIGxvZ2ljLCBnaXZlbiB0aGUgc3RhdGljIG5hdHVyZSBvZiBgcmV1c2FibGVfYW5vbl92bWFgLgoKTG9va2luZyBhdCBvdGhlciBmdW5jdGlvbnMsIEkgc2VlIHRoYXQgYHJldXNhYmxlX2Fub25fdm1hYCBpcyBzdGF0aWMsIGRlZmluZWQgaW4gYG1tL3ZtYS5jYCwgYW5kIG9ubHkgY2FsbGVkIGJ5IGBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYWAuIFRoaXMgcmVpbmZvcmNlcyB0aGUgaW1wb3J0YW5jZSBvZiBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGFuZCBgX19hbm9uX3ZtYV9wcmVwYXJlYCBhcyB0aGUgaW1wb3J0YW50IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRvIHRlc3QuCgpTbywgYWNjb3JkaW5nIHRvIG15IHJldmlldywgdGhlIGZ1enppbmcgcHJvcGVydGllcyBvZiB0aGlzIHBhdGNoIHNob3VsZCBiZToKCiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAgKGFic29sdXRlbHkpCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYFsmIzM0O01NVSYjMzQ7XWAKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbJiMzNDtfX2Fub25fdm1hX3ByZXBhcmUmIzM0OywgJiMzNDtmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSYjMzQ7XWAKCkkmIzM5O2xsIHByb2NlZWQgdG8gdGhlIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYW5vbl92bWFfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBfX2Fub25fdm1hX3ByZXBhcmUoKSBpbiBtbS9ybWFwLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgd2hlbiBwdWJsaXNoaW5nIHZtYS1cdTAwM2Vhbm9uX3ZtYSwgcHJvcGVybHkgcGFpcmluZyB3aXRoIGxvY2tsZXNzIFJFQURfT05DRSgpIHJlYWRzIGFuZCBhZGRyZXNzIGRlcGVuZGVuY2llcyBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpIChjYWxsZWQgdmlhIGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKCkpLiBCZWNhdXNlIHRoaXMgYWx0ZXJzIG1lbW9yeSBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBjb25jdXJyZW5jeSBhbm9tYWxpZXMgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fYW5vbl92bWFfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBfX2Fub25fdm1hX3ByZXBhcmUoKSBpbiBtbS9ybWFwLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgd2hlbiBwdWJsaXNoaW5nIHZtYS1cdTAwM2Vhbm9uX3ZtYSwgcHJvcGVybHkgcGFpcmluZyB3aXRoIGxvY2tsZXNzIFJFQURfT05DRSgpIHJlYWRzIGFuZCBhZGRyZXNzIGRlcGVuZGVuY2llcyBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpIChjYWxsZWQgdmlhIGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKCkpLiBCZWNhdXNlIHRoaXMgYWx0ZXJzIG1lbW9yeSBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBjb25jdXJyZW5jeSBhbm9tYWxpZXMgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS9ybWFwLmMgYW5kIG1tL3ZtYS5jIHRvIHVzZSBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKSBpbnN0ZWFkIG9mIGEgcGxhaW4gYXNzaWdubWVudCBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKSwgZW5zdXJpbmcgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyB3aXRoIFJFQURfT05DRSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBvbiBTTEFCX1RZUEVTQUZFX0JZX1JDVSBvYmplY3RzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGxlbmd0aCBtb2RpZmljYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGNvcGllcy9pbmZvbGVha3MuIENvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzg1Y2IyMGNkMzYzNzk5ZWMwYzZkNGExMjU3OWI3ZmJiZTcxNjQ5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTU6MzQ6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggZDE4MTlmZDY5OTM4MC4uZjNiMjFhYWEzNGVlOSAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMjA5LDcgJiM0MzsyMDksMTEgQEAgaW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi8KIAlzcGluX2xvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKTsKIAlpZiAobGlrZWx5KCF2bWEtJmd0O2Fub25fdm1hKSkgewotCQl2bWEtJmd0O2Fub25fdm1hID0gYW5vbl92bWE7CiYjNDM7CQkvKgomIzQzOwkJICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLgomIzQzOwkJICogUGFpcmVkIHdpdGggYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGluIHJldXNhYmxlX2Fub25fdm1hKCkuCiYjNDM7CQkgKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7dm1hLSZndDthbm9uX3ZtYSwgYW5vbl92bWEpOwogCQlhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTsKIAkJYW5vbl9ybWFwX3RyZWVfaW5zZXJ0KGF2YywgYW5vbl92bWEpOwogCQlhbm9uX3ZtYS0mZ3Q7bnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzOzsKZGlmZiAtLWdpdCBhL21tL3ZtYS5jIGIvbW0vdm1hLmMKaW5kZXggMzVlN2E2NDg1NWZhZC4uZWM0MTAxMjUwZDcxYiAxMDA2NDQKLS0tIGEvbW0vdm1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hLmMKQEAgLTIwOTQsNiAmIzQzOzIwOTQsMTMgQEAgc3RhdGljIGludCBhbm9uX3ZtYV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoKICAqIGFjY2VwdGFibGUgZm9yIG1lcmdpbmcsIHNvIHdlIGNhbiBkbyBhbGwgb2YgdGhpcyBvcHRpbWlzdGljYWxseS4gQnV0CiAgKiB3ZSBkbyB0aGF0IFJFQURfT05DRSgpIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIG5ldmVyIHJlLWxvYWQgdGhlIHBvaW50ZXIuCiAgKgomIzQzOyAqIFRoZSBSRUFEX09OQ0UoKSBlc3RhYmxpc2hlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgYmV0d2VlbiBhbm9uX3ZtYSBhbmQKJiM0MzsgKiBhbnkgYWNjZXNzIHRvIGl0cyBmaWVsZHMsIHdoaWNoIHBhaXJzIHdpdGggdGhlIGFzc2lnbm1lbnQgdG8KJiM0MzsgKiB2bWEtJmd0O2Fub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhcyBhbm9uX3ZtYSYjMzk7cyBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1Ugc28KJiM0MzsgKiBhY2Nlc3NpbmcgYW4gdW5pbml0aWFsaXNlZCBhbm9uX3ZtYSYjMzk7cyBmaWVsZHMgbWF5IHJlc3VsdCBpbiBhIFVBRi4KJiM0MzsgKgogICogSU9XOiB0aGF0IHRoZSAmIzM0O2xpc3RfaXNfc2luZ3VsYXIoKSYjMzQ7IHRlc3Qgb24gdGhlIGFub25fdm1hX2NoYWluIG9ubHkKICAqIG1hdHRlcnMgZm9yIHRoZSAmIzM5O3N0YWJsZSBhbm9uX3ZtYSYjMzk7IGNhc2UgKGllIHRoZSB0aGluZyB3ZSB3YW50IHRvIGF2b2lkCiAgKiBpcyB0byByZXR1cm4gYW4gYW5vbl92bWEgdGhhdCBpcyAmIzM0O2NvbXBsZXgmIzM0OyBkdWUgdG8gaGF2aW5nIGdvbmUgdGhyb3VnaApAQCAtMjEwOCw2ICYjNDM7MjExNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLAogCQkJCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYikKIHsKIAlpZiAoYW5vbl92bWFfY29tcGF0aWJsZShhLCBiKSkgewomIzQzOwkJLyogUGFpcmVkIHdpdGggYSBtZW1vcnkgYmFycmllciBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS4gKi8KIAkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtJmd0O2Fub25fdm1hKTsKIAogCQlpZiAoYW5vbl92bWEgJmFtcDsmYW1wOyBsaXN0X2lzX3Npbmd1bGFyKCZhbXA7b2xkLSZndDthbm9uX3ZtYV9jaGFpbikpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1tL3JtYXAuY2AgYW5kIGBtbS92bWEuY2AgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkaXZlIGludG8gdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYG1tL3JtYXAuY2AgYW5kIGBtbS92bWEuY2AgYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGZvciBpdC4gVGhhdCYjMzk7cyBmaW5lOyBsZXQmIzM5O3MgZ2V0IHJpZ2h0IHRvIGl0LiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhlIGNoYW5nZSBiZWZvcmUganVtcGluZyBpbnRvIGFueSBjb25jbHVzaW9ucy4gTGV0JiMzOTtzIGRpZyBpbi4KCkl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgc3luY2hyb25pemF0aW9uIGFuZCB2aXNpYmlsaXR5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYW5vbl92bWFgIHN0cnVjdHVyZS4gSW4gYG1tL3JtYXAuY2AsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgaW4gYF9fYW5vbl92bWFfcHJlcGFyZWAsIHdoZXJlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBgdm1hLSZndDthbm9uX3ZtYSA9IGFub25fdm1hO2AgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2bWEtJmd0O2Fub25fdm1hLCBhbm9uX3ZtYSk7YC4gVGhleSYjMzk7dmUgYWxzbyBhZGRlZCBhIGNvbW1lbnQgdGhhdCBmbGFncyB0aGF0IHRoZSBgYW5vbl92bWFgIGZpZWxkcyBuZWVkIHRvIGJlIHZpc2libGUgYmVmb3JlIGBhbm9uX3ZtYWAgaXMgYWN0dWFsbHkgcHVibGlzaGVkIGFuZCB0aGF0IHRoaXMgY2hhbmdlIGlzIHBhaXJlZCB3aXRoIGFuIGFkZHJlc3MgZGVwZW5kZW5jeS4KCk5vdywgaW4gYG1tL3ZtYS5jYCwgYHJldXNhYmxlX2Fub25fdm1hYCBnb3Qgc29tZSB1cGRhdGVkIGNvbW1lbnRzLCBzcGVjaWZpY2FsbHkgY2FsbGluZyBvdXQgdGhhdCB0aGUgYFJFQURfT05DRSgpYCBlc3RhYmxpc2hlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgYmV0d2VlbiBgYW5vbl92bWFgIGFuZCBhbnkgYWNjZXNzIHRvIGl0cyBmaWVsZHMuIFRoZSBjb21tZW50IGFsc28gcG9pbnRzIG91dCB0aGF0IHRoaXMgcGFpcmluZyBpcyB2ZXJ5IGltcG9ydGFudCBiZWNhdXNlIGBhbm9uX3ZtYWAgdXNlcyBgU0xBQl9UWVBFU0FGRV9CWV9SQ1VgLCBzbyB1bmluaXRpYWxpemVkIGZpZWxkcyB3b3VsZCBjYXVzZSBhIFVzZS1BZnRlci1GcmVlIChVQUYpIHNpdHVhdGlvbi4gCgpTbyBpdCYjMzk7cyBhbGwgYWJvdXQgbWVtb3J5IGJhcnJpZXJzLCBkYXRhIGRlcGVuZGVuY2llcywgYW5kIHByZXZlbnRpbmcgVUFGIGJ1Z3MuIFRoaXMgYHNtcF9zdG9yZV9yZWxlYXNlYCB3aXRoIGEgcGFpcmVkIGBSRUFEX09OQ0UoKWAgc2VlbXMgdG8gYmUgZXN0YWJsaXNoaW5nIGEgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyB0byBlbnN1cmUgdGhhdCB3aGVuIHdlIGFjY2VzcyB0aGUgYGFub25fdm1hYCBmaWVsZHMgaW4gYHJldXNhYmxlX2Fub25fdm1hYCwgdGhleSBhcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgYW5kIHNhZmUgdG8gdXNlLgoKT2theSwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGZ1bGwgY29udGV4dC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB0ZWxsIGlmIEtNU0FOIG5lZWRzIHNvbWUgZGVkaWNhdGVkIGF0dGVudGlvbi4gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcm1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHQgKiBBcyBhIHJlc3VsdCwgd2UgbmVlZCB0byBkbyBwcm9wZXIgYW5vbl92bWEgbG9ja2luZyBldmVuXG4gMTgxOlx0ICogZm9yIHRoZSBuZXcgYWxsb2NhdGlvbi4gQXQgdGhlIHNhbWUgdGltZSwgd2UgZG8gbm90IHdhbnRcbiAxODI6XHQgKiB0byBkbyBhbnkgbG9ja2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIGFscmVhZHkgaGF2aW5nXG4gMTgzOlx0ICogYW4gYW5vbl92bWEuXG4gMTg0Olx0ICovXG4gMTg1Olx0aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAxODY6XHR7XG4gMTg3Olx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cdTAwM2V2bV9tbTtcbiAxODg6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEsICphbGxvY2F0ZWQ7XG4gMTg5Olx0XHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YztcbiAxOTA6XHRcbiAxOTE6XHRcdG1tYXBfYXNzZXJ0X2xvY2tlZChtbSk7XG4gMTkyOlx0XHRtaWdodF9zbGVlcCgpO1xuIDE5MzpcdFxuIDE5NDpcdFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XG4gMTk1Olx0XHRpZiAoIWF2YylcbiAxOTY6XHRcdFx0Z290byBvdXRfZW5vbWVtO1xuIDE5NzpcdFxuIDE5ODpcdFx0YW5vbl92bWEgPSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSh2bWEpO1xuIDE5OTpcdFx0YWxsb2NhdGVkID0gTlVMTDtcbiAyMDA6XHRcdGlmICghYW5vbl92bWEpIHtcbiAyMDE6XHRcdFx0YW5vbl92bWEgPSBhbm9uX3ZtYV9hbGxvYygpO1xuIDIwMjpcdFx0XHRpZiAodW5saWtlbHkoIWFub25fdm1hKSlcbiAyMDM6XHRcdFx0XHRnb3RvIG91dF9lbm9tZW1fZnJlZV9hdmM7XG4gMjA0Olx0XHRcdGFub25fdm1hLVx1MDAzZW51bV9jaGlsZHJlbiYjNDM7JiM0Mzs7IC8qIHNlbGYtcGFyZW50IGxpbmsgZm9yIG5ldyByb290ICovXG4gMjA1Olx0XHRcdGFsbG9jYXRlZCA9IGFub25fdm1hO1xuIDIwNjpcdFx0fVxuIDIwNzpcdFxuIDIwODpcdFx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XG4gMjA5Olx0XHQvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi9cbiAyMTA6XHRcdHNwaW5fbG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIDIxMTpcdFx0aWYgKGxpa2VseSghdm1hLVx1MDAzZWFub25fdm1hKSkge1xuIDIxMjpcdFx0XHQvKlxuIDIxMzpcdFx0XHQgKiBNYWtlIGFub25fdm1hIGZpZWxkcyB2aXNpYmxlIGJlZm9yZSBhbm9uX3ZtYSBpcyBwdWJsaXNoZWQuXG4gMjE0Olx0XHRcdCAqIFBhaXJlZCB3aXRoIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLlxuIDIxNTpcdFx0XHQgKi9cbiAyMTY6XHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dm1hLVx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSk7XG4gMjE3Olx0XHRcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xuIDIxODpcdFx0XHRhbm9uX3JtYXBfdHJlZV9pbnNlcnQoYXZjLCBhbm9uX3ZtYSk7XG4gMjE5Olx0XHRcdGFub25fdm1hLVx1MDAzZW51bV9hY3RpdmVfdm1hcyYjNDM7JiM0Mzs7XG4gMjIwOlx0XHRcdGFsbG9jYXRlZCA9IE5VTEw7XG4gMjIxOlx0XHRcdGF2YyA9IE5VTEw7XG4gMjIyOlx0XHR9XG4gMjIzOlx0XHRzcGluX3VubG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIDIyNDpcdFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFub25fdm1hKTtcbiAyMjU6XHRcbiAyMjY6XHRcdGlmICh1bmxpa2VseShhbGxvY2F0ZWQpKVxuIDIyNzpcdFx0XHRwdXRfYW5vbl92bWEoYWxsb2NhdGVkKTtcbiAyMjg6XHRcdGlmICh1bmxpa2VseShhdmMpKVxuIDIyOTpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XG4gMjMwOlx0XG4gMjMxOlx0XHRyZXR1cm4gMDtcbiAyMzI6XHRcbiAyMzM6XHQgb3V0X2Vub21lbV9mcmVlX2F2YzpcbiAyMzQ6XHRcdGFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTtcbiAyMzU6XHQgb3V0X2Vub21lbTpcbiAyMzY6XHRcdHJldHVybiAtRU5PTUVNO1xuIDIzNzpcdH1cbiAyMzg6XHRcbiAyMzk6XHRzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vdm1hLmNgIC0gYHJldXNhYmxlX2Fub25fdm1hYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgemVybyBpbiBvbiBgbW0vdm1hLmNgIGFnYWluLiBJJiMzOTt2ZSBnb3QgYSBodW5jaCwgYW5kIGl0JiMzOTtzIGFyb3VuZCBob3cgd2UgaGFuZGxlIGFub255bW91cyBWTUFzIGFuZCB0aGVpciByZXVzYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgYHJldXNhYmxlX2Fub25fdm1hYCBhc3BlY3QuIFRoZXJlJiMzOTtzIGEgcGFydGljdWxhciBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQsIGFuZCBJIGJlbGlldmUgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlIGhvbGRzIHRoZSBrZXkgdG8gdGhlIHNvbHV0aW9uLiBJIGtub3cgdGhlcmUgaGF2ZSBiZWVuIHN1YnRsZSBzaGlmdHMgaW4gdGhlIGJlaGF2aW91ciBhcm91bmQgcmVjbGFpbWluZyBhbm9ueW1vdXMgbWVtb3J5IHJlY2VudGx5LCBlc3BlY2lhbGx5IGluIGhpZ2hseSBjb250ZXN0ZWQgbWVtb3J5IHNjZW5hcmlvcywgYW5kIEkgc3VzcGVjdCB0aGVzZSBmdW5jdGlvbiBjYWxscyB3aWxsIGJlIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIGFuZCBzZWUgaWYgbXkgaW50dWl0aW9uIGhvbGRzIGFueSB3YXRlci4gVGhpcyBmdW5jdGlvbiBpbiBwYXJ0aWN1bGFyIGhhcyBiZWVuIHRvdWNoZWQgaW4gc2V2ZXJhbCBwYXRjaCBzZXRzLCBhbmQgSSB3b25kZXIgd2hhdCBhbGwgdGhlIGNodXJuIGlzIGFib3V0LiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBjYWxsIHBhdGggdGhyb3VnaCB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA4MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yMDgxOlx0XHRyZXR1cm4gdHJ1ZTtcbjIwODI6XHR9XG4yMDgzOlx0XG4yMDg0Olx0LypcbjIwODU6XHQgKiBEbyBzb21lIGJhc2ljIHNhbml0eSBjaGVja2luZyB0byBzZWUgaWYgd2UgY2FuIHJlLXVzZSB0aGUgYW5vbl92bWFcbjIwODY6XHQgKiBmcm9tICYjMzk7b2xkJiMzOTsuIFRoZSAmIzM5O2EmIzM5Oy8mIzM5O2ImIzM5OyB2bWEmIzM5O3MgYXJlIGluIFZNIG9yZGVyIC0gb25lIG9mIHRoZW0gd2lsbCBiZVxuMjA4NzpcdCAqIHRoZSBzYW1lIGFzICYjMzk7b2xkJiMzOTssIHRoZSBvdGhlciB3aWxsIGJlIHRoZSBuZXcgb25lIHRoYXQgaXMgdHJ5aW5nXG4yMDg4Olx0ICogdG8gc2hhcmUgdGhlIGFub25fdm1hLlxuMjA4OTpcdCAqXG4yMDkwOlx0ICogTk9URSEgVGhpcyBydW5zIHdpdGggbW1hcF9sb2NrIGhlbGQgZm9yIHJlYWRpbmcsIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXRcbjIwOTE6XHQgKiB0aGUgYW5vbl92bWEgb2YgJiMzOTtvbGQmIzM5OyBpcyBjb25jdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc2V0IHVwXG4yMDkyOlx0ICogYnkgYW5vdGhlciBwYWdlIGZhdWx0IHRyeWluZyB0byBtZXJnZSBfdGhhdF8uIEJ1dCB0aGF0JiMzOTtzIG9rOiBpZiBpdFxuMjA5MzpcdCAqIGlzIGJlaW5nIHNldCB1cCwgdGhhdCBhdXRvbWF0aWNhbGx5IG1lYW5zIHRoYXQgaXQgd2lsbCBiZSBhIHNpbmdsZXRvblxuMjA5NDpcdCAqIGFjY2VwdGFibGUgZm9yIG1lcmdpbmcsIHNvIHdlIGNhbiBkbyBhbGwgb2YgdGhpcyBvcHRpbWlzdGljYWxseS4gQnV0XG4yMDk1Olx0ICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLlxuMjA5NjpcdCAqXG4yMDk3Olx0ICogVGhlIFJFQURfT05DRSgpIGVzdGFibGlzaGVzIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBiZXR3ZWVuIGFub25fdm1hIGFuZFxuMjA5ODpcdCAqIGFueSBhY2Nlc3MgdG8gaXRzIGZpZWxkcywgd2hpY2ggcGFpcnMgd2l0aCB0aGUgYXNzaWdubWVudCB0b1xuMjA5OTpcdCAqIHZtYS1cdTAwM2Vhbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS5cbjIxMDA6XHQgKlxuMjEwMTpcdCAqIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgYXMgYW5vbl92bWEmIzM5O3MgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVIHNvXG4yMTAyOlx0ICogYWNjZXNzaW5nIGFuIHVuaW5pdGlhbGlzZWQgYW5vbl92bWEmIzM5O3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXG4yMTAzOlx0ICpcbjIxMDQ6XHQgKiBJT1c6IHRoYXQgdGhlIFwmIzM0O2xpc3RfaXNfc2luZ3VsYXIoKVwmIzM0OyB0ZXN0IG9uIHRoZSBhbm9uX3ZtYV9jaGFpbiBvbmx5XG4yMTA1Olx0ICogbWF0dGVycyBmb3IgdGhlICYjMzk7c3RhYmxlIGFub25fdm1hJiMzOTsgY2FzZSAoaWUgdGhlIHRoaW5nIHdlIHdhbnQgdG8gYXZvaWRcbjIxMDY6XHQgKiBpcyB0byByZXR1cm4gYW4gYW5vbl92bWEgdGhhdCBpcyBcJiMzNDtjb21wbGV4XCYjMzQ7IGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXG4yMTA3Olx0ICogYSBmb3JrKS5cbjIxMDg6XHQgKlxuMjEwOTpcdCAqIFdlIGFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIHR3byB2bWEmIzM5O3MgYXJlIGNvbXBhdGlibGUgKGFkamFjZW50LFxuMjExMDpcdCAqIGFuZCB3aXRoIHRoZSBzYW1lIG1lbW9yeSBwb2xpY2llcykuIFRoYXQmIzM5O3MgYWxsIHN0YWJsZSwgZXZlbiB3aXRoIGp1c3RcbjIxMTE6XHQgKiBhIHJlYWQgbG9jayBvbiB0aGUgbW1hcF9sb2NrLlxuMjExMjpcdCAqL1xuMjExMzpcdHN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLFxuMjExNDpcdFx0XHRcdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSxcbjIxMTU6XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmIpXG4yMTE2Olx0e1xuMjExNzpcdFx0aWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHtcbjIxMTg6XHRcdFx0LyogUGFpcmVkIHdpdGggYSBtZW1vcnkgYmFycmllciBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS4gKi9cbjIxMTk6XHRcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtXHUwMDNlYW5vbl92bWEpO1xuMjEyMDpcdFxuMjEyMTpcdFx0XHRpZiAoYW5vbl92bWEgXHUwMDI2XHUwMDI2IGxpc3RfaXNfc2luZ3VsYXIoXHUwMDI2b2xkLVx1MDAzZWFub25fdm1hX2NoYWluKSlcbjIxMjI6XHRcdFx0XHRyZXR1cm4gYW5vbl92bWE7XG4yMTIzOlx0XHR9XG4yMTI0Olx0XHRyZXR1cm4gTlVMTDtcbjIxMjU6XHR9XG4yMTI2Olx0XG4yMTI3Olx0LypcbjIxMjg6XHQgKiBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSBpcyB1c2VkIGJ5IGFub25fdm1hX3ByZXBhcmUsIHRvIGNoZWNrXG4yMTI5Olx0ICogbmVpZ2hib3VyaW5nIHZtYXMgZm9yIGEgc3VpdGFibGUgYW5vbl92bWEsIGJlZm9yZSBpdCBnb2VzIG9mZlxuMjEzMDpcdCAqIHRvIGFsbG9jYXRlIGEgbmV3IGFub25fdm1hLiAgSXQgY2hlY2tzIGJlY2F1c2UgYSByZXBldGl0aXZlXG4yMTMxOlx0ICogc2VxdWVuY2Ugb2YgbXByb3RlY3RzIGFuZCBmYXVsdHMgbWF5IG90aGVyd2lzZSBsZWFkIHRvIGRpc3RpbmN0XG4yMTMyOlx0ICogYW5vbl92bWFzIGJlaW5nIGFsbG9jYXRlZCwgcHJldmVudGluZyB2bWEgbWVyZ2UgaW4gc3Vic2VxdWVudFxuMjEzMzpcdCAqIG1wcm90ZWN0LlxuMjEzNDpcdCAqL1xuMjEzNTpcdHN0cnVjdCBhbm9uX3ZtYSAqZmluZF9tZXJnZWFibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4yMTM2Olx0e1xuMjEzNzpcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IE5VTEw7XG4yMTM4Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsICpuZXh0O1xuMjEzOTpcdFx0Vk1BX0lURVJBVE9SKHZtaSwgdm1hLVx1MDAzZXZtX21tLCB2bWEtXHUwMDNldm1fZW5kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTU6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyMgoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiA3NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBSZXF1aXJlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIGNvcmUgY2hhbmdlIGlzIGluIGBtbS9ybWFwLmNgLCB3aGVyZSBhIHBsYWluIHN0b3JlIHRvIGB2bWEtJmd0O2Fub25fdm1hYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZtYS0mZ3Q7YW5vbl92bWEsIGFub25fdm1hKTtgLiBUaGVyZSBhcmUgYWxzbyBzb21lIGNvbW1lbnQgdXBkYXRlcyBpbiBgbW0vdm1hLmNgLCB3aGljaCBpcyBnb29kIHRvIHNlZSwgY2xhcmlmeWluZyB0aGUgbWVtb3J5IGJhcnJpZXIgaW1wbGljYXRpb25zIGFsb25nc2lkZSBgUkVBRF9PTkNFYCBpbiBgcmV1c2FibGVfYW5vbl92bWFgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhZGRyZXNzaW5nIGEgbWVtb3J5IG9yZGVyaW5nIGlzc3VlLiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGxlYWQgdG8gYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYHZtYS0mZ3Q7YW5vbl92bWFgIHBvaW50ZXIgaXMgcHVibGlzaGVkIHRvIG90aGVyIHRocmVhZHMgKmJlZm9yZSogdGhlIGZpZWxkcyB3aXRoaW4gYGFub25fdm1hYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBhIG1lbW9yeSBvcmRlcmluZyBwZXJzcGVjdGl2ZS4gVGhpcyBpcyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8sIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gVXNlLUFmdGVyLUZyZWUgKFVBRikgaXNzdWVzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IG9mIFJDVS1tYW5hZ2VkIFNMQUIgY2FjaGVzLCB3aGljaCB0aGUgY29tbWVudCBjb3JyZWN0bHkgcG9pbnRzIG91dCAoYFNMQUJfVFlQRVNBRkVfQllfUkNVYCkuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcmVxdWlyZSBLTVNBTj8gTGV0JiMzOTtzIGNoZWNrIHRoZSBydWxlcy4gVGhlIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG1lYW5pbmcgbm8gYGNvcHlfdG9fdXNlcmAgcHJvYmxlbXMuIEl0IGFsc28gZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIG1vc3QgaW1wb3J0YW50bHksIGl0IGlzbiYjMzk7dCBLTVNBTi1kZXRlY3RhYmxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhpcyBwYXRjaCAqaXMqIGFib3V0IG1lbW9yeSBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uLCBpdCYjMzk7cyB0cnVlLiBCdXQgdGhlIHBvdGVudGlhbCBidWdzIGFyZSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlcyDigJMgcmFjZXMsIHVzZS1hZnRlci1mcmVlIOKAkyB0aGluZ3MgdGhhdCBzaG91bGQgYmUgcmVhZGlseSBjYXVnaHQgYnkgS0FTQU4sIEtDU0FOLCBvciBMT0NLREVQLiBJdCBpcyBleHBsaWNpdGx5IHN0YXRlZCB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMgYW5kIHNob3VsZCAqb25seSogYmUgdXNlZCBmb3IgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MuIEdpdmVuIHRoYXQgdGhpcyBwYXRjaCBkZWFscyB3aXRoIG1lbW9yeSBvcmRlcmluZywgYnV0ICpub3QqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LgoKVGhlcmVmb3JlLCBteSByZWFzb25pbmcgaXMgdGhpczogVGhlIHBhdGNoIGNvcnJlY3RseSBhZGRyZXNzZXMgYSBtZW1vcnkgb3JkZXJpbmcgcmFjZSBjb25kaXRpb24gd2hlbiBwdWJsaXNoaW5nIGBhbm9uX3ZtYWAgdG8gY29uY3VycmVudCByZWFkZXJzIHRoYXQgY291bGQgbGVhZCB0byBVc2UtQWZ0ZXItRnJlZSBpc3N1ZXMsIGFuZCBlbnN1cmVzIHByb3BlciBpbml0aWFsaXphdGlvbiB1c2luZyBgc21wX3N0b3JlX3JlbGVhc2VgLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgY3JlYXRlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBidWZmZXIgYm91bmRzLCBhbmQgaXQgKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocy4gVGhlIGJ1Z3MgaXQgcG90ZW50aWFsbHkgZml4ZXMgZmFsbCBpbnRvIHRoZSBLQVNBTi9LQ1NBTi9MT0NLREVQIGNhdGVnb3J5LiBTbywgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWxsIHRvb2wgcGFyYW1ldGVycyBhbmQgbWFrZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS9ybWFwLmMgYW5kIG1tL3ZtYS5jIHRvIHVzZSBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKSBpbnN0ZWFkIG9mIGEgcGxhaW4gYXNzaWdubWVudCBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKSwgZW5zdXJpbmcgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyB3aXRoIFJFQURfT05DRSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBvbiBTTEFCX1RZUEVTQUZFX0JZX1JDVSBvYmplY3RzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGxlbmd0aCBtb2RpZmljYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGNvcGllcy9pbmZvbGVha3MuIENvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbW0vcm1hcC5jIGFuZCBtbS92bWEuYyB0byB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dm1hLVx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSkgaW5zdGVhZCBvZiBhIHBsYWluIGFzc2lnbm1lbnQgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCksIGVuc3VyaW5nIHByb3BlciBtZW1vcnkgb3JkZXJpbmcgd2l0aCBSRUFEX09OQ0UgaW4gcmV1c2FibGVfYW5vbl92bWEoKS4gVGhpcyBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgb24gU0xBQl9UWVBFU0FGRV9CWV9SQ1Ugb2JqZWN0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBsZW5ndGggbW9kaWZpY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3BpZXMvaW5mb2xlYWtzLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzQ6NTQuMDUxMzI3NjUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1ODYyNjI1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19hbm9uX3ZtYV9wcmVwYXJlXCIsXG4gICAgXCJmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW0vcm1hcC5jIGFuZCBtbS92bWEuYyB0byB1c2Ugc21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnZtYS1cXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKSBpbnN0ZWFkIG9mIGEgcGxhaW4gYXNzaWdubWVudCBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKSwgZW5zdXJpbmcgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyB3aXRoIFJFQURfT05DRSBpbiByZXVzYWJsZV9hbm9uX3ZtYSgpLiBUaGlzIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBvbiBTTEFCX1RZUEVTQUZFX0JZX1JDVSBvYmplY3RzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgbGVuZ3RoIG1vZGlmaWNhdGlvbnMsIG9yIGtlcm5lbC10by11c2Vyc3BhY2UgY29waWVzL2luZm9sZWFrcy4gQ29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL0tDU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgX19hbm9uX3ZtYV9wcmVwYXJlKCkgaW4gbW0vcm1hcC5jIHRvIHVzZSBzbXBfc3RvcmVfcmVsZWFzZSgpIHdoZW4gcHVibGlzaGluZyB2bWEtXFx1MDAzZWFub25fdm1hLCBwcm9wZXJseSBwYWlyaW5nIHdpdGggbG9ja2xlc3MgUkVBRF9PTkNFKCkgcmVhZHMgYW5kIGFkZHJlc3MgZGVwZW5kZW5jaWVzIGluIHJldXNhYmxlX2Fub25fdm1hKCkgKGNhbGxlZCB2aWEgZmluZF9tZXJnZWFibGVfYW5vbl92bWEoKSkuIEJlY2F1c2UgdGhpcyBhbHRlcnMgbWVtb3J5IG9yZGVyaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgZnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IGNvbmN1cnJlbmN5IGFub21hbGllcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzQ6NTQuMDUxMzMyOTUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxNTc3OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzg1Y2IyMGNkMzYzNzk5ZWMwYzZkNGExMjU3OWI3ZmJiZTcxNjQ5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE1OjM0OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xcbmluZGV4IGQxODE5ZmQ2OTkzODAuLmYzYjIxYWFhMzRlZTkgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTIwOSw3ICsyMDksMTEgQEAgaW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2bW0tXFx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XFxuIFxcdGlmIChsaWtlbHkoIXZtYS1cXHUwMDNlYW5vbl92bWEpKSB7XFxuLVxcdFxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLlxcbitcXHRcXHQgKiBQYWlyZWQgd2l0aCBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgaW4gcmV1c2FibGVfYW5vbl92bWEoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2bWEtXFx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSk7XFxuIFxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xcbiBcXHRcXHRhbm9uX3JtYXBfdHJlZV9pbnNlcnQoYXZjLCBhbm9uX3ZtYSk7XFxuIFxcdFxcdGFub25fdm1hLVxcdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xcbmluZGV4IDM1ZTdhNjQ4NTVmYWQuLmVjNDEwMTI1MGQ3MWIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hLmNcXG4rKysgYi9tbS92bWEuY1xcbkBAIC0yMDk0LDYgKzIwOTQsMTMgQEAgc3RhdGljIGludCBhbm9uX3ZtYV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpcXG4gICogYWNjZXB0YWJsZSBmb3IgbWVyZ2luZywgc28gd2UgY2FuIGRvIGFsbCBvZiB0aGlzIG9wdGltaXN0aWNhbGx5LiBCdXRcXG4gICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLlxcbiAgKlxcbisgKiBUaGUgUkVBRF9PTkNFKCkgZXN0YWJsaXNoZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gYW5vbl92bWEgYW5kXFxuKyAqIGFueSBhY2Nlc3MgdG8gaXRzIGZpZWxkcywgd2hpY2ggcGFpcnMgd2l0aCB0aGUgYXNzaWdubWVudCB0b1xcbisgKiB2bWEtXFx1MDAzZWFub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxcbisgKlxcbisgKiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGFzIGFub25fdm1hJ3MgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVIHNvXFxuKyAqIGFjY2Vzc2luZyBhbiB1bmluaXRpYWxpc2VkIGFub25fdm1hJ3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXFxuKyAqXFxuICAqIElPVzogdGhhdCB0aGUgXFxcImxpc3RfaXNfc2luZ3VsYXIoKVxcXCIgdGVzdCBvbiB0aGUgYW5vbl92bWFfY2hhaW4gb25seVxcbiAgKiBtYXR0ZXJzIGZvciB0aGUgJ3N0YWJsZSBhbm9uX3ZtYScgY2FzZSAoaWUgdGhlIHRoaW5nIHdlIHdhbnQgdG8gYXZvaWRcXG4gICogaXMgdG8gcmV0dXJuIGFuIGFub25fdm1hIHRoYXQgaXMgXFxcImNvbXBsZXhcXFwiIGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXFxuQEAgLTIxMDgsNiArMjExNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYilcXG4ge1xcbiBcXHRpZiAoYW5vbl92bWFfY29tcGF0aWJsZShhLCBiKSkge1xcbitcXHRcXHQvKiBQYWlyZWQgd2l0aCBhIG1lbW9yeSBiYXJyaWVyIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLiAqL1xcbiBcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlYW5vbl92bWEpO1xcbiBcXG4gXFx0XFx0aWYgKGFub25fdm1hIFxcdTAwMjZcXHUwMDI2IGxpc3RfaXNfc2luZ3VsYXIoXFx1MDAyNm9sZC1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNDo1NS43MzM4ODM3NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4NDQyODU3NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYW5vbl92bWFfcHJlcGFyZVwiLFxuICAgIFwiZmluZF9tZXJnZWFibGVfYW5vbl92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX2Fub25fdm1hX3ByZXBhcmUoKSBpbiBtbS9ybWFwLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgd2hlbiBwdWJsaXNoaW5nIHZtYS1cXHUwMDNlYW5vbl92bWEsIHByb3Blcmx5IHBhaXJpbmcgd2l0aCBsb2NrbGVzcyBSRUFEX09OQ0UoKSByZWFkcyBhbmQgYWRkcmVzcyBkZXBlbmRlbmNpZXMgaW4gcmV1c2FibGVfYW5vbl92bWEoKSAoY2FsbGVkIHZpYSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSgpKS4gQmVjYXVzZSB0aGlzIGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBmdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgY29uY3VycmVuY3kgYW5vbWFsaWVzIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4NWNiMjBjZDM2Mzc5OWVjMGM2ZDRhMTI1NzliN2ZiYmU3MTY0OWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE1OjM0OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCBkMTgxOWZkNjk5MzgwLi5mM2IyMWFhYTM0ZWU5IDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC0yMDksNyArMjA5LDExIEBAIGludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHQvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIFx0aWYgKGxpa2VseSghdm1hLVx1MDAzZWFub25fdm1hKSkge1xuLVx0XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbitcdFx0LypcbitcdFx0ICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLlxuK1x0XHQgKiBQYWlyZWQgd2l0aCBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgaW4gcmV1c2FibGVfYW5vbl92bWEoKS5cbitcdFx0ICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpO1xuIFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbiBcdFx0YW5vbl9ybWFwX3RyZWVfaW5zZXJ0KGF2YywgYW5vbl92bWEpO1xuIFx0XHRhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcbmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jXG5pbmRleCAzNWU3YTY0ODU1ZmFkLi5lYzQxMDEyNTBkNzFiIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbisrKyBiL21tL3ZtYS5jXG5AQCAtMjA5NCw2ICsyMDk0LDEzIEBAIHN0YXRpYyBpbnQgYW5vbl92bWFfY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqXG4gICogYWNjZXB0YWJsZSBmb3IgbWVyZ2luZywgc28gd2UgY2FuIGRvIGFsbCBvZiB0aGlzIG9wdGltaXN0aWNhbGx5LiBCdXRcbiAgKiB3ZSBkbyB0aGF0IFJFQURfT05DRSgpIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIG5ldmVyIHJlLWxvYWQgdGhlIHBvaW50ZXIuXG4gICpcbisgKiBUaGUgUkVBRF9PTkNFKCkgZXN0YWJsaXNoZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gYW5vbl92bWEgYW5kXG4rICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvXG4rICogdm1hLVx1MDAzZWFub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxuKyAqXG4rICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhcyBhbm9uX3ZtYSdzIGFyZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSBzb1xuKyAqIGFjY2Vzc2luZyBhbiB1bmluaXRpYWxpc2VkIGFub25fdm1hJ3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXG4rICpcbiAgKiBJT1c6IHRoYXQgdGhlIFwibGlzdF9pc19zaW5ndWxhcigpXCIgdGVzdCBvbiB0aGUgYW5vbl92bWFfY2hhaW4gb25seVxuICAqIG1hdHRlcnMgZm9yIHRoZSAnc3RhYmxlIGFub25fdm1hJyBjYXNlIChpZSB0aGUgdGhpbmcgd2Ugd2FudCB0byBhdm9pZFxuICAqIGlzIHRvIHJldHVybiBhbiBhbm9uX3ZtYSB0aGF0IGlzIFwiY29tcGxleFwiIGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXG5AQCAtMjEwOCw2ICsyMTE1LDcgQEAgc3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcmV1c2FibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpiKVxuIHtcbiBcdGlmIChhbm9uX3ZtYV9jb21wYXRpYmxlKGEsIGIpKSB7XG4rXHRcdC8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovXG4gXHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWFub25fdm1hKTtcbiBcbiBcdFx0aWYgKGFub25fdm1hIFx1MDAyNlx1MDAyNiBsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNm9sZC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNDo1NS43MzM4ODYwODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTkyNjcyMjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gYG1tL3JtYXAuY2AgYW5kIGBtbS92bWEuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgY2VudHJhbCB0byB0aGUgcmV2ZXJzZSBtYXBwaW5nIGFuZCB2aXJ0dWFsIG1lbW9yeSBhcmVhIG1hbmFnZW1lbnQgcmVzcGVjdGl2ZWx5LlxuXG5TcGVjaWZpY2FsbHksIHRoZSBjb3JlIGNoYW5nZSBpbiBgbW0vcm1hcC5jYCBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYSBzaW1wbGUgYXNzaWdubWVudCAoYHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO2ApIHdpdGggYHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgY29uY2Vybi4gUmVwbGFjaW5nIGEgZGlyZWN0IGFzc2lnbm1lbnQgd2l0aCBgc21wX3N0b3JlX3JlbGVhc2VgIHN1Z2dlc3RzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGEgc2hhcmVkIGRhdGEgc3RydWN0dXJlIGFuZCBtZW1vcnkgb3JkZXJpbmcgaXMgY3J1Y2lhbC4gVGhlIG9yaWdpbmFsIGFzc2lnbm1lbnQgd2FzIGxpa2VseSBzdXNjZXB0aWJsZSB0byBhIHJhY2UgY29uZGl0aW9uIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktQ1BVIGVudmlyb25tZW50LCBhbmQgdGhpcyBwYXRjaCBhaW1zIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBtZW1vcnkgYmFycmllci4gSeKAmWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgcm1hcC5jYCBtdWNoIGJldHRlci5cblxuVGhlIGNoYW5nZSBpbiBgbW0vdm1hLmNgIGlzIGp1c3QgdGhlIGFkZGl0aW9uIG9mIGNvbW1lbnRzIGFyb3VuZCBgcmV1c2FibGVfYW5vbl92bWFgLCB3aGljaCBzdWdnZXN0cyBpdOKAmXMgbm90IG1vZGlmeWluZyB0aGUgc3RydWN0dXJlLCBidXQgcmF0aGVyIGFkZGluZyBkb2N1bWVudGF0aW9uIG9yIGNsYXJpZmljYXRpb24uIFN0aWxsIGltcG9ydGFudCwgYnV0IGxlc3MgaW1tZWRpYXRlbHkgaW1wYWN0ZnVsLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwYXRjaC4gSeKAmW0gZ29pbmcgdG8gdXNlIG15IHByZWZlcnJlZCB0b29scywgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgdG8gcXVpY2tseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyByYWNlIGNvbmRpdGlvbiB3YXMgaW50cm9kdWNlZCBhbmQgd2hhdCBwb3RlbnRpYWwgaXNzdWVzIHdlcmUgYWRkcmVzc2VkIGJ5IGVtcGxveWluZyBgc21wX3N0b3JlX3JlbGVhc2VgLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBhZmZlY3RzIHRoZSB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBob3cgdGhlIGFub255bW91cyB2bWFzIGFyZSBiZWluZyBoYW5kbGVkLiBJ4oCZbGwgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYGFub25fdm1hYCBhbmQgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcyB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzLiBUaGlzIGlzIHRoZSBvbmx5IHdheSBJIGNhbiBlbnN1cmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIGFuZCB0aGF0IGl0IHdpbGwgaGF2ZSBubyBuZWdhdGl2ZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNTowMi4zMjY1NjE0MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzA1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcm1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NTpcXHRcXHRpZiAoIWF2YylcXG4gMTk2OlxcdFxcdFxcdGdvdG8gb3V0X2Vub21lbTtcXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0YW5vbl92bWEgPSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSh2bWEpO1xcbiAxOTk6XFx0XFx0YWxsb2NhdGVkID0gTlVMTDtcXG4gMjAwOlxcdFxcdGlmICghYW5vbl92bWEpIHtcXG4gMjAxOlxcdFxcdFxcdGFub25fdm1hID0gYW5vbl92bWFfYWxsb2MoKTtcXG4gMjAyOlxcdFxcdFxcdGlmICh1bmxpa2VseSghYW5vbl92bWEpKVxcbiAyMDM6XFx0XFx0XFx0XFx0Z290byBvdXRfZW5vbWVtX2ZyZWVfYXZjO1xcbiAyMDQ6XFx0XFx0XFx0YW5vbl92bWEtXFx1MDAzZW51bV9jaGlsZHJlbisrOyAvKiBzZWxmLXBhcmVudCBsaW5rIGZvciBuZXcgcm9vdCAqL1xcbiAyMDU6XFx0XFx0XFx0YWxsb2NhdGVkID0gYW5vbl92bWE7XFxuIDIwNjpcXHRcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbiAyMDk6XFx0XFx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXFxuIDIxMDpcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbiAyMTE6XFx0XFx0aWYgKGxpa2VseSghdm1hLVxcdTAwM2Vhbm9uX3ZtYSkpIHtcXG4gMjEyOlxcdFxcdFxcdC8qXFxuIDIxMzpcXHRcXHRcXHQgKiBNYWtlIGFub25fdm1hIGZpZWxkcyB2aXNpYmxlIGJlZm9yZSBhbm9uX3ZtYSBpcyBwdWJsaXNoZWQuXFxuIDIxNDpcXHRcXHRcXHQgKiBQYWlyZWQgd2l0aCBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgaW4gcmV1c2FibGVfYW5vbl92bWEoKS5cXG4gMjE1OlxcdFxcdFxcdCAqL1xcbiAyMTY6XFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnZtYS1cXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKTtcXG4gMjE3OlxcdFxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xcbiAyMTg6XFx0XFx0XFx0YW5vbl9ybWFwX3RyZWVfaW5zZXJ0KGF2YywgYW5vbl92bWEpO1xcbiAyMTk6XFx0XFx0XFx0YW5vbl92bWEtXFx1MDAzZW51bV9hY3RpdmVfdm1hcysrO1xcbiAyMjA6XFx0XFx0XFx0YWxsb2NhdGVkID0gTlVMTDtcXG4gMjIxOlxcdFxcdFxcdGF2YyA9IE5VTEw7XFxuIDIyMjpcXHRcXHR9XFxuIDIyMzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bW0tXFx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XFxuIDIyNDpcXHRcXHRhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYW5vbl92bWEpO1xcbiAyMjU6XFx0XFxuIDIyNjpcXHRcXHRpZiAodW5saWtlbHkoYWxsb2NhdGVkKSlcXG4gMjI3OlxcdFxcdFxcdHB1dF9hbm9uX3ZtYShhbGxvY2F0ZWQpO1xcbiAyMjg6XFx0XFx0aWYgKHVubGlrZWx5KGF2YykpXFxuIDIyOTpcXHRcXHRcXHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdHJldHVybiAwO1xcbiAyMzI6XFx0XFxuIDIzMzpcXHQgb3V0X2Vub21lbV9mcmVlX2F2YzpcXG4gMjM0OlxcdFxcdGFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTtcXG4gMjM1OlxcdCBvdXRfZW5vbWVtOlxcbiAyMzY6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDIzNzpcXHR9XFxuIDIzODpcXHRcXG4gMjM5OlxcdHN0YXRpYyB2b2lkIGNoZWNrX2Fub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxcbiAyNDA6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbiAyNDE6XFx0XFx0XFx0XFx0XFx0IGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXFxuIDI0MjpcXHR7XFxuIDI0MzpcXHRcXHQvKiBUaGUgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuICovXFxuIDI0NDpcXHRcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVxcdTAwM2V2bV9tbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE1OjM1OjAyLjMyNjg5NDU1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTcwOTI0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQW5vbnltb3VzIFZNQXMgZm9yIFJldXNhYmlsaXR5KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcywgYW5kIGJhc2VkIG9uIHdoYXQgSSd2ZSBzZWVuIHNvIGZhciwgSSB0aGluayBpdCdzIHRpbWUgdG8gZGlnIGludG8gYG1tL3ZtYS5jYCBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgcmV1c2FibGVfYW5vbl92bWFgIGFzcGVjdC4gVGhlcmUncyBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IHRoZSBwcm9ibGVtIG1pZ2h0IGJlIGx1cmtpbmcgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgYW5vbnltb3VzIFZpcnR1YWwgTWVtb3J5IEFyZWFzIChWTUFzKSBhbmQgdGhlaXIgcmV1c2FiaWxpdHkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9ucyB0aGVyZSBhbmQgc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgSSd2ZSBtaXNzZWQsIG9yIGFueSBzdWJ0bGUgYmVoYXZpb3IgdGhhdCdzIGNvbnRyaWJ1dGluZyB0byB0aGlzIGJ1Zy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGluc2lnaHRzIEkgY2FuIGdsZWFuIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODE0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNTowNC4zODM5ODk2NjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA5MDpcXHQgKiBOT1RFISBUaGlzIHJ1bnMgd2l0aCBtbWFwX2xvY2sgaGVsZCBmb3IgcmVhZGluZywgc28gaXQgaXMgcG9zc2libGUgdGhhdFxcbjIwOTE6XFx0ICogdGhlIGFub25fdm1hIG9mICdvbGQnIGlzIGNvbmN1cnJlbnRseSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzZXQgdXBcXG4yMDkyOlxcdCAqIGJ5IGFub3RoZXIgcGFnZSBmYXVsdCB0cnlpbmcgdG8gbWVyZ2UgX3RoYXRfLiBCdXQgdGhhdCdzIG9rOiBpZiBpdFxcbjIwOTM6XFx0ICogaXMgYmVpbmcgc2V0IHVwLCB0aGF0IGF1dG9tYXRpY2FsbHkgbWVhbnMgdGhhdCBpdCB3aWxsIGJlIGEgc2luZ2xldG9uXFxuMjA5NDpcXHQgKiBhY2NlcHRhYmxlIGZvciBtZXJnaW5nLCBzbyB3ZSBjYW4gZG8gYWxsIG9mIHRoaXMgb3B0aW1pc3RpY2FsbHkuIEJ1dFxcbjIwOTU6XFx0ICogd2UgZG8gdGhhdCBSRUFEX09OQ0UoKSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBuZXZlciByZS1sb2FkIHRoZSBwb2ludGVyLlxcbjIwOTY6XFx0ICpcXG4yMDk3OlxcdCAqIFRoZSBSRUFEX09OQ0UoKSBlc3RhYmxpc2hlcyBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgYmV0d2VlbiBhbm9uX3ZtYSBhbmRcXG4yMDk4OlxcdCAqIGFueSBhY2Nlc3MgdG8gaXRzIGZpZWxkcywgd2hpY2ggcGFpcnMgd2l0aCB0aGUgYXNzaWdubWVudCB0b1xcbjIwOTk6XFx0ICogdm1hLVxcdTAwM2Vhbm9uX3ZtYSBwZXJmb3JtZWQgd2l0aCByZWxlYXNlIHNlbWFudGljcyBpbiBfX2Fub25fdm1hX3ByZXBhcmUoKS5cXG4yMTAwOlxcdCAqXFxuMjEwMTpcXHQgKiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGFzIGFub25fdm1hJ3MgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVIHNvXFxuMjEwMjpcXHQgKiBhY2Nlc3NpbmcgYW4gdW5pbml0aWFsaXNlZCBhbm9uX3ZtYSdzIGZpZWxkcyBtYXkgcmVzdWx0IGluIGEgVUFGLlxcbjIxMDM6XFx0ICpcXG4yMTA0OlxcdCAqIElPVzogdGhhdCB0aGUgXFxcImxpc3RfaXNfc2luZ3VsYXIoKVxcXCIgdGVzdCBvbiB0aGUgYW5vbl92bWFfY2hhaW4gb25seVxcbjIxMDU6XFx0ICogbWF0dGVycyBmb3IgdGhlICdzdGFibGUgYW5vbl92bWEnIGNhc2UgKGllIHRoZSB0aGluZyB3ZSB3YW50IHRvIGF2b2lkXFxuMjEwNjpcXHQgKiBpcyB0byByZXR1cm4gYW4gYW5vbl92bWEgdGhhdCBpcyBcXFwiY29tcGxleFxcXCIgZHVlIHRvIGhhdmluZyBnb25lIHRocm91Z2hcXG4yMTA3OlxcdCAqIGEgZm9yaykuXFxuMjEwODpcXHQgKlxcbjIxMDk6XFx0ICogV2UgYWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUgdHdvIHZtYSdzIGFyZSBjb21wYXRpYmxlIChhZGphY2VudCxcXG4yMTEwOlxcdCAqIGFuZCB3aXRoIHRoZSBzYW1lIG1lbW9yeSBwb2xpY2llcykuIFRoYXQncyBhbGwgc3RhYmxlLCBldmVuIHdpdGgganVzdFxcbjIxMTE6XFx0ICogYSByZWFkIGxvY2sgb24gdGhlIG1tYXBfbG9jay5cXG4yMTEyOlxcdCAqL1xcbjIxMTM6XFx0c3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcmV1c2FibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQsXFxuMjExNDpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSxcXG4yMTE1OlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpiKVxcbjIxMTY6XFx0e1xcbjIxMTc6XFx0XFx0aWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHtcXG4yMTE4OlxcdFxcdFxcdC8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovXFxuMjExOTpcXHRcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlYW5vbl92bWEpO1xcbjIxMjA6XFx0XFxuMjEyMTpcXHRcXHRcXHRpZiAoYW5vbl92bWEgXFx1MDAyNlxcdTAwMjYgbGlzdF9pc19zaW5ndWxhcihcXHUwMDI2b2xkLVxcdTAwM2Vhbm9uX3ZtYV9jaGFpbikpXFxuMjEyMjpcXHRcXHRcXHRcXHRyZXR1cm4gYW5vbl92bWE7XFxuMjEyMzpcXHRcXHR9XFxuMjEyNDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMTI1OlxcdH1cXG4yMTI2OlxcdFxcbjIxMjc6XFx0LypcXG4yMTI4OlxcdCAqIGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hIGlzIHVzZWQgYnkgYW5vbl92bWFfcHJlcGFyZSwgdG8gY2hlY2tcXG4yMTI5OlxcdCAqIG5laWdoYm91cmluZyB2bWFzIGZvciBhIHN1aXRhYmxlIGFub25fdm1hLCBiZWZvcmUgaXQgZ29lcyBvZmZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6MDQuMzg0MTU2MzgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzI4MzY1MTc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uOiBBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSBhbmFseXplIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbWAgKG1lbW9yeSBtYW5hZ2VtZW50KSBzdWJzeXN0ZW0uIFRoZSBrZXkgY2hhbmdlIGlzIGluIGBtbS9ybWFwLmNgOiB0aGV5J3ZlIHN3aXRjaGVkIGEgc2ltcGxlIGFzc2lnbm1lbnQgKGB2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtgKSB0byBhIHJlbGVhc2Ugc3RvcmUgKGBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKTtgKSB3aXRoaW4gdGhlIGBfX2Fub25fdm1hX3ByZXBhcmUoKWAgZnVuY3Rpb24uIFRoZXJlJ3MgYWxzbyBzb21lIHN1cHBvcnRpbmcgY29tbWVudCBhZGRlZCBpbiBgbW0vdm1hLmNgIGFib3V0IG1lbW9yeSBvcmRlcmluZywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgcGFpcmluZyBvZiB0aGUgcmVsZWFzZSBzdG9yZSB3aXRoIGBSRUFEX09OQ0VgIGluIGByZXVzYWJsZV9hbm9uX3ZtYSgpYC5cblxuVGhlIHF1ZXN0aW9uIG5vdzogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNyaXRlcmlhLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogYW55dGhpbmcgdG91Y2hpbmcgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL2ApIGlzIGEgZ28uIEFsc28sIEkgc2hvdWxkbid0IGJsaW5kbHkgdHJ1c3QgY2xhaW1zIG9mIFwibm8gZnVuY3Rpb25hbCBjaGFuZ2VcIiBvciBcInJlZmFjdG9yaW5nLlwiXG5cbldlbGwsIHRoaXMgZGVmaW5pdGVseSBtb2RpZmllcyBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIGBtbS9gIGRpcmVjdG9yeSwgYW5kIGl0J3MgYSBjaGFuZ2UgdG8gdGhlIHN0b3JlIG9wZXJhdGlvbiDigJMgbWFraW5nIGl0IGEgcmVsZWFzZSBzdG9yZSBub3cuIFNvLCB5ZXMsIGl0J3MgbW9kaWZ5aW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEJ1dCBpcyBpdCAqYWN0dWFsbHkqIHJlYWNoYWJsZT9cblxuT2theSwgc28gYF9fYW5vbl92bWFfcHJlcGFyZWAgZ2V0cyBjYWxsZWQgd2hlbiBhbiBhbm9ueW1vdXMgVk1BIGlzIHByZXBhcmVkLiBUaGF0IHNlZW1zIHByZXR0eSBnZW5lcmFsLCByaWdodD8gUGFnZSBmYXVsdHMsIGBtcHJvdGVjdGAsIGBtYWR2aXNlYC4uLiB0aGVzZSBhcmUgYWxsIGNvbW1vbiBvcGVyYXRpb25zLiBTbywgaXQncyBwcmV0dHkgdWJpcXVpdG91cyFcblxuV2FpdCwgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHdhcm4gYWdhaW5zdCBsaXN0aW5nICp1YmlxdWl0b3VzKiBmdW5jdGlvbnMsIGJlY2F1c2UgaXQgZGlsdXRlcyB0aGUgZnV6emluZyBlZmZvcnQuIFwiQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTLlwiIFRoZXkgd2FudCBtZSB0byBcIlRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UU1wiLiBTbywgSSBuZWVkIHRvIGNoZWNrIHdoYXQgc3BlY2lmaWNhbGx5IGNhbGxzIGBfX2Fub25fdm1hX3ByZXBhcmVgLCB0byBkZWNpZGUgaWYgdGhpcyBpcyB0YXJnZXRpbmcgYSBzcGVjaWZpYyBmZWF0dXJlL2xvZ2ljIGNoYW5nZSwgb3Igd2hldGhlciBpdCdzIHRvbyBnZW5lcmljIHRvIGJvdGhlci4gTGV0IG1lIHNlZSB3aGF0IGZ1bmN0aW9ucyBjYWxsIGBfX2Fub25fdm1hX3ByZXBhcmVgLCBgYW5vbl92bWFfcHJlcGFyZWAsIG9yIHVzZSBgcmV1c2FibGVfYW5vbl92bWFgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBzcGVjaWZpYyBsb2dpYyBiZWluZyBjaGFuZ2VkIG9yIGlmIGl0IGlzIGp1c3QgYSBzeW5jaHJvbml6YXRpb24gb3B0aW1pemF0aW9uIGluIGEgdmVyeSBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODMwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6MTEuNjY3ODA5ODU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzQ1NzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9wcmVwYXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmMtMTExLSAqICAtXFx1MDAzZWFub25fdm1hLmxvY2tcXG5tbS9maWxlbWFwLmM6MTEyOiAqICAgIC1cXHUwMDNlcGFnZV90YWJsZV9sb2NrIG9yIHB0ZV9sb2NrXFx0KGFub25fdm1hX3ByZXBhcmUgYW5kIHZhcmlvdXMpXFxubW0vZmlsZW1hcC5jLTExMy0gKlxcbi0tXFxubW0vaW50ZXJuYWwuaD0zMzU9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSk7XFxubW0vaW50ZXJuYWwuaDozMzY6aW50ICBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbm1tL2ludGVybmFsLmgtMzM3LXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxubW0vaW50ZXJuYWwuaC0zMzgtXFxubW0vaW50ZXJuYWwuaDozMzk6c3RhdGljIGlubGluZSBpbnQgYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9pbnRlcm5hbC5oLTM0MC17XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTM0My1cXG5tbS9pbnRlcm5hbC5oOjM0NDpcXHRyZXR1cm4gX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSk7XFxubW0vaW50ZXJuYWwuaC0zNDUtfVxcbi0tXFxubW0vbWFkdmlzZS5jPTExMjQ9c3RhdGljIGxvbmcgbWFkdmlzZV9ndWFyZF9pbnN0YWxsKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTExNTgtXFxubW0vbWFkdmlzZS5jOjExNTk6XFx0XFx0ZXJyID0gYW5vbl92bWFfcHJlcGFyZSh2bWEpO1xcbm1tL21hZHZpc2UuYy0xMTYwLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTU3MT1zdGF0aWMgYm9vbCBwcm9jZXNzX21hZHZpc2VfcmVtb3RlX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTgzLVxcbm1tL21hZHZpc2UuYzoxNTg0Oi8qIERvZXMgdGhpcyBvcGVyYXRpb24gaW52b2tlIGFub25fdm1hX3ByZXBhcmUoKT8gKi9cXG5tbS9tYWR2aXNlLmMtMTU4NS1zdGF0aWMgYm9vbCBwcmVwYXJlc19hbm9uX3ZtYShpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTU5OT1zdGF0aWMgYm9vbCBpc192bWFfbG9ja19zdWZmaWNpZW50KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE2MTEtXFx0LypcXG5tbS9tYWR2aXNlLmM6MTYxMjpcXHQgKiBhbm9uX3ZtYV9wcmVwYXJlKCkgZXhwbGljaXRseSByZXF1aXJlcyBhbiBtbWFwIGxvY2sgZm9yXFxubW0vbWFkdmlzZS5jLTE2MTMtXFx0ICogc2VyaWFsaXNhdGlvbiwgc28gd2UgY2Fubm90IHVzZSBhIFZNQSBsb2NrIGluIHRoaXMgY2FzZS5cXG4tLVxcbm1tL21lbW9yeS5jPTM5MjU9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9jYW5fY2FsbF9mYXVsdChjb25zdCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTM5MzktICogV2hlbiBwcmVwYXJpbmcgdG8gaW5zZXJ0IGFuIGFub255bW91cyBwYWdlIGludG8gYSBWTUEgZnJvbSBhXFxubW0vbWVtb3J5LmM6Mzk0MDogKiBmYXVsdCBoYW5kbGVyLCBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYW5vbl92bWFfcHJlcGFyZSgpLlxcbm1tL21lbW9yeS5jLTM5NDEtICogSWYgdGhpcyB2bWEgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGFuIGFzc29jaWF0ZWQgYW5vbl92bWEgYW5kIHdlIGFyZVxcbm1tL21lbW9yeS5jLTM5NDItICogb25seSBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgdGhlIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlXFxubW0vbWVtb3J5LmM6Mzk0MzogKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXFxubW0vbWVtb3J5LmMtMzk0NC0gKiBkZXRlcm1pbmUgaWYgdGhpcyBWTUEgY2FuIHNoYXJlIGl0cyBhbm9uX3ZtYSwgYW5kIHRoYXQncyBub3Qgc2FmZSB0b1xcbi0tXFxubW0vbWVtb3J5LmM9Mzk1MD12bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTM5NjAtXFx0fVxcbm1tL21lbW9yeS5jOjM5NjE6XFx0aWYgKF9fYW5vbl92bWFfcHJlcGFyZSh2bWEpKVxcbm1tL21lbW9yeS5jLTM5NjItXFx0XFx0cmV0ID0gVk1fRkFVTFRfT09NO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz03OTg9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTgxOS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjgyMDpcXHRyZXQgPSBhbm9uX3ZtYV9wcmVwYXJlKHZtYSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy04MjEtXFx0aWYgKHJldClcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTc2PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTAyOC1cXHRcXHRnb3RvIGFib3J0O1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTAyOTpcXHRpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2bWEpKSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEwMzAtXFx0XFx0Z290byBhYm9ydDtcXG4tLVxcbm1tL3JtYXAuYz0xNTA9c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fYXNzaWduKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTE1OS0vKipcXG5tbS9ybWFwLmM6MTYwOiAqIF9fYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb25cXG5tbS9ybWFwLmMtMTYxLSAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uXFxuLS1cXG5tbS9ybWFwLmMtMTY3LSAqIFRoZSBjb21tb24gY2FzZSB3aWxsIGJlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIG9uZSwgd2hpY2hcXG5tbS9ybWFwLmM6MTY4OiAqIGlzIGhhbmRsZWQgaW5saW5lIGJ5IGFub25fdm1hX3ByZXBhcmUoKS4gQnV0IGlmXFxubW0vcm1hcC5jLTE2OS0gKiBub3Qgd2UgZWl0aGVyIG5lZWQgdG8gZmluZCBhbiBhZGphY2VudCBtYXBwaW5nIHRoYXQgd2VcXG4tLVxcbm1tL3JtYXAuYy0xODQtICovXFxubW0vcm1hcC5jOjE4NTppbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL3JtYXAuYy0xODYte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xMDk9c3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xMTgtXFx0ZWxzZSBpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3VzZXJmYXVsdGZkLmM6MTE5OlxcdFxcdCB1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKVxcbm1tL3VzZXJmYXVsdGZkLmMtMTIwLVxcdFxcdHZtYSA9IEVSUl9QVFIoLUVOT01FTSk7XFxuLS1cXG5tbS92bWEuYz0yMDU0PXN0YXRpYyBpbnQgYW5vbl92bWFfY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYilcXG4tLVxcbm1tL3ZtYS5jLTIwOTgtICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvXFxubW0vdm1hLmM6MjA5OTogKiB2bWEtXFx1MDAzZWFub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxcbm1tL3ZtYS5jLTIxMDAtICpcXG4tLVxcbm1tL3ZtYS5jPTIxMTM9c3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcmV1c2FibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQsXFxuLS1cXG5tbS92bWEuYy0yMTE3LVxcdGlmIChhbm9uX3ZtYV9jb21wYXRpYmxlKGEsIGIpKSB7XFxubW0vdm1hLmM6MjExODpcXHRcXHQvKiBQYWlyZWQgd2l0aCBhIG1lbW9yeSBiYXJyaWVyIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLiAqL1xcbm1tL3ZtYS5jLTIxMTktXFx0XFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtXFx1MDAzZWFub25fdm1hKTtcXG4tLVxcbm1tL3ZtYS5jLTIxMjctLypcXG5tbS92bWEuYzoyMTI4OiAqIGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hIGlzIHVzZWQgYnkgYW5vbl92bWFfcHJlcGFyZSwgdG8gY2hlY2tcXG5tbS92bWEuYy0yMTI5LSAqIG5laWdoYm91cmluZyB2bWFzIGZvciBhIHN1aXRhYmxlIGFub25fdm1hLCBiZWZvcmUgaXQgZ29lcyBvZmZcXG4tLVxcbm1tL3ZtYS5jPTMyMzA9aW50IGV4cGFuZF91cHdhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5tbS92bWEuYy0zMjcwLVxcdC8qIFdlIG11c3QgbWFrZSBzdXJlIHRoZSBhbm9uX3ZtYSBpcyBhbGxvY2F0ZWQuICovXFxubW0vdm1hLmM6MzI3MTpcXHRpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2bWEpKSkge1xcbm1tL3ZtYS5jLTMyNzItXFx0XFx0dm1hX2l0ZXJfZnJlZShcXHUwMDI2dm1pKTtcXG4tLVxcbm1tL3ZtYS5jPTMzMTU9aW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbm1tL3ZtYS5jLTMzNDgtXFx0LyogV2UgbXVzdCBtYWtlIHN1cmUgdGhlIGFub25fdm1hIGlzIGFsbG9jYXRlZC4gKi9cXG5tbS92bWEuYzozMzQ5OlxcdGlmICh1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKSB7XFxubW0vdm1hLmMtMzM1MC1cXHRcXHR2bWFfaXRlcl9mcmVlKFxcdTAwMjZ2bWkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNToxMS44MzEyNzQxMzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk2NTc3MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBbm9ueW1vdXMgVmlydHVhbCBNZW1vcnkgQXJlYSBNZXJnaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYW5kIGl0J3MgYSBub24tc3RhdGljIGZ1bmN0aW9uIGhhbmdpbmcgb3V0IGluIGBtbS9ybWFwLmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZSBoZXJlLiBMZXQncyBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIHBsYXlpbmcgaW4gdGhpcyBzYW5kYm94LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGFuZCBgcmV1c2FibGVfYW5vbl92bWFgLiBUaG9zZSBzZWVtICpleHRyZW1lbHkqIHJlbGV2YW50LCBhbmQgdGhleSdyZSBhcHBhcmVudGx5IGluIGBtbS92bWEuY2AuIFRpbWUgdG8gZGlnIGludG8gYG1tL3ZtYS5jYCBhbmQgZ2V0IGEgZmVlbCBmb3IgaG93IGBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYWAgaXMgYWN0dWFsbHkgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIHdob2xlIG1lcmdpbmcgcHJvY2VzcyBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE1OjM1OjEzLjkyNzg1MzUxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEyMDpcXHRcXG4yMTIxOlxcdFxcdFxcdGlmIChhbm9uX3ZtYSBcXHUwMDI2XFx1MDAyNiBsaXN0X2lzX3Npbmd1bGFyKFxcdTAwMjZvbGQtXFx1MDAzZWFub25fdm1hX2NoYWluKSlcXG4yMTIyOlxcdFxcdFxcdFxcdHJldHVybiBhbm9uX3ZtYTtcXG4yMTIzOlxcdFxcdH1cXG4yMTI0OlxcdFxcdHJldHVybiBOVUxMO1xcbjIxMjU6XFx0fVxcbjIxMjY6XFx0XFxuMjEyNzpcXHQvKlxcbjIxMjg6XFx0ICogZmluZF9tZXJnZWFibGVfYW5vbl92bWEgaXMgdXNlZCBieSBhbm9uX3ZtYV9wcmVwYXJlLCB0byBjaGVja1xcbjIxMjk6XFx0ICogbmVpZ2hib3VyaW5nIHZtYXMgZm9yIGEgc3VpdGFibGUgYW5vbl92bWEsIGJlZm9yZSBpdCBnb2VzIG9mZlxcbjIxMzA6XFx0ICogdG8gYWxsb2NhdGUgYSBuZXcgYW5vbl92bWEuICBJdCBjaGVja3MgYmVjYXVzZSBhIHJlcGV0aXRpdmVcXG4yMTMxOlxcdCAqIHNlcXVlbmNlIG9mIG1wcm90ZWN0cyBhbmQgZmF1bHRzIG1heSBvdGhlcndpc2UgbGVhZCB0byBkaXN0aW5jdFxcbjIxMzI6XFx0ICogYW5vbl92bWFzIGJlaW5nIGFsbG9jYXRlZCwgcHJldmVudGluZyB2bWEgbWVyZ2UgaW4gc3Vic2VxdWVudFxcbjIxMzM6XFx0ICogbXByb3RlY3QuXFxuMjEzNDpcXHQgKi9cXG4yMTM1OlxcdHN0cnVjdCBhbm9uX3ZtYSAqZmluZF9tZXJnZWFibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuMjEzNjpcXHR7XFxuMjEzNzpcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gTlVMTDtcXG4yMTM4OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgKm5leHQ7XFxuMjEzOTpcXHRcXHRWTUFfSVRFUkFUT1Iodm1pLCB2bWEtXFx1MDAzZXZtX21tLCB2bWEtXFx1MDAzZXZtX2VuZCk7XFxuMjE0MDpcXHRcXG4yMTQxOlxcdFxcdC8qIFRyeSBuZXh0IGZpcnN0LiAqL1xcbjIxNDI6XFx0XFx0bmV4dCA9IHZtYV9pdGVyX2xvYWQoXFx1MDAyNnZtaSk7XFxuMjE0MzpcXHRcXHRpZiAobmV4dCkge1xcbjIxNDQ6XFx0XFx0XFx0YW5vbl92bWEgPSByZXVzYWJsZV9hbm9uX3ZtYShuZXh0LCB2bWEsIG5leHQpO1xcbjIxNDU6XFx0XFx0XFx0aWYgKGFub25fdm1hKVxcbjIxNDY6XFx0XFx0XFx0XFx0cmV0dXJuIGFub25fdm1hO1xcbjIxNDc6XFx0XFx0fVxcbjIxNDg6XFx0XFxuMjE0OTpcXHRcXHRwcmV2ID0gdm1hX3ByZXYoXFx1MDAyNnZtaSk7XFxuMjE1MDpcXHRcXHRWTV9CVUdfT05fVk1BKHByZXYgIT0gdm1hLCB2bWEpO1xcbjIxNTE6XFx0XFx0cHJldiA9IHZtYV9wcmV2KFxcdTAwMjZ2bWkpO1xcbjIxNTI6XFx0XFx0LyogVHJ5IHByZXYgbmV4dC4gKi9cXG4yMTUzOlxcdFxcdGlmIChwcmV2KVxcbjIxNTQ6XFx0XFx0XFx0YW5vbl92bWEgPSByZXVzYWJsZV9hbm9uX3ZtYShwcmV2LCBwcmV2LCB2bWEpO1xcbjIxNTU6XFx0XFxuMjE1NjpcXHRcXHQvKlxcbjIxNTc6XFx0XFx0ICogV2UgbWlnaHQgcmVhY2ggaGVyZSB3aXRoIGFub25fdm1hID09IE5VTEwgaWYgd2UgY2FuJ3QgZmluZFxcbjIxNTg6XFx0XFx0ICogYW55IHJldXNhYmxlIGFub25fdm1hLlxcbjIxNTk6XFx0XFx0ICogVGhlcmUncyBubyBhYnNvbHV0ZSBuZWVkIHRvIGxvb2sgb25seSBhdCB0b3VjaGluZyBuZWlnaGJvdXJzOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNToxMy45MjgwNzE0MTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA3MDk4NDg0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0OiBgYW5vbl92bWFgIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGlzIGV4cG9ydGVkIG9yIHN0YXRpYy4gVGhpcyBsb29rcyBsaWtlIGl0IGxpdmVzIGluIGBtbS92bWEuY2AsIGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyBpbiBgbW0vcm1hcC5jYC5cblxuTm93LCByZWdhcmRpbmcgdGhlIGNoYW5nZSwgdGhlIGNydWNpYWwgcGFydCBpcyB0aGUgc3dpdGNoIGZyb20gYSBkaXJlY3QgYXNzaWdubWVudCBgdm1hLVx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7YCB0byBgc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dm1hLVx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSk7YCB3aXRoaW4gYF9fYW5vbl92bWFfcHJlcGFyZWAuIFRoaXMgaXMgaW4gdGhlIGNvcmUgTU0gY29kZSwgYG1tL3JtYXAuY2AuIFRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUsIG9idmlvdXNseSwgaXMgd2hldGhlciB0aGlzIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgc21wX3N0b3JlX3JlbGVhc2VgLCBjb3VsZCBpbnRyb2R1Y2UgYW4gZXhwbG9pdGFibGUgcmFjZSBjb25kaXRpb24uXG5cbk5leHQgc3RlcDogYXNzZXNzIHJlYWNoYWJpbGl0eS4gRG9lcyB0aGlzIGNoYW5nZSBhZmZlY3QgZXhlY3V0YWJsZSBjb2RlIHRoYXTigJlzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBpbiB0aGUgZmllbGQ/IENvbnNpZGVyaW5nIHRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQsIGBfX2Fub25fdm1hX3ByZXBhcmUoKWAgaXMgY2FsbGVkIGR1cmluZyBhbm9ueW1vdXMgbWVtb3J5IGhhbmRsaW5nLCBwYWdlIGZhdWx0cywgbWFkdmlzZSwgbXByb3RlY3QsIGFuZCBwb3RlbnRpYWxseSBtaWdyYXRlX3ZtYSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgY29kZSBpcyByZWd1bGFybHkgZXhlcmNpc2VkIGluIG1vc3QgZW52aXJvbm1lbnRzLiBCb3RoIGBtbS9ybWFwLmNgIGFuZCBgbW0vdm1hLmNgIGFyZSBjb3JlIGtlcm5lbCBjb21wb25lbnRzLCBzbyB0aGV5IGFyZSBhbHdheXMgY29tcGlsZWQgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUUVNVS5cblxuRmluYWxseSwgY29uZmlndXJhdGlvbi4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGtlcm5lbCBjb25maWdzIHRoYXQgdGhpcyByZWxpZXMgb24/IEkgbmVlZCB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NjUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNToyNC42Mzc5MzIzMzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTE2Mzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJybWFwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0zNz1tbXUtJChDT05GSUdfTU1VKVxcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtMzktXFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG5tbS9NYWtlZmlsZTo0MDpcXHRcXHRcXHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cXG5tbS9NYWtlZmlsZS00MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6MjQuNzY3MTAxMTE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MzAzNzU1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIE1NVSBDb25maWd1cmF0aW9uIGFuZCBSZWxhdGVkIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGxpbmU6IGBtbXUtJChDT05GSUdfTU1VKSA6PSAuLi4gcm1hcC5vIC4uLiB2bWEub2AuIFJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgaXMgbGlua2luZyBvYmplY3QgZmlsZXMgYmFzZWQgb24gdGhlIGBDT05GSUdfTU1VYCB2YXJpYWJsZS4gVGhhdCdzIHByZXR0eSBzdGFuZGFyZCBmb3IgYW55IGFyY2hpdGVjdHVyZSB3aXRoIGEgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCwgbGlrZSB4ODYgb3IgYW1kNjQuIEJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb25zaWRlcmluZyBhbGwgcG9zc2liaWxpdGllcy4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBpbiBwbGF5IGhlcmU/IEFyZSB0aGVyZSBhbnkgbGVzcyBjb21tb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IGZpdCB0aGUgdHlwaWNhbCBtb2xkPyBJIG5lZWQgdG8gY29uc2lkZXIgYWx0ZXJuYXRpdmUgY29uZmlndXJhdGlvbnMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW9zLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoaXMsIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHVzYWdlcyBvZiB0aGUgYF9fYW5vbl92bWFfcHJlcGFyZWAgb3IgYHJldXNhYmxlX2Fub25fdm1hYCBzeW1ib2xzLiBUaGVzZSBhcmUgb2Z0ZW4gaW5kaWNhdG9ycyBvZiBob3cgYW5vbnltb3VzIFZpcnR1YWwgTWVtb3J5IEFyZWFzIChWTUFzKSBhcmUgaGFuZGxlZC4gQ2hlY2tpbmcgZm9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhlc2Ugc3ltYm9scyB3aWxsIGltbWVkaWF0ZWx5IHJldmVhbCBob3cgdGhlIE1NVSBjb25maWd1cmF0aW9uIGltcGFjdHMgdGhlIFZNQSBoYW5kbGluZy4gVGhpcyB3aWxsIGhlbHAgbWUgY29uZmlybSB0aGUgYnJlYWR0aCBvZiB0aGUgYENPTkZJR19NTVVgJ3MgaW5mbHVlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc0MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE1OjM1OjI3LjU5NzQ4MjY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzMwOTcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Fub25fdm1hX3ByZXBhcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9MzM1PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpO1xcbm1tL2ludGVybmFsLmg6MzM2OmludCAgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5tbS9pbnRlcm5hbC5oLTMzNy12b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbi0tXFxubW0vaW50ZXJuYWwuaD0zMzk9c3RhdGljIGlubGluZSBpbnQgYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2ludGVybmFsLmgtMzQzLVxcbm1tL2ludGVybmFsLmg6MzQ0OlxcdHJldHVybiBfX2Fub25fdm1hX3ByZXBhcmUodm1hKTtcXG5tbS9pbnRlcm5hbC5oLTM0NS19XFxuLS1cXG5tbS9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy0zOTQyLSAqIG9ubHkgcHJvdGVjdGVkIGJ5IHRoZSBwZXItVk1BIGxvY2ssIHRoZSBjYWxsZXIgbXVzdCByZXRyeSB3aXRoIHRoZVxcbm1tL21lbW9yeS5jOjM5NDM6ICogbW1hcF9sb2NrIGhlbGQuICBfX2Fub25fdm1hX3ByZXBhcmUoKSB3aWxsIGxvb2sgYXQgYWRqYWNlbnQgVk1BcyB0b1xcbm1tL21lbW9yeS5jLTM5NDQtICogZGV0ZXJtaW5lIGlmIHRoaXMgVk1BIGNhbiBzaGFyZSBpdHMgYW5vbl92bWEsIGFuZCB0aGF0J3Mgbm90IHNhZmUgdG9cXG4tLVxcbm1tL21lbW9yeS5jPTM5NTA9dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy0zOTYwLVxcdH1cXG5tbS9tZW1vcnkuYzozOTYxOlxcdGlmIChfX2Fub25fdm1hX3ByZXBhcmUodm1hKSlcXG5tbS9tZW1vcnkuYy0zOTYyLVxcdFxcdHJldCA9IFZNX0ZBVUxUX09PTTtcXG4tLVxcbm1tL3JtYXAuYz0xNTA9c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fYXNzaWduKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTE1OS0vKipcXG5tbS9ybWFwLmM6MTYwOiAqIF9fYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb25cXG5tbS9ybWFwLmMtMTYxLSAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uXFxuLS1cXG5tbS9ybWFwLmMtMTg0LSAqL1xcbm1tL3JtYXAuYzoxODU6aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9ybWFwLmMtMTg2LXtcXG4tLVxcbm1tL3ZtYS5jPTIwNTQ9c3RhdGljIGludCBhbm9uX3ZtYV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpiKVxcbi0tXFxubW0vdm1hLmMtMjA5OC0gKiBhbnkgYWNjZXNzIHRvIGl0cyBmaWVsZHMsIHdoaWNoIHBhaXJzIHdpdGggdGhlIGFzc2lnbm1lbnQgdG9cXG5tbS92bWEuYzoyMDk5OiAqIHZtYS1cXHUwMDNlYW5vbl92bWEgcGVyZm9ybWVkIHdpdGggcmVsZWFzZSBzZW1hbnRpY3MgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuXFxubW0vdm1hLmMtMjEwMC0gKlxcbi0tXFxubW0vdm1hLmM9MjExMz1zdGF0aWMgc3RydWN0IGFub25fdm1hICpyZXVzYWJsZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9sZCxcXG4tLVxcbm1tL3ZtYS5jLTIxMTctXFx0aWYgKGFub25fdm1hX2NvbXBhdGlibGUoYSwgYikpIHtcXG5tbS92bWEuYzoyMTE4OlxcdFxcdC8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovXFxubW0vdm1hLmMtMjExOS1cXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlYW5vbl92bWEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNToyNy42OTA3OTY2ODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMzODEyNTgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gncyBDb3ZlcmFnZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgY29uZmlybSB0aGF0IHRoZSBwcmVyZXF1aXNpdGVzIGFyZSBzYXRpc2ZpZWQuIGBfX2Fub25fdm1hX3ByZXBhcmVgIGlzIGluIGBtbS9ybWFwLmNgLCB3aGljaCwgYXMgZXhwZWN0ZWQsIG9ubHkgcmVxdWlyZXMgdGhlIGBNTVVgIGZlYXR1cmUuIEdvb2QsIHRoZSBgTU1VYCBjb25maWd1cmF0aW9uIGlzIHN0YW5kYXJkLCBzbyB3ZSBjYW4gc2V0IHRoYXQgY29uZmlkZW50bHkuIEknbGwgdXNlIGBNTVVgIGV4cGxpY2l0bHksIHRob3VnaCBhbiBlbXB0eSBlbnRyeSBtaWdodCBhbHNvIHdvcmsgYnkgZGVmYXVsdC5cblxuTm93IGZvciB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSBhcmUgd2hhdCBJIHdhbnQgdG8gbmFpbCBkb3duIGZvciB0ZXN0aW5nLiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQgd2FzIGRpcmVjdGx5IG1vZGlmaWVkLCB3aGVyZSB0aGF0IGBzbXBfc3RvcmVfcmVsZWFzZWAgd2FzIGFkZGVkLiBUaGVuIHRoZXJlJ3MgYGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hYCwgd2hpY2ggY2FsbHMgYHJldXNhYmxlX2Fub25fdm1hYCAod2hpY2gsIGltcG9ydGFudGx5LCBpcyBzdGF0aWMpLCBhbmQgaXQncyBhbHNvIHJlZmVyZW5jZWQgaW4gdGhlIHBhdGNoIGNvbW1lbnRzIGluIHJlbGF0aW9uIHRvIHRoZSBzeW5jaHJvbml6YXRpb24uIEZpbmFsbHksIGBfX3ZtZl9hbm9uX3ByZXBhcmVgLCB3aGljaCBjYWxscyBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyBpbXBvcnRhbnQgYXMgdGhlIGNhbGxpbmcgZnVuY3Rpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBjb21tb24gb3Igc3BlY2lmaWMuIGBfX2Fub25fdm1hX3ByZXBhcmVgIGlzIHByZXR0eSBzcGVjaWZpYyB0byB0aGUgcHJvY2VzcyBvZiBzZXR0aW5nIHVwIGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhczsgaXQncyBub3QgY2FsbGVkIG9uIGV2ZXJ5IGhvdCBwYXRoLCBvbmx5IHdoZW4gYWxsb2NhdGluZyBvciBwcmVwYXJpbmcgdGhlc2UgYW5vbnltb3VzIFZNQXMuIGBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYWAgaXMgbGVzcyBzcGVjaWZpYyBpbiBjb25jZXB0IGJ1dCBpcyB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCB0byB0aGUgYWx0ZXJlZCBsb2dpYywgZ2l2ZW4gdGhlIHN0YXRpYyBuYXR1cmUgb2YgYHJldXNhYmxlX2Fub25fdm1hYC5cblxuTG9va2luZyBhdCBvdGhlciBmdW5jdGlvbnMsIEkgc2VlIHRoYXQgYHJldXNhYmxlX2Fub25fdm1hYCBpcyBzdGF0aWMsIGRlZmluZWQgaW4gYG1tL3ZtYS5jYCwgYW5kIG9ubHkgY2FsbGVkIGJ5IGBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYWAuIFRoaXMgcmVpbmZvcmNlcyB0aGUgaW1wb3J0YW5jZSBvZiBgZmluZF9tZXJnZWFibGVfYW5vbl92bWFgIGFuZCBgX19hbm9uX3ZtYV9wcmVwYXJlYCBhcyB0aGUgaW1wb3J0YW50IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRvIHRlc3QuXG5cblNvLCBhY2NvcmRpbmcgdG8gbXkgcmV2aWV3LCB0aGUgZnV6emluZyBwcm9wZXJ0aWVzIG9mIHRoaXMgcGF0Y2ggc2hvdWxkIGJlOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgIChhYnNvbHV0ZWx5KVxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW1wiTU1VXCJdYFxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJfX2Fub25fdm1hX3ByZXBhcmVcIiwgXCJmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYVwiXWBcblxuSSdsbCBwcm9jZWVkIHRvIHRoZSB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQ1LCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNTozNC4wMjg5MjU1NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4MTI3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYW5vbl92bWFfcHJlcGFyZVwiLFxuICAgIFwiZmluZF9tZXJnZWFibGVfYW5vbl92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX2Fub25fdm1hX3ByZXBhcmUoKSBpbiBtbS9ybWFwLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgd2hlbiBwdWJsaXNoaW5nIHZtYS1cXHUwMDNlYW5vbl92bWEsIHByb3Blcmx5IHBhaXJpbmcgd2l0aCBsb2NrbGVzcyBSRUFEX09OQ0UoKSByZWFkcyBhbmQgYWRkcmVzcyBkZXBlbmRlbmNpZXMgaW4gcmV1c2FibGVfYW5vbl92bWEoKSAoY2FsbGVkIHZpYSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSgpKS4gQmVjYXVzZSB0aGlzIGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBmdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgY29uY3VycmVuY3kgYW5vbWFsaWVzIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYW5vbl92bWFfcHJlcGFyZVwiLFxuICAgIFwiZmluZF9tZXJnZWFibGVfYW5vbl92bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX2Fub25fdm1hX3ByZXBhcmUoKSBpbiBtbS9ybWFwLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKCkgd2hlbiBwdWJsaXNoaW5nIHZtYS1cXHUwMDNlYW5vbl92bWEsIHByb3Blcmx5IHBhaXJpbmcgd2l0aCBsb2NrbGVzcyBSRUFEX09OQ0UoKSByZWFkcyBhbmQgYWRkcmVzcyBkZXBlbmRlbmNpZXMgaW4gcmV1c2FibGVfYW5vbl92bWEoKSAoY2FsbGVkIHZpYSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSgpKS4gQmVjYXVzZSB0aGlzIGFsdGVycyBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBmdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgY29uY3VycmVuY3kgYW5vbWFsaWVzIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNTozNC4xNzY3NDUyOTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDYwODMyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6MzQuMTc3MzIzNDg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjk0NjAyNDg3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL3JtYXAuYyBhbmQgbW0vdm1hLmMgdG8gdXNlIHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2bWEtXFx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSkgaW5zdGVhZCBvZiBhIHBsYWluIGFzc2lnbm1lbnQgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCksIGVuc3VyaW5nIHByb3BlciBtZW1vcnkgb3JkZXJpbmcgd2l0aCBSRUFEX09OQ0UgaW4gcmV1c2FibGVfYW5vbl92bWEoKS4gVGhpcyBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgb24gU0xBQl9UWVBFU0FGRV9CWV9SQ1Ugb2JqZWN0cyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIGxlbmd0aCBtb2RpZmljYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlcnNwYWNlIGNvcGllcy9pbmZvbGVha3MuIENvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlKSBhcmUgY292ZXJlZCBieSBLQVNBTi9LQ1NBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4NWNiMjBjZDM2Mzc5OWVjMGM2ZDRhMTI1NzliN2ZiYmU3MTY0OWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE1OjM0OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCBkMTgxOWZkNjk5MzgwLi5mM2IyMWFhYTM0ZWU5IDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4rKysgYi9tbS9ybWFwLmNcbkBAIC0yMDksNyArMjA5LDExIEBAIGludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHQvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIFx0aWYgKGxpa2VseSghdm1hLVx1MDAzZWFub25fdm1hKSkge1xuLVx0XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbitcdFx0LypcbitcdFx0ICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLlxuK1x0XHQgKiBQYWlyZWQgd2l0aCBhbiBhZGRyZXNzIGRlcGVuZGVuY3kgaW4gcmV1c2FibGVfYW5vbl92bWEoKS5cbitcdFx0ICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpO1xuIFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbiBcdFx0YW5vbl9ybWFwX3RyZWVfaW5zZXJ0KGF2YywgYW5vbl92bWEpO1xuIFx0XHRhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcbmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jXG5pbmRleCAzNWU3YTY0ODU1ZmFkLi5lYzQxMDEyNTBkNzFiIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbisrKyBiL21tL3ZtYS5jXG5AQCAtMjA5NCw2ICsyMDk0LDEzIEBAIHN0YXRpYyBpbnQgYW5vbl92bWFfY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqXG4gICogYWNjZXB0YWJsZSBmb3IgbWVyZ2luZywgc28gd2UgY2FuIGRvIGFsbCBvZiB0aGlzIG9wdGltaXN0aWNhbGx5LiBCdXRcbiAgKiB3ZSBkbyB0aGF0IFJFQURfT05DRSgpIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIG5ldmVyIHJlLWxvYWQgdGhlIHBvaW50ZXIuXG4gICpcbisgKiBUaGUgUkVBRF9PTkNFKCkgZXN0YWJsaXNoZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gYW5vbl92bWEgYW5kXG4rICogYW55IGFjY2VzcyB0byBpdHMgZmllbGRzLCB3aGljaCBwYWlycyB3aXRoIHRoZSBhc3NpZ25tZW50IHRvXG4rICogdm1hLVx1MDAzZWFub25fdm1hIHBlcmZvcm1lZCB3aXRoIHJlbGVhc2Ugc2VtYW50aWNzIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxuKyAqXG4rICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhcyBhbm9uX3ZtYSdzIGFyZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSBzb1xuKyAqIGFjY2Vzc2luZyBhbiB1bmluaXRpYWxpc2VkIGFub25fdm1hJ3MgZmllbGRzIG1heSByZXN1bHQgaW4gYSBVQUYuXG4rICpcbiAgKiBJT1c6IHRoYXQgdGhlIFwibGlzdF9pc19zaW5ndWxhcigpXCIgdGVzdCBvbiB0aGUgYW5vbl92bWFfY2hhaW4gb25seVxuICAqIG1hdHRlcnMgZm9yIHRoZSAnc3RhYmxlIGFub25fdm1hJyBjYXNlIChpZSB0aGUgdGhpbmcgd2Ugd2FudCB0byBhdm9pZFxuICAqIGlzIHRvIHJldHVybiBhbiBhbm9uX3ZtYSB0aGF0IGlzIFwiY29tcGxleFwiIGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXG5AQCAtMjEwOCw2ICsyMTE1LDcgQEAgc3RhdGljIHN0cnVjdCBhbm9uX3ZtYSAqcmV1c2FibGVfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpiKVxuIHtcbiBcdGlmIChhbm9uX3ZtYV9jb21wYXRpYmxlKGEsIGIpKSB7XG4rXHRcdC8qIFBhaXJlZCB3aXRoIGEgbWVtb3J5IGJhcnJpZXIgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuICovXG4gXHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWFub25fdm1hKTtcbiBcbiBcdFx0aWYgKGFub25fdm1hIFx1MDAyNlx1MDAyNiBsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNm9sZC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNTozNTozNC4xNzczMjQzNzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5NzY0NTQ5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbW0vcm1hcC5jYCBhbmQgYG1tL3ZtYS5jYCBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBtbS9ybWFwLmNgIGFuZCBgbW0vdm1hLmNgIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBmb3IgaXQuIFRoYXQncyBmaW5lOyBsZXQncyBnZXQgcmlnaHQgdG8gaXQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGUgY2hhbmdlIGJlZm9yZSBqdW1waW5nIGludG8gYW55IGNvbmNsdXNpb25zLiBMZXQncyBkaWcgaW4uXG5cbkl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gYW5kIHZpc2liaWxpdHksIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBhbm9uX3ZtYWAgc3RydWN0dXJlLiBJbiBgbW0vcm1hcC5jYCwgdGhlIGNyaXRpY2FsIGNoYW5nZSBpcyBpbiBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgd2hlcmUgdGhlIHNpbXBsZSBhc3NpZ25tZW50IGB2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpO2AuIFRoZXkndmUgYWxzbyBhZGRlZCBhIGNvbW1lbnQgdGhhdCBmbGFncyB0aGF0IHRoZSBgYW5vbl92bWFgIGZpZWxkcyBuZWVkIHRvIGJlIHZpc2libGUgYmVmb3JlIGBhbm9uX3ZtYWAgaXMgYWN0dWFsbHkgcHVibGlzaGVkIGFuZCB0aGF0IHRoaXMgY2hhbmdlIGlzIHBhaXJlZCB3aXRoIGFuIGFkZHJlc3MgZGVwZW5kZW5jeS5cblxuTm93LCBpbiBgbW0vdm1hLmNgLCBgcmV1c2FibGVfYW5vbl92bWFgIGdvdCBzb21lIHVwZGF0ZWQgY29tbWVudHMsIHNwZWNpZmljYWxseSBjYWxsaW5nIG91dCB0aGF0IHRoZSBgUkVBRF9PTkNFKClgIGVzdGFibGlzaGVzIGFuIGFkZHJlc3MgZGVwZW5kZW5jeSBiZXR3ZWVuIGBhbm9uX3ZtYWAgYW5kIGFueSBhY2Nlc3MgdG8gaXRzIGZpZWxkcy4gVGhlIGNvbW1lbnQgYWxzbyBwb2ludHMgb3V0IHRoYXQgdGhpcyBwYWlyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2UgYGFub25fdm1hYCB1c2VzIGBTTEFCX1RZUEVTQUZFX0JZX1JDVWAsIHNvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHdvdWxkIGNhdXNlIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgc2l0dWF0aW9uLiBcblxuU28gaXQncyBhbGwgYWJvdXQgbWVtb3J5IGJhcnJpZXJzLCBkYXRhIGRlcGVuZGVuY2llcywgYW5kIHByZXZlbnRpbmcgVUFGIGJ1Z3MuIFRoaXMgYHNtcF9zdG9yZV9yZWxlYXNlYCB3aXRoIGEgcGFpcmVkIGBSRUFEX09OQ0UoKWAgc2VlbXMgdG8gYmUgZXN0YWJsaXNoaW5nIGEgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyB0byBlbnN1cmUgdGhhdCB3aGVuIHdlIGFjY2VzcyB0aGUgYGFub25fdm1hYCBmaWVsZHMgaW4gYHJldXNhYmxlX2Fub25fdm1hYCwgdGhleSBhcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgYW5kIHNhZmUgdG8gdXNlLlxuXG5Pa2F5LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgZnVsbCBjb250ZXh0LiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gdGVsbCBpZiBLTVNBTiBuZWVkcyBzb21lIGRlZGljYXRlZCBhdHRlbnRpb24uIFxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6NTQuMTUzNzgxOTY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ybWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdCAqIEFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIGRvIHByb3BlciBhbm9uX3ZtYSBsb2NraW5nIGV2ZW5cXG4gMTgxOlxcdCAqIGZvciB0aGUgbmV3IGFsbG9jYXRpb24uIEF0IHRoZSBzYW1lIHRpbWUsIHdlIGRvIG5vdCB3YW50XFxuIDE4MjpcXHQgKiB0byBkbyBhbnkgbG9ja2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIGFscmVhZHkgaGF2aW5nXFxuIDE4MzpcXHQgKiBhbiBhbm9uX3ZtYS5cXG4gMTg0OlxcdCAqL1xcbiAxODU6XFx0aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gMTg2OlxcdHtcXG4gMTg3OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG4gMTg4OlxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEsICphbGxvY2F0ZWQ7XFxuIDE4OTpcXHRcXHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YztcXG4gMTkwOlxcdFxcbiAxOTE6XFx0XFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcXG4gMTkyOlxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdGF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpO1xcbiAxOTU6XFx0XFx0aWYgKCFhdmMpXFxuIDE5NjpcXHRcXHRcXHRnb3RvIG91dF9lbm9tZW07XFxuIDE5NzpcXHRcXG4gMTk4OlxcdFxcdGFub25fdm1hID0gZmluZF9tZXJnZWFibGVfYW5vbl92bWEodm1hKTtcXG4gMTk5OlxcdFxcdGFsbG9jYXRlZCA9IE5VTEw7XFxuIDIwMDpcXHRcXHRpZiAoIWFub25fdm1hKSB7XFxuIDIwMTpcXHRcXHRcXHRhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7XFxuIDIwMjpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWFub25fdm1hKSlcXG4gMjAzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2Vub21lbV9mcmVlX2F2YztcXG4gMjA0OlxcdFxcdFxcdGFub25fdm1hLVxcdTAwM2VudW1fY2hpbGRyZW4rKzsgLyogc2VsZi1wYXJlbnQgbGluayBmb3IgbmV3IHJvb3QgKi9cXG4gMjA1OlxcdFxcdFxcdGFsbG9jYXRlZCA9IGFub25fdm1hO1xcbiAyMDY6XFx0XFx0fVxcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcXG4gMjA5OlxcdFxcdC8qIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IGFnYWluc3QgdGhyZWFkcyAqL1xcbiAyMTA6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZtbS1cXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcXG4gMjExOlxcdFxcdGlmIChsaWtlbHkoIXZtYS1cXHUwMDNlYW5vbl92bWEpKSB7XFxuIDIxMjpcXHRcXHRcXHQvKlxcbiAyMTM6XFx0XFx0XFx0ICogTWFrZSBhbm9uX3ZtYSBmaWVsZHMgdmlzaWJsZSBiZWZvcmUgYW5vbl92bWEgaXMgcHVibGlzaGVkLlxcbiAyMTQ6XFx0XFx0XFx0ICogUGFpcmVkIHdpdGggYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGluIHJldXNhYmxlX2Fub25fdm1hKCkuXFxuIDIxNTpcXHRcXHRcXHQgKi9cXG4gMjE2OlxcdFxcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2bWEtXFx1MDAzZWFub25fdm1hLCBhbm9uX3ZtYSk7XFxuIDIxNzpcXHRcXHRcXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcXG4gMjE4OlxcdFxcdFxcdGFub25fcm1hcF90cmVlX2luc2VydChhdmMsIGFub25fdm1hKTtcXG4gMjE5OlxcdFxcdFxcdGFub25fdm1hLVxcdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcXG4gMjIwOlxcdFxcdFxcdGFsbG9jYXRlZCA9IE5VTEw7XFxuIDIyMTpcXHRcXHRcXHRhdmMgPSBOVUxMO1xcbiAyMjI6XFx0XFx0fVxcbiAyMjM6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbiAyMjQ6XFx0XFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFub25fdm1hKTtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCkpXFxuIDIyNzpcXHRcXHRcXHRwdXRfYW5vbl92bWEoYWxsb2NhdGVkKTtcXG4gMjI4OlxcdFxcdGlmICh1bmxpa2VseShhdmMpKVxcbiAyMjk6XFx0XFx0XFx0YW5vbl92bWFfY2hhaW5fZnJlZShhdmMpO1xcbiAyMzA6XFx0XFxuIDIzMTpcXHRcXHRyZXR1cm4gMDtcXG4gMjMyOlxcdFxcbiAyMzM6XFx0IG91dF9lbm9tZW1fZnJlZV9hdmM6XFxuIDIzNDpcXHRcXHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XFxuIDIzNTpcXHQgb3V0X2Vub21lbTpcXG4gMjM2OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMzc6XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHRzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6NTQuMTU0MDYzNTA5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjYyNDUxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbW0vdm1hLmNgIC0gYHJldXNhYmxlX2Fub25fdm1hYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgbGV0J3MgemVybyBpbiBvbiBgbW0vdm1hLmNgIGFnYWluLiBJJ3ZlIGdvdCBhIGh1bmNoLCBhbmQgaXQncyBhcm91bmQgaG93IHdlIGhhbmRsZSBhbm9ueW1vdXMgVk1BcyBhbmQgdGhlaXIgcmV1c2FiaWxpdHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJldmlzaXQgdGhlIGByZXVzYWJsZV9hbm9uX3ZtYWAgYXNwZWN0LiBUaGVyZSdzIGEgcGFydGljdWxhciBwcm9ibGVtIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCwgYW5kIEkgYmVsaWV2ZSB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUgaG9sZHMgdGhlIGtleSB0byB0aGUgc29sdXRpb24uIEkga25vdyB0aGVyZSBoYXZlIGJlZW4gc3VidGxlIHNoaWZ0cyBpbiB0aGUgYmVoYXZpb3VyIGFyb3VuZCByZWNsYWltaW5nIGFub255bW91cyBtZW1vcnkgcmVjZW50bHksIGVzcGVjaWFsbHkgaW4gaGlnaGx5IGNvbnRlc3RlZCBtZW1vcnkgc2NlbmFyaW9zLCBhbmQgSSBzdXNwZWN0IHRoZXNlIGZ1bmN0aW9uIGNhbGxzIHdpbGwgYmUgdGhlIGNydXggb2YgdGhlIGlzc3VlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgYW5kIHNlZSBpZiBteSBpbnR1aXRpb24gaG9sZHMgYW55IHdhdGVyLiBUaGlzIGZ1bmN0aW9uIGluIHBhcnRpY3VsYXIgaGFzIGJlZW4gdG91Y2hlZCBpbiBzZXZlcmFsIHBhdGNoIHNldHMsIGFuZCBJIHdvbmRlciB3aGF0IGFsbCB0aGUgY2h1cm4gaXMgYWJvdXQuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY2FsbCBwYXRoIHRocm91Z2ggdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE1OjM1OjU2LjI4MDMxMTQ3NloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA4MDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjA4MTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yMDgyOlxcdH1cXG4yMDgzOlxcdFxcbjIwODQ6XFx0LypcXG4yMDg1OlxcdCAqIERvIHNvbWUgYmFzaWMgc2FuaXR5IGNoZWNraW5nIHRvIHNlZSBpZiB3ZSBjYW4gcmUtdXNlIHRoZSBhbm9uX3ZtYVxcbjIwODY6XFx0ICogZnJvbSAnb2xkJy4gVGhlICdhJy8nYicgdm1hJ3MgYXJlIGluIFZNIG9yZGVyIC0gb25lIG9mIHRoZW0gd2lsbCBiZVxcbjIwODc6XFx0ICogdGhlIHNhbWUgYXMgJ29sZCcsIHRoZSBvdGhlciB3aWxsIGJlIHRoZSBuZXcgb25lIHRoYXQgaXMgdHJ5aW5nXFxuMjA4ODpcXHQgKiB0byBzaGFyZSB0aGUgYW5vbl92bWEuXFxuMjA4OTpcXHQgKlxcbjIwOTA6XFx0ICogTk9URSEgVGhpcyBydW5zIHdpdGggbW1hcF9sb2NrIGhlbGQgZm9yIHJlYWRpbmcsIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXRcXG4yMDkxOlxcdCAqIHRoZSBhbm9uX3ZtYSBvZiAnb2xkJyBpcyBjb25jdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc2V0IHVwXFxuMjA5MjpcXHQgKiBieSBhbm90aGVyIHBhZ2UgZmF1bHQgdHJ5aW5nIHRvIG1lcmdlIF90aGF0Xy4gQnV0IHRoYXQncyBvazogaWYgaXRcXG4yMDkzOlxcdCAqIGlzIGJlaW5nIHNldCB1cCwgdGhhdCBhdXRvbWF0aWNhbGx5IG1lYW5zIHRoYXQgaXQgd2lsbCBiZSBhIHNpbmdsZXRvblxcbjIwOTQ6XFx0ICogYWNjZXB0YWJsZSBmb3IgbWVyZ2luZywgc28gd2UgY2FuIGRvIGFsbCBvZiB0aGlzIG9wdGltaXN0aWNhbGx5LiBCdXRcXG4yMDk1OlxcdCAqIHdlIGRvIHRoYXQgUkVBRF9PTkNFKCkgdG8gbWFrZSBzdXJlIHRoYXQgd2UgbmV2ZXIgcmUtbG9hZCB0aGUgcG9pbnRlci5cXG4yMDk2OlxcdCAqXFxuMjA5NzpcXHQgKiBUaGUgUkVBRF9PTkNFKCkgZXN0YWJsaXNoZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gYW5vbl92bWEgYW5kXFxuMjA5ODpcXHQgKiBhbnkgYWNjZXNzIHRvIGl0cyBmaWVsZHMsIHdoaWNoIHBhaXJzIHdpdGggdGhlIGFzc2lnbm1lbnQgdG9cXG4yMDk5OlxcdCAqIHZtYS1cXHUwMDNlYW5vbl92bWEgcGVyZm9ybWVkIHdpdGggcmVsZWFzZSBzZW1hbnRpY3MgaW4gX19hbm9uX3ZtYV9wcmVwYXJlKCkuXFxuMjEwMDpcXHQgKlxcbjIxMDE6XFx0ICogVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBhcyBhbm9uX3ZtYSdzIGFyZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSBzb1xcbjIxMDI6XFx0ICogYWNjZXNzaW5nIGFuIHVuaW5pdGlhbGlzZWQgYW5vbl92bWEncyBmaWVsZHMgbWF5IHJlc3VsdCBpbiBhIFVBRi5cXG4yMTAzOlxcdCAqXFxuMjEwNDpcXHQgKiBJT1c6IHRoYXQgdGhlIFxcXCJsaXN0X2lzX3Npbmd1bGFyKClcXFwiIHRlc3Qgb24gdGhlIGFub25fdm1hX2NoYWluIG9ubHlcXG4yMTA1OlxcdCAqIG1hdHRlcnMgZm9yIHRoZSAnc3RhYmxlIGFub25fdm1hJyBjYXNlIChpZSB0aGUgdGhpbmcgd2Ugd2FudCB0byBhdm9pZFxcbjIxMDY6XFx0ICogaXMgdG8gcmV0dXJuIGFuIGFub25fdm1hIHRoYXQgaXMgXFxcImNvbXBsZXhcXFwiIGR1ZSB0byBoYXZpbmcgZ29uZSB0aHJvdWdoXFxuMjEwNzpcXHQgKiBhIGZvcmspLlxcbjIxMDg6XFx0ICpcXG4yMTA5OlxcdCAqIFdlIGFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIHR3byB2bWEncyBhcmUgY29tcGF0aWJsZSAoYWRqYWNlbnQsXFxuMjExMDpcXHQgKiBhbmQgd2l0aCB0aGUgc2FtZSBtZW1vcnkgcG9saWNpZXMpLiBUaGF0J3MgYWxsIHN0YWJsZSwgZXZlbiB3aXRoIGp1c3RcXG4yMTExOlxcdCAqIGEgcmVhZCBsb2NrIG9uIHRoZSBtbWFwX2xvY2suXFxuMjExMjpcXHQgKi9cXG4yMTEzOlxcdHN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJldXNhYmxlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqb2xkLFxcbjIxMTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmEsXFxuMjExNTpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYilcXG4yMTE2OlxcdHtcXG4yMTE3OlxcdFxcdGlmIChhbm9uX3ZtYV9jb21wYXRpYmxlKGEsIGIpKSB7XFxuMjExODpcXHRcXHRcXHQvKiBQYWlyZWQgd2l0aCBhIG1lbW9yeSBiYXJyaWVyIGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLiAqL1xcbjIxMTk6XFx0XFx0XFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IFJFQURfT05DRShvbGQtXFx1MDAzZWFub25fdm1hKTtcXG4yMTIwOlxcdFxcbjIxMjE6XFx0XFx0XFx0aWYgKGFub25fdm1hIFxcdTAwMjZcXHUwMDI2IGxpc3RfaXNfc2luZ3VsYXIoXFx1MDAyNm9sZC1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKVxcbjIxMjI6XFx0XFx0XFx0XFx0cmV0dXJuIGFub25fdm1hO1xcbjIxMjM6XFx0XFx0fVxcbjIxMjQ6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjEyNTpcXHR9XFxuMjEyNjpcXHRcXG4yMTI3OlxcdC8qXFxuMjEyODpcXHQgKiBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSBpcyB1c2VkIGJ5IGFub25fdm1hX3ByZXBhcmUsIHRvIGNoZWNrXFxuMjEyOTpcXHQgKiBuZWlnaGJvdXJpbmcgdm1hcyBmb3IgYSBzdWl0YWJsZSBhbm9uX3ZtYSwgYmVmb3JlIGl0IGdvZXMgb2ZmXFxuMjEzMDpcXHQgKiB0byBhbGxvY2F0ZSBhIG5ldyBhbm9uX3ZtYS4gIEl0IGNoZWNrcyBiZWNhdXNlIGEgcmVwZXRpdGl2ZVxcbjIxMzE6XFx0ICogc2VxdWVuY2Ugb2YgbXByb3RlY3RzIGFuZCBmYXVsdHMgbWF5IG90aGVyd2lzZSBsZWFkIHRvIGRpc3RpbmN0XFxuMjEzMjpcXHQgKiBhbm9uX3ZtYXMgYmVpbmcgYWxsb2NhdGVkLCBwcmV2ZW50aW5nIHZtYSBtZXJnZSBpbiBzdWJzZXF1ZW50XFxuMjEzMzpcXHQgKiBtcHJvdGVjdC5cXG4yMTM0OlxcdCAqL1xcbjIxMzU6XFx0c3RydWN0IGFub25fdm1hICpmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4yMTM2OlxcdHtcXG4yMTM3OlxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBOVUxMO1xcbjIxMzg6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCAqbmV4dDtcXG4yMTM5OlxcdFxcdFZNQV9JVEVSQVRPUih2bWksIHZtYS1cXHUwMDNldm1fbW0sIHZtYS1cXHUwMDNldm1fZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzU6NTYuMjgwNTM3MDU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczNTcwMDc1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBSZXF1aXJlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBjb3JlIGNoYW5nZSBpcyBpbiBgbW0vcm1hcC5jYCwgd2hlcmUgYSBwbGFpbiBzdG9yZSB0byBgdm1hLVx1MDAzZWFub25fdm1hYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWEsIGFub25fdm1hKTtgLiBUaGVyZSBhcmUgYWxzbyBzb21lIGNvbW1lbnQgdXBkYXRlcyBpbiBgbW0vdm1hLmNgLCB3aGljaCBpcyBnb29kIHRvIHNlZSwgY2xhcmlmeWluZyB0aGUgbWVtb3J5IGJhcnJpZXIgaW1wbGljYXRpb25zIGFsb25nc2lkZSBgUkVBRF9PTkNFYCBpbiBgcmV1c2FibGVfYW5vbl92bWFgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBtZW1vcnkgb3JkZXJpbmcgaXNzdWUuIFNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgbGVhZCB0byBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBgdm1hLVx1MDAzZWFub25fdm1hYCBwb2ludGVyIGlzIHB1Ymxpc2hlZCB0byBvdGhlciB0aHJlYWRzICpiZWZvcmUqIHRoZSBmaWVsZHMgd2l0aGluIGBhbm9uX3ZtYWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gYSBtZW1vcnkgb3JkZXJpbmcgcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHNjZW5hcmlvLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIGlzc3VlcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiBSQ1UtbWFuYWdlZCBTTEFCIGNhY2hlcywgd2hpY2ggdGhlIGNvbW1lbnQgY29ycmVjdGx5IHBvaW50cyBvdXQgKGBTTEFCX1RZUEVTQUZFX0JZX1JDVWApLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgcmVxdWlyZSBLTVNBTj8gTGV0J3MgY2hlY2sgdGhlIHJ1bGVzLiBUaGUgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIG5vIGBjb3B5X3RvX3VzZXJgIHByb2JsZW1zLiBJdCBhbHNvIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIG1vc3QgaW1wb3J0YW50bHksIGl0IGlzbid0IEtNU0FOLWRldGVjdGFibGUgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoaXMgcGF0Y2ggKmlzKiBhYm91dCBtZW1vcnkgb3JkZXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbiwgaXQncyB0cnVlLiBCdXQgdGhlIHBvdGVudGlhbCBidWdzIGFyZSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlcyDigJMgcmFjZXMsIHVzZS1hZnRlci1mcmVlIOKAkyB0aGluZ3MgdGhhdCBzaG91bGQgYmUgcmVhZGlseSBjYXVnaHQgYnkgS0FTQU4sIEtDU0FOLCBvciBMT0NLREVQLiBJdCBpcyBleHBsaWNpdGx5IHN0YXRlZCB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMgYW5kIHNob3VsZCAqb25seSogYmUgdXNlZCBmb3IgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MuIEdpdmVuIHRoYXQgdGhpcyBwYXRjaCBkZWFscyB3aXRoIG1lbW9yeSBvcmRlcmluZywgYnV0ICpub3QqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LlxuXG5UaGVyZWZvcmUsIG15IHJlYXNvbmluZyBpcyB0aGlzOiBUaGUgcGF0Y2ggY29ycmVjdGx5IGFkZHJlc3NlcyBhIG1lbW9yeSBvcmRlcmluZyByYWNlIGNvbmRpdGlvbiB3aGVuIHB1Ymxpc2hpbmcgYGFub25fdm1hYCB0byBjb25jdXJyZW50IHJlYWRlcnMgdGhhdCBjb3VsZCBsZWFkIHRvIFVzZS1BZnRlci1GcmVlIGlzc3VlcywgYW5kIGVuc3VyZXMgcHJvcGVyIGluaXRpYWxpemF0aW9uIHVzaW5nIGBzbXBfc3RvcmVfcmVsZWFzZWAuIFRoZSBwYXRjaCBkb2Vzbid0IGNyZWF0ZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcywgYW5kIGl0ICpkb2Vzbid0KiBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocy4gVGhlIGJ1Z3MgaXQgcG90ZW50aWFsbHkgZml4ZXMgZmFsbCBpbnRvIHRoZSBLQVNBTi9LQ1NBTi9MT0NLREVQIGNhdGVnb3J5LiBTbywgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBOb3csIGxldCdzIGRvdWJsZS1jaGVjayBhbGwgdG9vbCBwYXJhbWV0ZXJzIGFuZCBtYWtlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MjIsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTU6MzY6MDMuNjM3NTQ4MTg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtbS9ybWFwLmMgYW5kIG1tL3ZtYS5jIHRvIHVzZSBzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dm1hLVxcdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpIGluc3RlYWQgb2YgYSBwbGFpbiBhc3NpZ25tZW50IGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLCBlbnN1cmluZyBwcm9wZXIgbWVtb3J5IG9yZGVyaW5nIHdpdGggUkVBRF9PTkNFIGluIHJldXNhYmxlX2Fub25fdm1hKCkuIFRoaXMgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIG9uIFNMQUJfVFlQRVNBRkVfQllfUkNVIG9iamVjdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBsZW5ndGggbW9kaWZpY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3BpZXMvaW5mb2xlYWtzLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtbS9ybWFwLmMgYW5kIG1tL3ZtYS5jIHRvIHVzZSBzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dm1hLVxcdTAwM2Vhbm9uX3ZtYSwgYW5vbl92bWEpIGluc3RlYWQgb2YgYSBwbGFpbiBhc3NpZ25tZW50IGluIF9fYW5vbl92bWFfcHJlcGFyZSgpLCBlbnN1cmluZyBwcm9wZXIgbWVtb3J5IG9yZGVyaW5nIHdpdGggUkVBRF9PTkNFIGluIHJldXNhYmxlX2Fub25fdm1hKCkuIFRoaXMgYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIG9uIFNMQUJfVFlQRVNBRkVfQllfUkNVIG9iamVjdHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBsZW5ndGggbW9kaWZpY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXJzcGFjZSBjb3BpZXMvaW5mb2xlYWtzLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4vS0NTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmj[1] Phase: Succeeded StartedAt: 2026-09-08 15:36:15 +0000 UTC FinishedAt: 2026-09-08 15:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 15:36:15 +0000 UTC FinishedAt: 2026-09-08 15:36:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2] Phase: Succeeded StartedAt: 2026-09-08 15:36:15 +0000 UTC FinishedAt: 2026-09-08 19:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 15:36:15 +0000 UTC FinishedAt: 2026-09-08 19:19:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 15:36:15 +0000 UTC FinishedAt: 2026-09-08 15:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 15:36:15 +0000 UTC FinishedAt: 2026-09-08 15:36:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2mvmj/series-workflow2mvmj-convert-artifact-914221051/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 15:36:25 +0000 UTC FinishedAt: 2026-09-08 15:53:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 15:36:25 +0000 UTC FinishedAt: 2026-09-08 15:53: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:*952073bc-e5a1-48c7-a612-700e3eb10076,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-workflow2mvmj/series-workflow2mvmj-convert-artifact-914221051/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": "5ebac17d-be0e-474e-b09e-4037f585ad5b", "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-workflow2mvmj/series-workflow2mvmj-build-action-1249941305/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 15:36:25 +0000 UTC FinishedAt: 2026-09-08 15:53:35 +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:*952073bc-e5a1-48c7-a612-700e3eb10076,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-workflow2mvmj/series-workflow2mvmj-convert-artifact-914221051/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": "5ebac17d-be0e-474e-b09e-4037f585ad5b", "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-workflow2mvmj/series-workflow2mvmj-build-action-1249941305/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 15:53:45 +0000 UTC FinishedAt: 2026-09-08 15:53:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 15:53:45 +0000 UTC FinishedAt: 2026-09-08 15:53:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 15:53:45 +0000 UTC FinishedAt: 2026-09-08 15:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 15:53:45 +0000 UTC FinishedAt: 2026-09-08 15:53:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2mvmj/series-workflow2mvmj-convert-artifact-3048741458/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 15:53:55 +0000 UTC FinishedAt: 2026-09-08 15:55:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 15:53:55 +0000 UTC FinishedAt: 2026-09-08 15:55:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ebac17d-be0e-474e-b09e-4037f585ad5b,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-workflow2mvmj/series-workflow2mvmj-build-action-1249941305/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-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 15:55:37 +0000 UTC FinishedAt: 2026-09-08 15:55:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 15:55:37 +0000 UTC FinishedAt: 2026-09-08 15:55:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 15:55:37 +0000 UTC FinishedAt: 2026-09-08 16:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 15:55:37 +0000 UTC FinishedAt: 2026-09-08 16:12:18 +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:*952073bc-e5a1-48c7-a612-700e3eb10076,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-workflow2mvmj/series-workflow2mvmj-convert-artifact-3048741458/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": "e71d64ba-09fe-4a32-b3e4-2f12b20468d7", "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-workflow2mvmj/series-workflow2mvmj-build-action-4195784934/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 15:55:37 +0000 UTC FinishedAt: 2026-09-08 16:12:08 +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:*952073bc-e5a1-48c7-a612-700e3eb10076,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-workflow2mvmj/series-workflow2mvmj-convert-artifact-3048741458/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": "e71d64ba-09fe-4a32-b3e4-2f12b20468d7", "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-workflow2mvmj/series-workflow2mvmj-build-action-4195784934/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 16:12:18 +0000 UTC FinishedAt: 2026-09-08 16:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 16:12:18 +0000 UTC FinishedAt: 2026-09-08 16:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 16:12:18 +0000 UTC FinishedAt: 2026-09-08 16:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 16:12:18 +0000 UTC FinishedAt: 2026-09-08 16:14:07 +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:*e71d64ba-09fe-4a32-b3e4-2f12b20468d7,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-workflow2mvmj/series-workflow2mvmj-build-action-4195784934/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-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 16:14:17 +0000 UTC FinishedAt: 2026-09-08 19:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 16:14:17 +0000 UTC FinishedAt: 2026-09-08 19:19:53 +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":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5ebac17d-be0e-474e-b09e-4037f585ad5b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e71d64ba-09fe-4a32-b3e4-2f12b20468d7,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-workflow2mvmj/series-workflow2mvmj-build-action-1249941305/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-workflow2mvmj/series-workflow2mvmj-build-action-4195784934/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 16:14:17 +0000 UTC FinishedAt: 2026-09-08 16:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 16:14:17 +0000 UTC FinishedAt: 2026-09-08 16:14:23 +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":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2mvmj/series-workflow2mvmj-convert-artifact-3647529127/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 16:14:17 +0000 UTC FinishedAt: 2026-09-08 16:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 16:14:17 +0000 UTC FinishedAt: 2026-09-08 16:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 16:14:18 +0000 UTC FinishedAt: 2026-09-08 16:14:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 16:14:28 +0000 UTC FinishedAt: 2026-09-08 19:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__anon_vma_prepare","find_mergeable_anon_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e14a3454806468b086fe2e4ca2e1bff95b528531","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"c42d2d11-a269-4327-bbf9-67ed62403e3b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 16:14:28 +0000 UTC FinishedAt: 2026-09-08 19:19:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ebac17d-be0e-474e-b09e-4037f585ad5b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e71d64ba-09fe-4a32-b3e4-2f12b20468d7,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-workflow2mvmj/series-workflow2mvmj-build-action-1249941305/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-workflow2mvmj/series-workflow2mvmj-build-action-4195784934/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-workflow2mvmj/series-workflow2mvmj-convert-artifact-3647529127/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,}