Name: series-workflowhzk2m Phase: Succeeded StartedAt: 2026-07-17 15:53:58 +0000 UTC FinishedAt: 2026-07-17 20:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[0] Phase: Succeeded StartedAt: 2026-07-17 15:53:58 +0000 UTC FinishedAt: 2026-07-17 16:19:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[0].run-triage Phase: Succeeded StartedAt: 2026-07-17 15:53:58 +0000 UTC FinishedAt: 2026-07-17 16:19:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_WBT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_WBT" ], "series_id": "ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "wbt_set_lat", "queue_wb_lat_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19XQlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3YnRfc2V0X2xhdCYjMzQ7LAogICAgJiMzNDtxdWV1ZV93Yl9sYXRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjaGVja2luZyBpZiB0aGUgd3JpdGViYWNrIHRocm90dGxpbmcgbGF0ZW5jeSBoYXMgY2hhbmdlZCB3aGVuIHVwZGF0ZWQgdmlhIHN5c2ZzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIHdyaXRlYmFjayB0aHJvdHRsaW5nIGZlYXR1cmUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byB0aGUgYHdidF9sYXRfdXNlY2Agc3lzZnMgZmlsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRjNzE1MWI2NmZiZjdiMGZkZTJhMzNhNGFkNmMxZjI5NGEyMjkzODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAxNjoxNzozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstd2J0LmMgYi9ibG9jay9ibGstd2J0LmNcbmluZGV4IDk1M2Q0MDBmZDAxMzdiLi40ZjEyYTA2NDI4NmVmZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay13YnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXdidC5jXG5AQCAtODEzLDcgJiM0Mzs4MTMsMTQgQEAgc3RhdGljIHZvaWQgd2J0X3F1ZXVlX2RlcHRoX2NoYW5nZWQoc3RydWN0IHJxX3FvcyAqcnFvcylcbiBcdHdidF91cGRhdGVfbGltaXRzKFJRV0IocnFvcykpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB3YnRfc2V0X2xhdF9jaGFuZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1NjQgdmFsKVxuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm4gdHJ1ZSBpZiB3cml0aW5nIEB2YWwgd291bGQgY2hhbmdlIHRoZSBXQlQgc3RhdGU6XG4mIzQzOyAqIDEpIEB2YWwgZGlmZmVycyBmcm9tIHRoZSBzdG9yZWQgbWluX2xhdF9uc2VjLCBvclxuJiM0MzsgKiAyKSBAdmFsIG1hdGNoZXMsIGJ1dCBlbmFibGVfc3RhdGUgaXMgbm90IHRoZSBjb3JyZXNwb25kaW5nIG1hbnVhbCBzdGF0ZVxuJiM0MzsgKiAgICAoV0JUX1NUQVRFX09OX01BTlVBTCBmb3Igbm9uLXplcm8gQHZhbCwgV0JUX1NUQVRFX09GRl9NQU5VQUwgZm9yIDApLFxuJiM0MzsgKiAgICBzbyB0aGUgd3JpdGUgc3RpbGwgaGFzIHRvIHVwZGF0ZSBlbmFibGVfc3RhdGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCB3YnRfbGF0X2NoYW5nZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHU2NCB2YWwpXG4ge1xuIFx0c3RydWN0IHJxX3FvcyAqcnFvcyA9IHdidF9ycV9xb3MocSk7XG4gXHRzdHJ1Y3QgcnFfd2IgKnJ3YjtcbkBAIC04MjUsNyAmIzQzOzgzMiw4IEBAIHN0YXRpYyBib29sIHdidF9zZXRfbGF0X2NoYW5nZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHU2NCB2YWwpXG4gXHRpZiAocndiLVx1MDAzZW1pbl9sYXRfbnNlYyAhPSB2YWwpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0cmV0dXJuIHJ3Yl9lbmFibGVkKHJ3YikgIT0gISF2YWw7XG4mIzQzO1x0cmV0dXJuIHJ3Yi1cdTAwM2VlbmFibGVfc3RhdGUgIT1cbiYjNDM7XHQgICAgICAgKHZhbCA/IFdCVF9TVEFURV9PTl9NQU5VQUwgOiBXQlRfU1RBVEVfT0ZGX01BTlVBTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHdidF9leGl0KHN0cnVjdCBycV9xb3MgKnJxb3MpXG5AQCAtMTAyMSw3ICYjNDM7MTAyOSw3IEBAIGludCB3YnRfc2V0X2xhdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgczY0IHZhbClcbiBcdFx0dmFsICo9IDEwMDBVTEw7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlcnFvc19zdGF0ZV9tdXRleCk7XG4tXHRpZiAoIXdidF9zZXRfbGF0X2NoYW5nZWQocSwgdmFsKSkge1xuJiM0MztcdGlmICghd2J0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlcnFvc19zdGF0ZV9tdXRleCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19XQlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3YnRfc2V0X2xhdCYjMzQ7LAogICAgJiMzNDtxdWV1ZV93Yl9sYXRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjaGVja2luZyBpZiB0aGUgd3JpdGViYWNrIHRocm90dGxpbmcgbGF0ZW5jeSBoYXMgY2hhbmdlZCB3aGVuIHVwZGF0ZWQgdmlhIHN5c2ZzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIHdyaXRlYmFjayB0aHJvdHRsaW5nIGZlYXR1cmUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byB0aGUgYHdidF9sYXRfdXNlY2Agc3lzZnMgZmlsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGM3MTUxYjY2ZmJmN2IwZmRlMmEzM2E0YWQ2YzFmMjk0YTIyOTM4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDE3IDE2OjE3OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXdidC5jIGIvYmxvY2svYmxrLXdidC5jCmluZGV4IDk1M2Q0MDBmZDAxMzdiLi40ZjEyYTA2NDI4NmVmZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXdidC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay13YnQuYwpAQCAtODEzLDcgJiM0Mzs4MTMsMTQgQEAgc3RhdGljIHZvaWQgd2J0X3F1ZXVlX2RlcHRoX2NoYW5nZWQoc3RydWN0IHJxX3FvcyAqcnFvcykKIAl3YnRfdXBkYXRlX2xpbWl0cyhSUVdCKHJxb3MpKTsKIH0KIAotc3RhdGljIGJvb2wgd2J0X3NldF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbCkKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0cnVlIGlmIHdyaXRpbmcgQHZhbCB3b3VsZCBjaGFuZ2UgdGhlIFdCVCBzdGF0ZToKJiM0MzsgKiAxKSBAdmFsIGRpZmZlcnMgZnJvbSB0aGUgc3RvcmVkIG1pbl9sYXRfbnNlYywgb3IKJiM0MzsgKiAyKSBAdmFsIG1hdGNoZXMsIGJ1dCBlbmFibGVfc3RhdGUgaXMgbm90IHRoZSBjb3JyZXNwb25kaW5nIG1hbnVhbCBzdGF0ZQomIzQzOyAqICAgIChXQlRfU1RBVEVfT05fTUFOVUFMIGZvciBub24temVybyBAdmFsLCBXQlRfU1RBVEVfT0ZGX01BTlVBTCBmb3IgMCksCiYjNDM7ICogICAgc28gdGhlIHdyaXRlIHN0aWxsIGhhcyB0byB1cGRhdGUgZW5hYmxlX3N0YXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHdidF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbCkKIHsKIAlzdHJ1Y3QgcnFfcW9zICpycW9zID0gd2J0X3JxX3FvcyhxKTsKIAlzdHJ1Y3QgcnFfd2IgKnJ3YjsKQEAgLTgyNSw3ICYjNDM7ODMyLDggQEAgc3RhdGljIGJvb2wgd2J0X3NldF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbCkKIAlpZiAocndiLSZndDttaW5fbGF0X25zZWMgIT0gdmFsKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiByd2JfZW5hYmxlZChyd2IpICE9ICEhdmFsOwomIzQzOwlyZXR1cm4gcndiLSZndDtlbmFibGVfc3RhdGUgIT0KJiM0MzsJICAgICAgICh2YWwgPyBXQlRfU1RBVEVfT05fTUFOVUFMIDogV0JUX1NUQVRFX09GRl9NQU5VQUwpOwogfQogCiBzdGF0aWMgdm9pZCB3YnRfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKQpAQCAtMTAyMSw3ICYjNDM7MTAyOSw3IEBAIGludCB3YnRfc2V0X2xhdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgczY0IHZhbCkKIAkJdmFsICo9IDEwMDBVTEw7CiAKIAltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7cnFvc19zdGF0ZV9tdXRleCk7Ci0JaWYgKCF3YnRfc2V0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHsKJiM0MzsJaWYgKCF3YnRfbGF0X2NoYW5nZWQocSwgdmFsKSkgewogCQltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtycW9zX3N0YXRlX211dGV4KTsKIAkJZ290byBvdXQ7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV0JUIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYmxvY2svYmxrLXdidC5jYC4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHJlbmFtZSwgYHdidF9zZXRfbGF0X2NoYW5nZWRgIHRvIGB3YnRfbGF0X2NoYW5nZWRgLCB3aGljaCBpcyBmaW5lLCBhbmQgSSBjYW4gc2VlIHdoYXQgdGhleSYjMzk7cmUgZG9pbmcgd2l0aCB0aGUgbG9naWMgaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgbWFpbiBjb25jZXJuIGlzIGRldGVybWluaW5nIGlmIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgd3JpdGViYWNrIHRocm90dGxpbmcgKFdCVCkgd2lsbCBhY3R1YWxseSAqY2hhbmdlKiB0aGUgY3VycmVudCBzdGF0ZS4gVGhlIG9yaWdpbmFsIGNoZWNrLCBgcmV0dXJuIHJ3Yl9lbmFibGVkKHJ3YikgIT0gISF2YWw7YCwgd2FzIGEgYml0IGNsdW5reSwgYnV0IGZ1bmN0aW9uYWwuIE5vdyB0aGV5JiMzOTt2ZSByZXBsYWNlZCBpdCB3aXRoIGByZXR1cm4gcndiLSZndDtlbmFibGVfc3RhdGUgIT0gKHZhbCA/IFdCVF9TVEFURV9PTl9NQU5VQUwgOiBXQlRfU1RBVEVfT0ZGX01BTlVBTCk7YC4KCkVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBub3cgY29tcGFyaW5nIHRoZSBjdXJyZW50IGBlbmFibGVfc3RhdGVgIG9mIHRoZSBgcndiYCBzdHJ1Y3QgYWdhaW5zdCB0aGUgKmludGVuZGVkKiBzdGF0ZSBiYXNlZCBvbiB0aGUgaW5wdXQgYHZhbGAuIGB2YWxgIHNlZW1zIHRvIGJlIGEgYm9vbGVhbiwgd2hpY2ggaXMgdGhlbiBtYXBwZWQgdG8gdGhlIGBXQlRfU1RBVEVfT05fTUFOVUFMYCBhbmQgYFdCVF9TVEFURV9PRkZfTUFOVUFMYCBlbnVtIHZhbHVlcywgaW5kaWNhdGluZyB3aGV0aGVyIHdlJiMzOTtyZSBtYW51YWxseSB0dXJuaW5nIFdCVCBvbiBvciBvZmYuCgpJIG5lZWQgdG8gZGlnIGludG8gYGJsb2NrL2Jsay13YnQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGByd2JgIHN0cnVjdHVyZSBjb21lcyBmcm9tLCB3aGF0IGl0cyBmaWVsZHMgbWVhbiwgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgbWVjaGFuaXNtcyBhcmUgaW4gcGxheSBhcm91bmQgV0JULiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIFdCVCBtYW5hZ2VtZW50IGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGlzIGNoYW5nZSBtaWdodCBoYXZlIGZvciBkaWZmZXJlbnQgc2NlbmFyaW9zLiBVbmRlcnN0YW5kaW5nIHRoZSB3aWRlciBjb250ZXh0IGlzIGtleSBiZWZvcmUgSSYjMzk7bGwgYmUgY29tZm9ydGFibGUgd2l0aCB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3didF9sYXRfY2hhbmdlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstd2J0LmM9ODEwPXN0YXRpYyB2b2lkIHdidF9xdWV1ZV9kZXB0aF9jaGFuZ2VkKHN0cnVjdCBycV9xb3MgKnJxb3MpXG4tLVxuYmxvY2svYmxrLXdidC5jLTgyMi0gKi9cbmJsb2NrL2Jsay13YnQuYzo4MjM6c3RhdGljIGJvb2wgd2J0X2xhdF9jaGFuZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1NjQgdmFsKVxuYmxvY2svYmxrLXdidC5jLTgyNC17XG4tLVxuYmxvY2svYmxrLXdidC5jPTk5OD1pbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpXG4tLVxuYmxvY2svYmxrLXdidC5jLTEwMzEtXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlcnFvc19zdGF0ZV9tdXRleCk7XG5ibG9jay9ibGstd2J0LmM6MTAzMjpcdGlmICghd2J0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHtcbmJsb2NrL2Jsay13YnQuYy0xMDMzLVx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VycW9zX3N0YXRlX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEJsb2NrIFdyaXRlYmFjayBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgYGJsay13YnQuY2AuIEl0JiMzOTtzIGEga2V5IGNvbXBvbmVudCwgc28gdW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgZm9yLCBzYXksIHR1bmluZyB3cml0ZWJhY2sgcGVyZm9ybWFuY2UsIGRlYnVnZ2luZyBsYXRlbmN5IGlzc3Vlcywgb3IganVzdCBnZW5lcmFsbHkgZ3Jhc3BpbmcgaG93IHRoZSBibG9jayBsYXllciBpcyBiZWhhdmluZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBpdHMgcHJlc2VuY2UgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQmIzM5O3MgcHVsbGluZyBpdCBpbi4KCkkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGhpZXJhcmNoeS4gVXN1YWxseSwgeW91IGNhbiBmaW5kIGEgZ29vZCBlbnRyeSBwb2ludCB0aHJvdWdoIGBLY29uZmlnYCBmaWxlcyBpbiByZWxldmFudCBkaXJlY3RvcmllcywgbGlrZSB0aGUgYmxvY2sgbGF5ZXImIzM5O3Mgcm9vdCBvciB0aGUgZHJpdmVycy9ibG9jayBkaXJlY3RvcnkuIEkmIzM5O2xsIG1lbnRhbGx5IHJ1biB0aHJvdWdoIHRoZSByZWxldmFudCBkaXJlY3Rvcmllcywgc2Nhbm5pbmcgZm9yIGxpa2VseSBjYW5kaWRhdGVzIOKAkyBwb3RlbnRpYWxseSBhbnkgYEtjb25maWdgIGZpbGUgdG91Y2hpbmcgYmxvY2sgZGV2aWNlIGZlYXR1cmVzIG9yIGdlbmVyaWMgYmxvY2sgZGV2aWNlIHN1cHBvcnQuIElmIEkmIzM5O20gbHVja3ksIGEgcXVpY2sgZ3JlcCBvciBgZmluZCAuIC1uYW1lICYjMzQ7S2NvbmZpZyYjMzQ7IHwgeGFyZ3MgZ3JlcCBibGstd2J0LmNgIG1pZ2h0IGRvIHRoZSB0cmljaywgcHJvdmlkaW5nIHRoZSBkaXJlY3QgZGVwZW5kZW5jeS4KCklmIHRoYXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IGZydWl0ZnVsLCBJJiMzOTtsbCBmYWxsIGJhY2sgdG8gc2VhcmNoaW5nIGZvciBzeW1ib2xzLiBJJiMzOTtkIGNoZWNrIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgb3V0cHV0IG9yIHBvdGVudGlhbGx5IHVzZSBhIHRvb2wgbGlrZSBga2NvbmZpZy10dWlgIG9yIGBtZW51Y29uZmlnYCwgc2Nhbm5pbmcgZm9yIHN5bWJvbHMgcmVsYXRlZCB0byBibG9jayB3cml0ZWJhY2ssIGRpcnR5IHBhZ2UgaGFuZGxpbmcsIG9yIHNpbWlsYXIgZnVuY3Rpb25hbGl0eS4gSSBtaWdodCBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYW55IHJlbGF0ZWQgY29yZSBmZWF0dXJlcy4KClRoZW4sIG9uY2UgSSBmaW5kIHRoZSBjb25maWcgb3B0aW9uLCBJJiMzOTtsbCBpbW1lZGlhdGVseSB0aGluayBhYm91dCBpdHMgaW1wbGljYXRpb25zLiBJcyBpdCBhIGNvcmUgZmVhdHVyZSBvZiB0aGUgYmxvY2sgbGF5ZXIsIG9yIGlzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBzdG9yYWdlIGRyaXZlciBvciBmZWF0dXJlIHNldD8gSWYgaXQmIzM5O3MgYSBkcml2ZXItc3BlY2lmaWMgb3B0aW9uLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGF0IGRyaXZlciB0byBwcmVkaWN0IGl0cyBiZWhhdmlvci4gSWYgaXQmIzM5O3MgbW9yZSBnZW5lcmljLCBJJiMzOTtsbCBjb25zaWRlciBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIG90aGVyIG9wdGlvbnMsIHN1Y2ggYXMgdGhlIHdyaXRlYmFjayBpbnRlcnZhbCBvciBkaXJ0eSBwYWdlIHRocmVzaG9sZHMuIEkgbmVlZCB0byBxdWlja2x5IHZpc3VhbGl6ZSB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSBpdCBmYWxscyBpbnRvLCBlc3BlY2lhbGx5IGdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsJiMzOTtzIGJsb2NrIGxheWVyIGFyY2hpdGVjdHVyZS4gSSBrbm93IHRoZSBsaWtlbHkgZGVwZW5kZW5jaWVzLCBzbyB3aGF0IGVsc2UgZG9lcyB0aGlzIGRlcGVuZCBvbiwgYW5kIHdoYXQgZG9lcyB0aGlzIGVuYWJsZSwgYW5kIGhvdyBkb2VzIHRoaXMgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUga2VybmVsPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsay13YnQubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQkxLX0RFVl9aT05FRClcdCYjNDM7PSBibGstem9uZWQub1xuYmxvY2svTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JMS19XQlQpXHRcdCYjNDM7PSBibGstd2J0Lm9cbmJsb2NrL01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19CTEtfREVCVUdfRlMpXHQmIzQzOz0gYmxrLW1xLWRlYnVnZnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqQW5hbHl6aW5nIHRoZSBCTEtfV0JUIENvbmZpZ3VyYXRpb24gYW5kIExhdGVuY3kgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaXMgYEJMS19XQlRgLiBHb3QgaXQuIE5vdywgdGhlIGtleSBjaGFuZ2UgaXMgaW4gdGhlIGB3YnRfc2V0X2xhdGAgZnVuY3Rpb247IGl0JiMzOTtzIGJlZW4gdXBkYXRlZCB0byBsZXZlcmFnZSBgd2J0X2xhdF9jaGFuZ2VkYC4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBUbyBkbyB0aGF0LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMuIFdoZXJlIGlzIGB3YnRfc2V0X2xhdGAgYmVpbmcgaW52b2tlZD8gSSBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIHRvIGB3YnRfbGF0X2NoYW5nZWRgLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBmbG93IHRvIGZ1bGx5IGFuYWx5emUgdGhlIGNoYW5nZXMgbWFkZSBhbmQgcHJlZGljdCB0aGVpciBlZmZlY3Qgb24gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YnRfc2V0X2xhdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstc3lzZnMuYz03MTU9c3RhdGljIHNzaXplX3QgcXVldWVfd2JfbGF0X3N0b3JlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBjaGFyICpwYWdlLFxuLS1cbmJsb2NrL2Jsay1zeXNmcy5jLTcyNi1cbmJsb2NrL2Jsay1zeXNmcy5jOjcyNzpcdHJldCA9IHdidF9zZXRfbGF0KGRpc2ssIHZhbCk7XG5ibG9jay9ibGstc3lzZnMuYy03MjgtXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4tLVxuYmxvY2svYmxrLXdidC5jPTk2OD1zdGF0aWMgaW50IHdidF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgcnFfd2IgKnJ3Yilcbi0tXG5ibG9jay9ibGstd2J0LmMtOTk3LVxuYmxvY2svYmxrLXdidC5jOjk5ODppbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpXG5ibG9jay9ibGstd2J0LmMtOTk5LXtcbi0tXG5ibG9jay9ibGstd2J0Lmg9MTI9Ym9vbCB3YnRfZGlzYWJsZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xuYmxvY2svYmxrLXdidC5oOjEzOmludCB3YnRfc2V0X2xhdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgczY0IHZhbCk7XG5ibG9jay9ibGstd2J0LmgtMTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTeXNmcyBTdG9yZSBGdW5jdGlvbiBhbmQgYSBQb3RlbnRpYWwgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHBhdGguIEl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIGBxdWV1ZV93Yl9sYXRfc3RvcmVgIGluIGBibG9jay9ibGstc3lzZnMuY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgbWVhbmluZyBhIHVzZXIgaW4gdXNlcnNwYWNlIGNhbiBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGl0IGJ5IHdyaXRpbmcgdG8gYSBzeXNmcyBmaWxlLiBUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgYSBkaXJlY3QgaW50ZXJmYWNlLgoKVGhlIHBhdGNoIGl0c2VsZiBhZGRyZXNzZXMgYSBidWcgd2l0aGluIGB3YnRfc2V0X2xhdF9jaGFuZ2VkYC4gSXQgc2VlbXMgdGhlIGlzc3VlIHdhcyBhIGxhY2sgb2YgcHJvcGVyIGNoZWNraW5nIG9mIGBlbmFibGVfc3RhdGVgIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFRoaXMgdGVsbHMgbWUgaXQgd2FzbiYjMzk7dCBoYW5kbGluZyB0aGF0IHN0YXRlIHByb3Blcmx5LiBNYWtlcyBzZW5zZS4KCkdpdmVuIHRoZSBjb250ZXh0LCB0aGUgYnVnIGlzIGNsZWFybHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlOyBpdCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgY29kZSBwYXRoLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBpcyBzaWduaWZpY2FudCBpbiB0aGF0IHRoZSBmaXggbWF0dGVycyEgSSBzZWUgdGhhdCBgQkxLX1dCVGAgaXMgdGhlIGNvbmZpZyBoZXJlLgoKSSYjMzk7ZCBiZXR0ZXIgcXVpY2tseSBjb25maXJtIHRoYXQgYEJMS19XQlRgIGlzIHRoZSBvbmx5IGNvbmZpZyBoZXJlLiBKdXN0IHRvIGJlIHN1cmUuIEkgd2lsbCBsb29rIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhhdCBhbHNvIGluY2x1ZGVzIGl0LiBUaGUgZm9jYWwgc3ltYm9sIHNlZW1zIHRvIGJlIGB3YnRfc2V0X2xhdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfV0JUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MTA2PWNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbi0tXG5ibG9jay9LY29uZmlnLTExNy1cbmJsb2NrL0tjb25maWc6MTE4OmNvbmZpZyBCTEtfV0JUXG5ibG9jay9LY29uZmlnLTExOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSB3cml0ZWJhY2sgdGhyb3R0bGluZ1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTI2LVxuYmxvY2svS2NvbmZpZzoxMjc6Y29uZmlnIEJMS19XQlRfTVFcbmJsb2NrL0tjb25maWctMTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjMzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBXcml0ZWJhY2sgTGF0ZW5jeSBpbiB0aGUgQmxvY2sgTGF5ZXIqKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSYjMzk7bSB3b3JraW5nIHdpdGggcmlnaHQgbm93IGlzIGBCTEtfV0JUYC4gR290IGl0LiBNeSBtYWluIGZvY3VzIGlzIG9uIHN5bWJvbHMgcmVsYXRlZCB0byB3cml0ZWJhY2sgbGF0ZW5jeSwgc3BlY2lmaWNhbGx5IGB3YnRfc2V0X2xhdGAgYW5kIGBxdWV1ZV93Yl9sYXRfc3RvcmVgLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgcXVldWVfd2JfbGF0X3N0b3JlYC4gSSBrbm93IHRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIGluIHRoZSBibG9jayBsYXllciBzb21ld2hlcmUuIE1vcmUgc3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgaXQgaW4gYGJsb2NrL2Jsay1zeXNmcy5jYC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3F1ZXVlX3diX2xhdF9zdG9yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstc3lzZnMuYz02OTM9c3RhdGljIHNzaXplX3QgcXVldWVfd2JfbGF0X3Nob3coc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNoYXIgKnBhZ2UpXG4tLVxuYmxvY2svYmxrLXN5c2ZzLmMtNzE0LVxuYmxvY2svYmxrLXN5c2ZzLmM6NzE1OnN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zdG9yZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3QgY2hhciAqcGFnZSxcbmJsb2NrL2Jsay1zeXNmcy5jLTcxNi1cdFx0XHRcdCAgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTczCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMYXRlbmN5IFN0b3JlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBxdWV1ZV93Yl9sYXRfc3RvcmVgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBhIGZsYWcgZ29lcyB1cC4gVGhpcyBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBTeXprYWxsZXIgKm1pZ2h0KiBub3QgYmUgYWJsZSB0byBmdXp6IGl0IGRpcmVjdGx5IHVubGVzcyBpdCBoYXMgc3BlY2lmaWMga25vd2xlZGdlIG9mIHRoaXMgcGFydGljdWxhciBzeXNmcyBmaWxlLiBTeXprYWxsZXIgKmNhbiogZnV6eiBzeXNmcyBmaWxlcywgYnV0IGl0IG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlbSwgcmlnaHQ/IEl0JiMzOTtzIG5vdCBtYWdpYy4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIHNlZW1zIHRvIGJlIGB3YnRfc2V0X2xhdGAsIHNvICp0aGF0JiMzOTtzKiB0aGUgZnVuY3Rpb24gSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbi4KCkZpcnN0IHN0ZXA6IGxldCYjMzk7cyBzZWUgd2hlcmUgZWxzZSBgd2J0X3NldF9sYXRgIGlzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaCB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4gSWRlbnRpZnlpbmcgYWxsIHRoZSBjYWxsIHNpdGVzIHdpbGwgc2hvdyBtZSBpZiBpdCYjMzk7cyByZWFjaGFibGUgZnJvbSBvdGhlciBmdXp6ZXIgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2J0X3NldF9sYXRcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN5c2ZzLmM9NzE1PXN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zdG9yZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3QgY2hhciAqcGFnZSxcbi0tXG5ibG9jay9ibGstc3lzZnMuYy03MjYtXG5ibG9jay9ibGstc3lzZnMuYzo3Mjc6XHRyZXQgPSB3YnRfc2V0X2xhdChkaXNrLCB2YWwpO1xuYmxvY2svYmxrLXN5c2ZzLmMtNzI4LVx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuLS1cbmJsb2NrL2Jsay13YnQuYz05Njg9c3RhdGljIGludCB3YnRfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IHJxX3diICpyd2IpXG4tLVxuYmxvY2svYmxrLXdidC5jLTk5Ny1cbmJsb2NrL2Jsay13YnQuYzo5OTg6aW50IHdidF9zZXRfbGF0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzNjQgdmFsKVxuYmxvY2svYmxrLXdidC5jLTk5OS17XG4tLVxuYmxvY2svYmxrLXdidC5oPTEyPWJvb2wgd2J0X2Rpc2FibGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcbmJsb2NrL2Jsay13YnQuaDoxMzppbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpO1xuYmxvY2svYmxrLXdidC5oLTE0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTUwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkZvY3VzaW5nIG9uIFdyaXRlIEJ1ZmZlciBMYXRlbmN5KioKClJpZ2h0LCB0aGUgb25seSBmdW5jdGlvbiBtZW50aW9uZWQgaXMgYHF1ZXVlX3diX2xhdF9zdG9yZWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYHdidF9zZXRfbGF0YCBhcyBhIHByaW1lIHBvaW50IG9mIGludGVyZXN0LiBJdCYjMzk7cyB0aGUgY2VudHJhbCBzeW1ib2wgdG8gaG9uZSBpbiBvbiwgYXMgaXQgc2VlbXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gdGhlIHdyaXRlIGJ1ZmZlciBsYXRlbmN5IHN0b3JhZ2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX1dCVGAuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8sIG9yIHRoaXMgcGllY2Ugb2YgdGhlIHN5c3RlbSwgcmVsaWVzIG9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSBpbW1lZGlhdGUgY29udGV4dCBhbmQgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIGludmVzdGlnYXRpb24uIEtub3dpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgaWRlbnRpZnkgdGhlIGNhc2NhZGluZyBlZmZlY3RzIG9mIGNoYW5nZXMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gd3JpdGUgYnVmZmVyIGxhdGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKkJMS19XQlQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEyOS1cdGRlZmF1bHQgeVxuYmxvY2svS2NvbmZpZzoxMzA6XHRkZXBlbmRzIG9uIEJMS19XQlRcbmJsb2NrL0tjb25maWctMTMxLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODUyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYEJMS19XQlRgIERlcGVuZGVuY2llcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX1dCVGAuIExldCYjMzk7cyBhc3N1bWUgdGhlIHVzZXIga25vd3MgdGhhdCBpdCByZWxhdGVzIHRvIGEgYmxvY2sgZGV2aWNlLCBhbmQgdGhhdCBpdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHRoZSBvdmVyYWxsIHN5c3RlbSYjMzk7cyBzdGFiaWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwaWVjZSBvZiBjb2RlIHJlbGllcyBvbiwgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGludGVyYWN0IHdpdGggaXQsIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIG9yIGlzc3VlcyBtaWdodCBiZS4gVGhpcyBtZWFucyBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBjaGVja2luZyBoZWFkZXIgZmlsZXMsIGxvb2tpbmcgZm9yIGNhbGxzIHRvIGFuZCBmcm9tIGBCTEtfV0JUYCwgYW5kIHRyYWNpbmcgZGF0YSBmbG93cy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHN1c3BlY3RzOiBhbnkgcmVsYXRlZCBzdHJ1Y3R1cmVzLCBhbmQgZnVuY3Rpb25zLCBhbmQgdGhlbiB3b3JrIG15IHdheSBvdXR3YXJkLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBhbnkgdXBzdHJlYW0gY29tcG9uZW50cyBkZXBlbmQgb24gdGhpcywgb3IgaWYgaXQgcHJvdmlkZXMgYSBwdWJsaWMgQVBJLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19XQlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MTA2PWNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbi0tXG5ibG9jay9LY29uZmlnLTExNy1cbmJsb2NrL0tjb25maWc6MTE4OmNvbmZpZyBCTEtfV0JUXG5ibG9jay9LY29uZmlnLTExOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSB3cml0ZWJhY2sgdGhyb3R0bGluZ1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTI2LVxuYmxvY2svS2NvbmZpZzoxMjc6Y29uZmlnIEJMS19XQlRfTVFcbmJsb2NrL0tjb25maWctMTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBhc3BlY3Qgb2YgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24gd29ya3MuIE15IG1lbnRhbCBtYXAgcG9pbnRzIG1lIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGJsb2NrL2AgZGlyZWN0b3J5LCBuYXR1cmFsbHkuIExpbmUgMTE4IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyBob3BlZnVsbHksIGl0IGNvbnRhaW5zIHRoZSByZWxldmFudCBlbnRyeSBvciBhbiBpbmRpcmVjdCBsaW5rIHRvIGl0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZmlndXJhdGlvbiBvcHRpb24gZGVmaW5pdGlvbiwgbWF5YmUgYSBkZXBlbmRlbmN5LCBvciBwZXJoYXBzIGEgc3VibWVudSByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBmZWF0dXJlIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Iga2V5d29yZHMgYW5kIHBhdHRlcm5zIHRoYXQgSSYjMzk7bSBmYW1pbGlhciB3aXRoIOKAkyBgY29uZmlnYCwgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBgaGVscGAgYW5kIHRoZWlyIGNvbnRleHRzIHdpbGwgaW1tZWRpYXRlbHkgZ3JhYiBteSBhdHRlbnRpb24uIEZyb20gdGhhdCBzdGFydGluZyBwb2ludCwgSSBhbnRpY2lwYXRlIEkgY2FuIHRyYWNlIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIG9wdGlvbnMgcHJldHR5IHF1aWNrbHksIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4gYW5kIGhvcGUgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XHRoZWxwXG4gMTExOlx0XHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxuIDExMjpcdFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXG4gMTEzOlx0XHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcbiAxMTQ6XHRcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxuIDExNTpcdFxuIDExNjpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIDExNzpcdFxuIDExODpcdGNvbmZpZyBCTEtfV0JUXG4gMTE5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcJiMzNDtcbiAxMjA6XHRcdGhlbHBcbiAxMjE6XHRcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGJsb2NrIGxheWVyIHRvIHRocm90dGxlIGJ1ZmZlcmVkXG4gMTIyOlx0XHRiYWNrZ3JvdW5kIHdyaXRlYmFjayBmcm9tIHRoZSBWTSwgbWFraW5nIGl0IG1vcmUgc21vb3RoIGFuZCBoYXZpbmdcbiAxMjM6XHRcdGxlc3MgaW1wYWN0IG9uIGZvcmVncm91bmQgb3BlcmF0aW9ucy4gVGhlIHRocm90dGxpbmcgaXMgZG9uZVxuIDEyNDpcdFx0ZHluYW1pY2FsbHkgb24gYW4gYWxnb3JpdGhtIGxvb3NlbHkgYmFzZWQgb24gQ29EZWwsIGZhY3RvcmluZyBpblxuIDEyNTpcdFx0dGhlIHJlYWx0aW1lIHBlcmZvcm1hbmNlIG9mIHRoZSBkaXNrLlxuIDEyNjpcdFxuIDEyNzpcdGNvbmZpZyBCTEtfV0JUX01RXG4gMTI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0XCYjMzQ7XG4gMTI5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgwNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIEJsb2NrIExheWVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgZGV2aWNlIG9yIHN1YnN5c3RlbSDigJMgaXQmIzM5O3MgYWxsIGFib3V0IHRoZSBmdW5kYW1lbnRhbCBibG9jayBsYXllci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBgQkxLX1dCVGAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIHdyaXRlYmFjayB0aHJvdHRsaW5nLCBzbyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGB3YnRfbGF0X2NoYW5nZWRgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYHdidF9zZXRfbGF0YC4gVGhhdCBgd2J0X3NldF9sYXRgIHN5bWJvbCBpcyByZWFsbHkgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIExvb2tzIGxpa2UgYHF1ZXVlX3diX2xhdF9zdG9yZWAgY291bGQgYmUgYW5vdGhlciBjcml0aWNhbCBzeW1ib2wgdG8gaW52ZXN0aWdhdGUuCgpUaGUgZnVuY3Rpb25hbCBpbXBhY3QgaGVyZSBpcyBhYm91dCBtb2RpZnlpbmcgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBjaGVjayBmb3Igd3JpdGViYWNrIHRocm90dGxpbmcgbGF0ZW5jeSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBgd2J0X2xhdF91c2VjYCBpbiBzeXNmcyBpcyBhbHRlcmVkLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB3YnRfbGF0X3VzZWNgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBzeXNmcyBmaWxlLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIGJlY2F1c2UgdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGhvdyB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlcyB0aHJvdHRsaW5nIGNoYW5nZXMgaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSwgc28gdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3IgaXMgcGFyYW1vdW50LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV93Yl9sYXRfc3RvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN5c2ZzLmM9NjkzPXN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zaG93KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjaGFyICpwYWdlKVxuLS1cbmJsb2NrL2Jsay1zeXNmcy5jLTcxNC1cbmJsb2NrL2Jsay1zeXNmcy5jOjcxNTpzdGF0aWMgc3NpemVfdCBxdWV1ZV93Yl9sYXRfc3RvcmUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IGNoYXIgKnBhZ2UsXG5ibG9jay9ibGstc3lzZnMuYy03MTYtXHRcdFx0XHQgIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGVsdmluZyBpbnRvIFN5c2ZzIEF0dHJpYnV0ZSBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBpbiB0YWNrbGluZyB0aGlzIGlzIHRvIGp1bXAgaW50byB0aGUgc3lzZnMgYXR0cmlidXRlIGRlZmluaXRpb24gaXRzZWxmLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnksIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMsIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSB3b3JraW5nIGZyb20gYSBzb2xpZCwgYWNjdXJhdGUgZm91bmRhdGlvbi4gTm8gcG9pbnQgaW4gc3Bpbm5pbmcgbXkgd2hlZWxzIG9uIHNvbWV0aGluZyBJICp0aGluayogSSBrbm93LCB3aGVuIGEgcXVpY2sgY2hlY2sgY2FuIHNhdmUgYSB0b24gb2YgdGltZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIHNheXM7IG1heWJlIHRoZXJlJiMzOTtzIGEgcGFydGljdWxhciBudWFuY2UgaGVyZSB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcgb3Igc29tZXRoaW5nIGluIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0IEkgaGFkbiYjMzk7dCBjb25zaWRlcmVkLiBUaW1lIHRvIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcyBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfd2JfbGF0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zeXNmcy5jPTY4MD1zdGF0aWMgc3NpemVfdCBxdWV1ZV92YXJfc3RvcmU2NChzNjQgKnZhciwgY29uc3QgY2hhciAqcGFnZSlcbi0tXG5ibG9jay9ibGstc3lzZnMuYy02OTItXG5ibG9jay9ibGstc3lzZnMuYzo2OTM6c3RhdGljIHNzaXplX3QgcXVldWVfd2JfbGF0X3Nob3coc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNoYXIgKnBhZ2UpXG5ibG9jay9ibGstc3lzZnMuYy02OTQte1xuLS1cbmJsb2NrL2Jsay1zeXNmcy5jLTcxNC1cbmJsb2NrL2Jsay1zeXNmcy5jOjcxNTpzdGF0aWMgc3NpemVfdCBxdWV1ZV93Yl9sYXRfc3RvcmUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IGNoYXIgKnBhZ2UsXG5ibG9jay9ibGstc3lzZnMuYy03MTYtXHRcdFx0XHQgIHNpemVfdCBjb3VudClcbi0tXG5ibG9jay9ibGstc3lzZnMuYy03MzAtXG5ibG9jay9ibGstc3lzZnMuYzo3MzE6UVVFVUVfUldfRU5UUlkocXVldWVfd2JfbGF0LCBcJiMzNDt3YnRfbGF0X3VzZWNcJiMzNDspO1xuYmxvY2svYmxrLXN5c2ZzLmMtNzMyLSNlbmRpZlxuLS1cbmJsb2NrL2Jsay1zeXNmcy5jPTc5NT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3QgYmxrX21xX3F1ZXVlX2F0dHJzW10gPSB7XG4tLVxuYmxvY2svYmxrLXN5c2ZzLmMtODAzLSNpZmRlZiBDT05GSUdfQkxLX1dCVFxuYmxvY2svYmxrLXN5c2ZzLmM6ODA0Olx0XHUwMDI2cXVldWVfd2JfbGF0X2VudHJ5LmF0dHIsXG5ibG9jay9ibGstc3lzZnMuYy04MDUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTQKCQkJCQkJCW91dHB1dDogMTEyCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBXcml0ZWJhY2sgTGF0ZW5jeSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYHdidF9sYXRfdXNlY2AgaGVyZS4gR290IGl0LiBUaGlzIGNvbm5lY3RzIGRpcmVjdGx5IHRvIHRoZSBgQkxLX1dCVGAgY29uZmlndXJhdGlvbnMuIE15IGZvY3VzIGlzIG9uIHRoZSBzeW1ib2xzIGB3YnRfc2V0X2xhdGAgYW5kIGBxdWV1ZV93Yl9sYXRfc3RvcmVgLiBHb29kIG5ld3MsIHRoZSBzeXN0ZW0gZmxhZ2dlZCB0aGlzIGFzIGBXb3J0aEZ1enppbmdgLCB3aGljaCBtZWFucyBpdCBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4KCkxldCBtZSBxdWlja2x5IGNvbmZpcm0gYSBodW5jaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgd2J0X2xhdF9jaGFuZ2VkYCBpcyBzdGF0aWMg4oCTIHllcywgcGVyZmVjdCwgaXQmIzM5O3Mgc3RhdGljLiBUaGF0IG1lYW5zIHRoZSBlbnRyeSBwb2ludCBpcyBsaWtlbHkgYHdidF9zZXRfbGF0YCwgdGhlIGV4cG9ydGVkLCBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FsbHMgaXQuIFRoaXMgZ2l2ZXMgbWUgYSBkZWZpbmVkIHBvaW50IGZvciBpbnRlcmFjdGlvbi4KCk5vdywgSSYjMzk7bGwgc2V0IHRoZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcyBhY2NvcmRpbmdseS4gVGhhdCYjMzk7cyB0aGUgaW1wb3J0YW50IHBpZWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX1dCVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3didF9zZXRfbGF0JiMzNDssCiAgICAmIzM0O3F1ZXVlX3diX2xhdF9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNoZWNraW5nIGlmIHRoZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBsYXRlbmN5IGhhcyBjaGFuZ2VkIHdoZW4gdXBkYXRlZCB2aWEgc3lzZnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3Mgd3JpdGViYWNrIHRocm90dGxpbmcgZmVhdHVyZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIHRoZSBgd2J0X2xhdF91c2VjYCBzeXNmcyBmaWxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfV0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d2J0X3NldF9sYXQmIzM0OywKICAgICYjMzQ7cXVldWVfd2JfbGF0X3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY2hlY2tpbmcgaWYgdGhlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGxhdGVuY3kgaGFzIGNoYW5nZWQgd2hlbiB1cGRhdGVkIHZpYSBzeXNmcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBsYXllciYjMzk7cyB3cml0ZWJhY2sgdGhyb3R0bGluZyBmZWF0dXJlIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHdyaXRpbmcgdG8gdGhlIGB3YnRfbGF0X3VzZWNgIHN5c2ZzIGZpbGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxNzozMS4xOTI3OTA4NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk2Mzc1MDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfV0JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2J0X3NldF9sYXRcIixcbiAgICBcInF1ZXVlX3diX2xhdF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY2hlY2tpbmcgaWYgdGhlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGxhdGVuY3kgaGFzIGNoYW5nZWQgd2hlbiB1cGRhdGVkIHZpYSBzeXNmcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBsYXllcidzIHdyaXRlYmFjayB0aHJvdHRsaW5nIGZlYXR1cmUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byB0aGUgYHdidF9sYXRfdXNlY2Agc3lzZnMgZmlsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTc6MzEuMTkyODA0ODY4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc2NDkyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YzcxNTFiNjZmYmY3YjBmZGUyYTMzYTRhZDZjMWYyOTRhMjI5Mzg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDE3IDE2OjE3OjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay13YnQuYyBiL2Jsb2NrL2Jsay13YnQuY1xcbmluZGV4IDk1M2Q0MDBmZDAxMzdiLi40ZjEyYTA2NDI4NmVmZiAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstd2J0LmNcXG4rKysgYi9ibG9jay9ibGstd2J0LmNcXG5AQCAtODEzLDcgKzgxMywxNCBAQCBzdGF0aWMgdm9pZCB3YnRfcXVldWVfZGVwdGhfY2hhbmdlZChzdHJ1Y3QgcnFfcW9zICpycW9zKVxcbiBcXHR3YnRfdXBkYXRlX2xpbWl0cyhSUVdCKHJxb3MpKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgd2J0X3NldF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbClcXG4rLypcXG4rICogUmV0dXJuIHRydWUgaWYgd3JpdGluZyBAdmFsIHdvdWxkIGNoYW5nZSB0aGUgV0JUIHN0YXRlOlxcbisgKiAxKSBAdmFsIGRpZmZlcnMgZnJvbSB0aGUgc3RvcmVkIG1pbl9sYXRfbnNlYywgb3JcXG4rICogMikgQHZhbCBtYXRjaGVzLCBidXQgZW5hYmxlX3N0YXRlIGlzIG5vdCB0aGUgY29ycmVzcG9uZGluZyBtYW51YWwgc3RhdGVcXG4rICogICAgKFdCVF9TVEFURV9PTl9NQU5VQUwgZm9yIG5vbi16ZXJvIEB2YWwsIFdCVF9TVEFURV9PRkZfTUFOVUFMIGZvciAwKSxcXG4rICogICAgc28gdGhlIHdyaXRlIHN0aWxsIGhhcyB0byB1cGRhdGUgZW5hYmxlX3N0YXRlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgd2J0X2xhdF9jaGFuZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1NjQgdmFsKVxcbiB7XFxuIFxcdHN0cnVjdCBycV9xb3MgKnJxb3MgPSB3YnRfcnFfcW9zKHEpO1xcbiBcXHRzdHJ1Y3QgcnFfd2IgKnJ3YjtcXG5AQCAtODI1LDcgKzgzMiw4IEBAIHN0YXRpYyBib29sIHdidF9zZXRfbGF0X2NoYW5nZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHU2NCB2YWwpXFxuIFxcdGlmIChyd2ItXFx1MDAzZW1pbl9sYXRfbnNlYyAhPSB2YWwpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0cmV0dXJuIHJ3Yl9lbmFibGVkKHJ3YikgIT0gISF2YWw7XFxuK1xcdHJldHVybiByd2ItXFx1MDAzZWVuYWJsZV9zdGF0ZSAhPVxcbitcXHQgICAgICAgKHZhbCA/IFdCVF9TVEFURV9PTl9NQU5VQUwgOiBXQlRfU1RBVEVfT0ZGX01BTlVBTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHdidF9leGl0KHN0cnVjdCBycV9xb3MgKnJxb3MpXFxuQEAgLTEwMjEsNyArMTAyOSw3IEBAIGludCB3YnRfc2V0X2xhdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgczY0IHZhbClcXG4gXFx0XFx0dmFsICo9IDEwMDBVTEw7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VycW9zX3N0YXRlX211dGV4KTtcXG4tXFx0aWYgKCF3YnRfc2V0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHtcXG4rXFx0aWYgKCF3YnRfbGF0X2NoYW5nZWQocSwgdmFsKSkge1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRpc2stXFx1MDAzZXJxb3Nfc3RhdGVfbXV0ZXgpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxNzozMS42MzExODEzNzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NTI1MzQ3NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19XQlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3YnRfc2V0X2xhdFwiLFxuICAgIFwicXVldWVfd2JfbGF0X3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjaGVja2luZyBpZiB0aGUgd3JpdGViYWNrIHRocm90dGxpbmcgbGF0ZW5jeSBoYXMgY2hhbmdlZCB3aGVuIHVwZGF0ZWQgdmlhIHN5c2ZzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyJ3Mgd3JpdGViYWNrIHRocm90dGxpbmcgZmVhdHVyZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIHRoZSBgd2J0X2xhdF91c2VjYCBzeXNmcyBmaWxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjNzE1MWI2NmZiZjdiMGZkZTJhMzNhNGFkNmMxZjI5NGEyMjkzODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAxNjoxNzozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay13YnQuYyBiL2Jsb2NrL2Jsay13YnQuY1xuaW5kZXggOTUzZDQwMGZkMDEzN2IuLjRmMTJhMDY0Mjg2ZWZmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLXdidC5jXG4rKysgYi9ibG9jay9ibGstd2J0LmNcbkBAIC04MTMsNyArODEzLDE0IEBAIHN0YXRpYyB2b2lkIHdidF9xdWV1ZV9kZXB0aF9jaGFuZ2VkKHN0cnVjdCBycV9xb3MgKnJxb3MpXG4gXHR3YnRfdXBkYXRlX2xpbWl0cyhSUVdCKHJxb3MpKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgd2J0X3NldF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbClcbisvKlxuKyAqIFJldHVybiB0cnVlIGlmIHdyaXRpbmcgQHZhbCB3b3VsZCBjaGFuZ2UgdGhlIFdCVCBzdGF0ZTpcbisgKiAxKSBAdmFsIGRpZmZlcnMgZnJvbSB0aGUgc3RvcmVkIG1pbl9sYXRfbnNlYywgb3JcbisgKiAyKSBAdmFsIG1hdGNoZXMsIGJ1dCBlbmFibGVfc3RhdGUgaXMgbm90IHRoZSBjb3JyZXNwb25kaW5nIG1hbnVhbCBzdGF0ZVxuKyAqICAgIChXQlRfU1RBVEVfT05fTUFOVUFMIGZvciBub24temVybyBAdmFsLCBXQlRfU1RBVEVfT0ZGX01BTlVBTCBmb3IgMCksXG4rICogICAgc28gdGhlIHdyaXRlIHN0aWxsIGhhcyB0byB1cGRhdGUgZW5hYmxlX3N0YXRlLlxuKyAqL1xuK3N0YXRpYyBib29sIHdidF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbClcbiB7XG4gXHRzdHJ1Y3QgcnFfcW9zICpycW9zID0gd2J0X3JxX3FvcyhxKTtcbiBcdHN0cnVjdCBycV93YiAqcndiO1xuQEAgLTgyNSw3ICs4MzIsOCBAQCBzdGF0aWMgYm9vbCB3YnRfc2V0X2xhdF9jaGFuZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1NjQgdmFsKVxuIFx0aWYgKHJ3Yi1cdTAwM2VtaW5fbGF0X25zZWMgIT0gdmFsKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHJldHVybiByd2JfZW5hYmxlZChyd2IpICE9ICEhdmFsO1xuK1x0cmV0dXJuIHJ3Yi1cdTAwM2VlbmFibGVfc3RhdGUgIT1cbitcdCAgICAgICAodmFsID8gV0JUX1NUQVRFX09OX01BTlVBTCA6IFdCVF9TVEFURV9PRkZfTUFOVUFMKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgd2J0X2V4aXQoc3RydWN0IHJxX3FvcyAqcnFvcylcbkBAIC0xMDIxLDcgKzEwMjksNyBAQCBpbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpXG4gXHRcdHZhbCAqPSAxMDAwVUxMO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZXJxb3Nfc3RhdGVfbXV0ZXgpO1xuLVx0aWYgKCF3YnRfc2V0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHtcbitcdGlmICghd2J0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlcnFvc19zdGF0ZV9tdXRleCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTc6MzEuNjMxMTgyNjk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUwNjc4MDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdCVCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9ibGstd2J0LmNgLiBJdCdzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCByZW5hbWUsIGB3YnRfc2V0X2xhdF9jaGFuZ2VkYCB0byBgd2J0X2xhdF9jaGFuZ2VkYCwgd2hpY2ggaXMgZmluZSwgYW5kIEkgY2FuIHNlZSB3aGF0IHRoZXkncmUgZG9pbmcgd2l0aCB0aGUgbG9naWMgaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgbWFpbiBjb25jZXJuIGlzIGRldGVybWluaW5nIGlmIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgd3JpdGViYWNrIHRocm90dGxpbmcgKFdCVCkgd2lsbCBhY3R1YWxseSAqY2hhbmdlKiB0aGUgY3VycmVudCBzdGF0ZS4gVGhlIG9yaWdpbmFsIGNoZWNrLCBgcmV0dXJuIHJ3Yl9lbmFibGVkKHJ3YikgIT0gISF2YWw7YCwgd2FzIGEgYml0IGNsdW5reSwgYnV0IGZ1bmN0aW9uYWwuIE5vdyB0aGV5J3ZlIHJlcGxhY2VkIGl0IHdpdGggYHJldHVybiByd2ItXHUwMDNlZW5hYmxlX3N0YXRlICE9ICh2YWwgPyBXQlRfU1RBVEVfT05fTUFOVUFMIDogV0JUX1NUQVRFX09GRl9NQU5VQUwpO2AuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3JlIG5vdyBjb21wYXJpbmcgdGhlIGN1cnJlbnQgYGVuYWJsZV9zdGF0ZWAgb2YgdGhlIGByd2JgIHN0cnVjdCBhZ2FpbnN0IHRoZSAqaW50ZW5kZWQqIHN0YXRlIGJhc2VkIG9uIHRoZSBpbnB1dCBgdmFsYC4gYHZhbGAgc2VlbXMgdG8gYmUgYSBib29sZWFuLCB3aGljaCBpcyB0aGVuIG1hcHBlZCB0byB0aGUgYFdCVF9TVEFURV9PTl9NQU5VQUxgIGFuZCBgV0JUX1NUQVRFX09GRl9NQU5VQUxgIGVudW0gdmFsdWVzLCBpbmRpY2F0aW5nIHdoZXRoZXIgd2UncmUgbWFudWFsbHkgdHVybmluZyBXQlQgb24gb3Igb2ZmLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gYGJsb2NrL2Jsay13YnQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBrbm93IHdoZXJlIHRoaXMgYHJ3YmAgc3RydWN0dXJlIGNvbWVzIGZyb20sIHdoYXQgaXRzIGZpZWxkcyBtZWFuLCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBvciBtZWNoYW5pc21zIGFyZSBpbiBwbGF5IGFyb3VuZCBXQlQuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgV0JUIG1hbmFnZW1lbnQgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoaXMgY2hhbmdlIG1pZ2h0IGhhdmUgZm9yIGRpZmZlcmVudCBzY2VuYXJpb3MuIFVuZGVyc3RhbmRpbmcgdGhlIHdpZGVyIGNvbnRleHQgaXMga2V5IGJlZm9yZSBJJ2xsIGJlIGNvbWZvcnRhYmxlIHdpdGggdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE3OjM5LjEzNzk2NDc2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc1Mzk0OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndidF9sYXRfY2hhbmdlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstd2J0LmM9ODEwPXN0YXRpYyB2b2lkIHdidF9xdWV1ZV9kZXB0aF9jaGFuZ2VkKHN0cnVjdCBycV9xb3MgKnJxb3MpXFxuLS1cXG5ibG9jay9ibGstd2J0LmMtODIyLSAqL1xcbmJsb2NrL2Jsay13YnQuYzo4MjM6c3RhdGljIGJvb2wgd2J0X2xhdF9jaGFuZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1NjQgdmFsKVxcbmJsb2NrL2Jsay13YnQuYy04MjQte1xcbi0tXFxuYmxvY2svYmxrLXdidC5jPTk5OD1pbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpXFxuLS1cXG5ibG9jay9ibGstd2J0LmMtMTAzMS1cXHRtdXRleF9sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VycW9zX3N0YXRlX211dGV4KTtcXG5ibG9jay9ibGstd2J0LmM6MTAzMjpcXHRpZiAoIXdidF9sYXRfY2hhbmdlZChxLCB2YWwpKSB7XFxuYmxvY2svYmxrLXdidC5jLTEwMzMtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VycW9zX3N0YXRlX211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTc6NDEuMjEzMzY5NTM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyMDUyODI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJsb2NrIFdyaXRlYmFjayBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGVuYWJsaW5nIGBibGstd2J0LmNgLiBJdCdzIGEga2V5IGNvbXBvbmVudCwgc28gdW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgZm9yLCBzYXksIHR1bmluZyB3cml0ZWJhY2sgcGVyZm9ybWFuY2UsIGRlYnVnZ2luZyBsYXRlbmN5IGlzc3Vlcywgb3IganVzdCBnZW5lcmFsbHkgZ3Jhc3BpbmcgaG93IHRoZSBibG9jayBsYXllciBpcyBiZWhhdmluZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBpdHMgcHJlc2VuY2UgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQncyBwdWxsaW5nIGl0IGluLlxuXG5JJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGhpZXJhcmNoeS4gVXN1YWxseSwgeW91IGNhbiBmaW5kIGEgZ29vZCBlbnRyeSBwb2ludCB0aHJvdWdoIGBLY29uZmlnYCBmaWxlcyBpbiByZWxldmFudCBkaXJlY3RvcmllcywgbGlrZSB0aGUgYmxvY2sgbGF5ZXIncyByb290IG9yIHRoZSBkcml2ZXJzL2Jsb2NrIGRpcmVjdG9yeS4gSSdsbCBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgZGlyZWN0b3JpZXMsIHNjYW5uaW5nIGZvciBsaWtlbHkgY2FuZGlkYXRlcyDigJMgcG90ZW50aWFsbHkgYW55IGBLY29uZmlnYCBmaWxlIHRvdWNoaW5nIGJsb2NrIGRldmljZSBmZWF0dXJlcyBvciBnZW5lcmljIGJsb2NrIGRldmljZSBzdXBwb3J0LiBJZiBJJ20gbHVja3ksIGEgcXVpY2sgZ3JlcCBvciBgZmluZCAuIC1uYW1lIFwiS2NvbmZpZ1wiIHwgeGFyZ3MgZ3JlcCBibGstd2J0LmNgIG1pZ2h0IGRvIHRoZSB0cmljaywgcHJvdmlkaW5nIHRoZSBkaXJlY3QgZGVwZW5kZW5jeS5cblxuSWYgdGhhdCdzIG5vdCBpbW1lZGlhdGVseSBmcnVpdGZ1bCwgSSdsbCBmYWxsIGJhY2sgdG8gc2VhcmNoaW5nIGZvciBzeW1ib2xzLiBJJ2QgY2hlY2sgdGhlIGtlcm5lbCdzIGJ1aWxkIG91dHB1dCBvciBwb3RlbnRpYWxseSB1c2UgYSB0b29sIGxpa2UgYGtjb25maWctdHVpYCBvciBgbWVudWNvbmZpZ2AsIHNjYW5uaW5nIGZvciBzeW1ib2xzIHJlbGF0ZWQgdG8gYmxvY2sgd3JpdGViYWNrLCBkaXJ0eSBwYWdlIGhhbmRsaW5nLCBvciBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkuIEkgbWlnaHQgbG9vayBhdCB0aGUgZGVwZW5kZW5jaWVzIG9mIGFueSByZWxhdGVkIGNvcmUgZmVhdHVyZXMuXG5cblRoZW4sIG9uY2UgSSBmaW5kIHRoZSBjb25maWcgb3B0aW9uLCBJJ2xsIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IGl0cyBpbXBsaWNhdGlvbnMuIElzIGl0IGEgY29yZSBmZWF0dXJlIG9mIHRoZSBibG9jayBsYXllciwgb3IgaXMgaXQgdGllZCB0byBhIHNwZWNpZmljIHN0b3JhZ2UgZHJpdmVyIG9yIGZlYXR1cmUgc2V0PyBJZiBpdCdzIGEgZHJpdmVyLXNwZWNpZmljIG9wdGlvbiwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGF0IGRyaXZlciB0byBwcmVkaWN0IGl0cyBiZWhhdmlvci4gSWYgaXQncyBtb3JlIGdlbmVyaWMsIEknbGwgY29uc2lkZXIgaG93IGl0IGludGVncmF0ZXMgd2l0aCBvdGhlciBvcHRpb25zLCBzdWNoIGFzIHRoZSB3cml0ZWJhY2sgaW50ZXJ2YWwgb3IgZGlydHkgcGFnZSB0aHJlc2hvbGRzLiBJIG5lZWQgdG8gcXVpY2tseSB2aXN1YWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UgaXQgZmFsbHMgaW50bywgZXNwZWNpYWxseSBnaXZlbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCdzIGJsb2NrIGxheWVyIGFyY2hpdGVjdHVyZS4gSSBrbm93IHRoZSBsaWtlbHkgZGVwZW5kZW5jaWVzLCBzbyB3aGF0IGVsc2UgZG9lcyB0aGlzIGRlcGVuZCBvbiwgYW5kIHdoYXQgZG9lcyB0aGlzIGVuYWJsZSwgYW5kIGhvdyBkb2VzIHRoaXMgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUga2VybmVsP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTc6NDUuOTMzODk5NzczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDY5ODk5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrLXdidC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEKVxcdCs9IGJsay16b25lZC5vXFxuYmxvY2svTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JMS19XQlQpXFx0XFx0Kz0gYmxrLXdidC5vXFxuYmxvY2svTWFrZWZpbGUtMzUtb2JqLSQoQ09ORklHX0JMS19ERUJVR19GUylcXHQrPSBibGstbXEtZGVidWdmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE3OjQ4LjQ4MDg5NDQwMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDU1MTAyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgQkxLX1dCVCBDb25maWd1cmF0aW9uIGFuZCBMYXRlbmN5IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHdlJ3JlIHdvcmtpbmcgd2l0aCBpcyBgQkxLX1dCVGAuIEdvdCBpdC4gTm93LCB0aGUga2V5IGNoYW5nZSBpcyBpbiB0aGUgYHdidF9zZXRfbGF0YCBmdW5jdGlvbjsgaXQncyBiZWVuIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgYHdidF9sYXRfY2hhbmdlZGAuIE15IGltbWVkaWF0ZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBXaGVyZSBpcyBgd2J0X3NldF9sYXRgIGJlaW5nIGludm9rZWQ/IEkgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSB0byBgd2J0X2xhdF9jaGFuZ2VkYC4gSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBmbG93IHRvIGZ1bGx5IGFuYWx5emUgdGhlIGNoYW5nZXMgbWFkZSBhbmQgcHJlZGljdCB0aGVpciBlZmZlY3Qgb24gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE3OjUyLjAyNjQwNjAyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkzNzc0NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndidF9zZXRfbGF0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zeXNmcy5jPTcxNT1zdGF0aWMgc3NpemVfdCBxdWV1ZV93Yl9sYXRfc3RvcmUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IGNoYXIgKnBhZ2UsXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy03MjYtXFxuYmxvY2svYmxrLXN5c2ZzLmM6NzI3OlxcdHJldCA9IHdidF9zZXRfbGF0KGRpc2ssIHZhbCk7XFxuYmxvY2svYmxrLXN5c2ZzLmMtNzI4LVxcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcXG4tLVxcbmJsb2NrL2Jsay13YnQuYz05Njg9c3RhdGljIGludCB3YnRfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IHJxX3diICpyd2IpXFxuLS1cXG5ibG9jay9ibGstd2J0LmMtOTk3LVxcbmJsb2NrL2Jsay13YnQuYzo5OTg6aW50IHdidF9zZXRfbGF0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzNjQgdmFsKVxcbmJsb2NrL2Jsay13YnQuYy05OTkte1xcbi0tXFxuYmxvY2svYmxrLXdidC5oPTEyPWJvb2wgd2J0X2Rpc2FibGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcXG5ibG9jay9ibGstd2J0Lmg6MTM6aW50IHdidF9zZXRfbGF0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzNjQgdmFsKTtcXG5ibG9jay9ibGstd2J0LmgtMTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE3OjU0LjAyMDE4NDQ1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MTI3OTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTeXNmcyBTdG9yZSBGdW5jdGlvbiBhbmQgYSBQb3RlbnRpYWwgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBwYXRoLiBJdCdzIHRyaWdnZXJlZCBmcm9tIGBxdWV1ZV93Yl9sYXRfc3RvcmVgIGluIGBibG9jay9ibGstc3lzZnMuY2AuIFJpZ2h0LCB0aGF0J3MgdGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCBtZWFuaW5nIGEgdXNlciBpbiB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggaXQgYnkgd3JpdGluZyB0byBhIHN5c2ZzIGZpbGUuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGEgZGlyZWN0IGludGVyZmFjZS5cblxuVGhlIHBhdGNoIGl0c2VsZiBhZGRyZXNzZXMgYSBidWcgd2l0aGluIGB3YnRfc2V0X2xhdF9jaGFuZ2VkYC4gSXQgc2VlbXMgdGhlIGlzc3VlIHdhcyBhIGxhY2sgb2YgcHJvcGVyIGNoZWNraW5nIG9mIGBlbmFibGVfc3RhdGVgIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFRoaXMgdGVsbHMgbWUgaXQgd2Fzbid0IGhhbmRsaW5nIHRoYXQgc3RhdGUgcHJvcGVybHkuIE1ha2VzIHNlbnNlLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgdGhlIGJ1ZyBpcyBjbGVhcmx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZTsgaXQgaXMgZGVmaW5pdGVseSBhIHZhbGlkIGNvZGUgcGF0aC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgaXMgc2lnbmlmaWNhbnQgaW4gdGhhdCB0aGUgZml4IG1hdHRlcnMhIEkgc2VlIHRoYXQgYEJMS19XQlRgIGlzIHRoZSBjb25maWcgaGVyZS5cblxuSSdkIGJldHRlciBxdWlja2x5IGNvbmZpcm0gdGhhdCBgQkxLX1dCVGAgaXMgdGhlIG9ubHkgY29uZmlnIGhlcmUuIEp1c3QgdG8gYmUgc3VyZS4gSSB3aWxsIGxvb2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGFsc28gaW5jbHVkZXMgaXQuIFRoZSBmb2NhbCBzeW1ib2wgc2VlbXMgdG8gYmUgYHdidF9zZXRfbGF0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxNzo1OC42ODE0NjU5OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTk3MTI4NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19XQlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0xMDY9Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbi0tXFxuYmxvY2svS2NvbmZpZy0xMTctXFxuYmxvY2svS2NvbmZpZzoxMTg6Y29uZmlnIEJMS19XQlRcXG5ibG9jay9LY29uZmlnLTExOS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHdyaXRlYmFjayB0aHJvdHRsaW5nXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMjYtXFxuYmxvY2svS2NvbmZpZzoxMjc6Y29uZmlnIEJMS19XQlRfTVFcXG5ibG9jay9LY29uZmlnLTEyOC1cXHRib29sIFxcXCJFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6MDAuNTgxMTgyOTEzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDU5OTE5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgV3JpdGViYWNrIExhdGVuY3kgaW4gdGhlIEJsb2NrIExheWVyKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSdtIHdvcmtpbmcgd2l0aCByaWdodCBub3cgaXMgYEJMS19XQlRgLiBHb3QgaXQuIE15IG1haW4gZm9jdXMgaXMgb24gc3ltYm9scyByZWxhdGVkIHRvIHdyaXRlYmFjayBsYXRlbmN5LCBzcGVjaWZpY2FsbHkgYHdidF9zZXRfbGF0YCBhbmQgYHF1ZXVlX3diX2xhdF9zdG9yZWAuIExldCdzIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYHF1ZXVlX3diX2xhdF9zdG9yZWAuIEkga25vdyB0aGF0IGZ1bmN0aW9uIHNob3VsZCBiZSBpbiB0aGUgYmxvY2sgbGF5ZXIgc29tZXdoZXJlLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIGl0IGluIGBibG9jay9ibGstc3lzZnMuY2AuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxODowNC4yMjcxNzY1OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDE0NDg4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfd2JfbGF0X3N0b3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zeXNmcy5jPTY5Mz1zdGF0aWMgc3NpemVfdCBxdWV1ZV93Yl9sYXRfc2hvdyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY2hhciAqcGFnZSlcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jLTcxNC1cXG5ibG9jay9ibGstc3lzZnMuYzo3MTU6c3RhdGljIHNzaXplX3QgcXVldWVfd2JfbGF0X3N0b3JlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBjaGFyICpwYWdlLFxcbmJsb2NrL2Jsay1zeXNmcy5jLTcxNi1cXHRcXHRcXHRcXHQgIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6MDYuMDY4NjI5ODY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTUyOTIwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMYXRlbmN5IFN0b3JlIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcXVldWVfd2JfbGF0X3N0b3JlYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgYSBmbGFnIGdvZXMgdXAuIFRoaXMgaXMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgU3l6a2FsbGVyICptaWdodCogbm90IGJlIGFibGUgdG8gZnV6eiBpdCBkaXJlY3RseSB1bmxlc3MgaXQgaGFzIHNwZWNpZmljIGtub3dsZWRnZSBvZiB0aGlzIHBhcnRpY3VsYXIgc3lzZnMgZmlsZS4gU3l6a2FsbGVyICpjYW4qIGZ1enogc3lzZnMgZmlsZXMsIGJ1dCBpdCBuZWVkcyB0byBrbm93IGFib3V0IHRoZW0sIHJpZ2h0PyBJdCdzIG5vdCBtYWdpYy4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIHNlZW1zIHRvIGJlIGB3YnRfc2V0X2xhdGAsIHNvICp0aGF0J3MqIHRoZSBmdW5jdGlvbiBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5GaXJzdCBzdGVwOiBsZXQncyBzZWUgd2hlcmUgZWxzZSBgd2J0X3NldF9sYXRgIGlzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaCB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4gSWRlbnRpZnlpbmcgYWxsIHRoZSBjYWxsIHNpdGVzIHdpbGwgc2hvdyBtZSBpZiBpdCdzIHJlYWNoYWJsZSBmcm9tIG90aGVyIGZ1enplciB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTczLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6MDkuNTgzOTIzNTU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2Mzk4OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndidF9zZXRfbGF0XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXN5c2ZzLmM9NzE1PXN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zdG9yZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3QgY2hhciAqcGFnZSxcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jLTcyNi1cXG5ibG9jay9ibGstc3lzZnMuYzo3Mjc6XFx0cmV0ID0gd2J0X3NldF9sYXQoZGlzaywgdmFsKTtcXG5ibG9jay9ibGstc3lzZnMuYy03MjgtXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcbi0tXFxuYmxvY2svYmxrLXdidC5jPTk2OD1zdGF0aWMgaW50IHdidF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgcnFfd2IgKnJ3YilcXG4tLVxcbmJsb2NrL2Jsay13YnQuYy05OTctXFxuYmxvY2svYmxrLXdidC5jOjk5ODppbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpXFxuYmxvY2svYmxrLXdidC5jLTk5OS17XFxuLS1cXG5ibG9jay9ibGstd2J0Lmg9MTI9Ym9vbCB3YnRfZGlzYWJsZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xcbmJsb2NrL2Jsay13YnQuaDoxMzppbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpO1xcbmJsb2NrL2Jsay13YnQuaC0xNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6MTEuODgwMzI3MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MDk0NDA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkZvY3VzaW5nIG9uIFdyaXRlIEJ1ZmZlciBMYXRlbmN5KipcblxuUmlnaHQsIHRoZSBvbmx5IGZ1bmN0aW9uIG1lbnRpb25lZCBpcyBgcXVldWVfd2JfbGF0X3N0b3JlYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBgd2J0X3NldF9sYXRgIGFzIGEgcHJpbWUgcG9pbnQgb2YgaW50ZXJlc3QuIEl0J3MgdGhlIGNlbnRyYWwgc3ltYm9sIHRvIGhvbmUgaW4gb24sIGFzIGl0IHNlZW1zIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIHRoZSB3cml0ZSBidWZmZXIgbGF0ZW5jeSBzdG9yYWdlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX1dCVGAuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtYWNybywgb3IgdGhpcyBwaWVjZSBvZiB0aGUgc3lzdGVtLCByZWxpZXMgb24uIFRoYXQgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBjb250ZXh0IGFuZCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgaW52ZXN0aWdhdGlvbi4gS25vd2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSBpZGVudGlmeSB0aGUgY2FzY2FkaW5nIGVmZmVjdHMgb2YgY2hhbmdlcyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgcmVsYXRlZCB0byB3cml0ZSBidWZmZXIgbGF0ZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE4OjE0Ljk3MTI3MzQxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwODUwMDUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipCTEtfV0JUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEyOS1cXHRkZWZhdWx0IHlcXG5ibG9jay9LY29uZmlnOjEzMDpcXHRkZXBlbmRzIG9uIEJMS19XQlRcXG5ibG9jay9LY29uZmlnLTEzMS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE4OjE3LjU3OTc3ODY3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDEzNzcyMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgQkxLX1dCVGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJMS19XQlRgLiBMZXQncyBhc3N1bWUgdGhlIHVzZXIga25vd3MgdGhhdCBpdCByZWxhdGVzIHRvIGEgYmxvY2sgZGV2aWNlLCBhbmQgdGhhdCBpdCdzIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgc3RhYmlsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGllY2Ugb2YgY29kZSByZWxpZXMgb24sIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBpbnRlcmFjdCB3aXRoIGl0LCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBvciBpc3N1ZXMgbWlnaHQgYmUuIFRoaXMgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgY2hlY2tpbmcgaGVhZGVyIGZpbGVzLCBsb29raW5nIGZvciBjYWxscyB0byBhbmQgZnJvbSBgQkxLX1dCVGAsIGFuZCB0cmFjaW5nIGRhdGEgZmxvd3MuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHN1c3BlY3RzOiBhbnkgcmVsYXRlZCBzdHJ1Y3R1cmVzLCBhbmQgZnVuY3Rpb25zLCBhbmQgdGhlbiB3b3JrIG15IHdheSBvdXR3YXJkLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSB1cHN0cmVhbSBjb21wb25lbnRzIGRlcGVuZCBvbiB0aGlzLCBvciBpZiBpdCBwcm92aWRlcyBhIHB1YmxpYyBBUEkuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxODoyMC45OTM1NTI0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MjIxOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfV0JUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0xMDY9Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbi0tXFxuYmxvY2svS2NvbmZpZy0xMTctXFxuYmxvY2svS2NvbmZpZzoxMTg6Y29uZmlnIEJMS19XQlRcXG5ibG9jay9LY29uZmlnLTExOS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHdyaXRlYmFjayB0aHJvdHRsaW5nXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMjYtXFxuYmxvY2svS2NvbmZpZzoxMjc6Y29uZmlnIEJMS19XQlRfTVFcXG5ibG9jay9LY29uZmlnLTEyOC1cXHRib29sIFxcXCJFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6MjEuMjE3NzgwOTk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTYzMjIyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBhc3BlY3Qgb2YgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24gd29ya3MuIE15IG1lbnRhbCBtYXAgcG9pbnRzIG1lIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGJsb2NrL2AgZGlyZWN0b3J5LCBuYXR1cmFsbHkuIExpbmUgMTE4IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyBob3BlZnVsbHksIGl0IGNvbnRhaW5zIHRoZSByZWxldmFudCBlbnRyeSBvciBhbiBpbmRpcmVjdCBsaW5rIHRvIGl0LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBkZWZpbml0aW9uLCBtYXliZSBhIGRlcGVuZGVuY3ksIG9yIHBlcmhhcHMgYSBzdWJtZW51IHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGZlYXR1cmUgSSdtIGludGVyZXN0ZWQgaW4uIEknbGwgYmUgbG9va2luZyBmb3Iga2V5d29yZHMgYW5kIHBhdHRlcm5zIHRoYXQgSSdtIGZhbWlsaWFyIHdpdGgg4oCTIGBjb25maWdgLCBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBgYm9vbGAsIGB0cmlzdGF0ZWAsIGBoZWxwYCBhbmQgdGhlaXIgY29udGV4dHMgd2lsbCBpbW1lZGlhdGVseSBncmFiIG15IGF0dGVudGlvbi4gRnJvbSB0aGF0IHN0YXJ0aW5nIHBvaW50LCBJIGFudGljaXBhdGUgSSBjYW4gdHJhY2UgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgb3B0aW9ucyBwcmV0dHkgcXVpY2tseSwgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi4gYW5kIGhvcGUgaXQncyB3ZWxsLWNvbW1lbnRlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE4OjI0LjgzNDEwNTA0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRcXHRoZWxwXFxuIDExMTpcXHRcXHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxcbiAxMTI6XFx0XFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXFxuIDExMzpcXHRcXHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcXG4gMTE0OlxcdFxcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuIDExNzpcXHRcXG4gMTE4OlxcdGNvbmZpZyBCTEtfV0JUXFxuIDExOTpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHdyaXRlYmFjayB0aHJvdHRsaW5nXFxcIlxcbiAxMjA6XFx0XFx0aGVscFxcbiAxMjE6XFx0XFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYmxvY2sgbGF5ZXIgdG8gdGhyb3R0bGUgYnVmZmVyZWRcXG4gMTIyOlxcdFxcdGJhY2tncm91bmQgd3JpdGViYWNrIGZyb20gdGhlIFZNLCBtYWtpbmcgaXQgbW9yZSBzbW9vdGggYW5kIGhhdmluZ1xcbiAxMjM6XFx0XFx0bGVzcyBpbXBhY3Qgb24gZm9yZWdyb3VuZCBvcGVyYXRpb25zLiBUaGUgdGhyb3R0bGluZyBpcyBkb25lXFxuIDEyNDpcXHRcXHRkeW5hbWljYWxseSBvbiBhbiBhbGdvcml0aG0gbG9vc2VseSBiYXNlZCBvbiBDb0RlbCwgZmFjdG9yaW5nIGluXFxuIDEyNTpcXHRcXHR0aGUgcmVhbHRpbWUgcGVyZm9ybWFuY2Ugb2YgdGhlIGRpc2suXFxuIDEyNjpcXHRcXG4gMTI3OlxcdGNvbmZpZyBCTEtfV0JUX01RXFxuIDEyODpcXHRcXHRib29sIFxcXCJFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFxcXCJcXG4gMTI5OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxODoyNC44MzQxODE0MTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5NjIxNzUyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBCbG9jayBMYXllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJ3QgdGllZCB0byBhbnkgcGFydGljdWxhciBkZXZpY2Ugb3Igc3Vic3lzdGVtIOKAkyBpdCdzIGFsbCBhYm91dCB0aGUgZnVuZGFtZW50YWwgYmxvY2sgbGF5ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgYEJMS19XQlRgIGlzIGVuYWJsZWQuIEl0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIHdyaXRlYmFjayB0aHJvdHRsaW5nLCBzbyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgd2J0X2xhdF9jaGFuZ2VkYCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGB3YnRfc2V0X2xhdGAuIFRoYXQgYHdidF9zZXRfbGF0YCBzeW1ib2wgaXMgcmVhbGx5IHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBMb29rcyBsaWtlIGBxdWV1ZV93Yl9sYXRfc3RvcmVgIGNvdWxkIGJlIGFub3RoZXIgY3JpdGljYWwgc3ltYm9sIHRvIGludmVzdGlnYXRlLlxuXG5UaGUgZnVuY3Rpb25hbCBpbXBhY3QgaGVyZSBpcyBhYm91dCBtb2RpZnlpbmcgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBjaGVjayBmb3Igd3JpdGViYWNrIHRocm90dGxpbmcgbGF0ZW5jeSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBgd2J0X2xhdF91c2VjYCBpbiBzeXNmcyBpcyBhbHRlcmVkLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB3YnRfbGF0X3VzZWNgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBzeXNmcyBmaWxlLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIGJlY2F1c2UgdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGhvdyB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlcyB0aHJvdHRsaW5nIGNoYW5nZXMgaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSwgc28gdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3IgaXMgcGFyYW1vdW50LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGRldmljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxODozOS43OTYzNTgzMDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTc1NjE0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfd2JfbGF0X3N0b3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zeXNmcy5jPTY5Mz1zdGF0aWMgc3NpemVfdCBxdWV1ZV93Yl9sYXRfc2hvdyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY2hhciAqcGFnZSlcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jLTcxNC1cXG5ibG9jay9ibGstc3lzZnMuYzo3MTU6c3RhdGljIHNzaXplX3QgcXVldWVfd2JfbGF0X3N0b3JlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBjaGFyICpwYWdlLFxcbmJsb2NrL2Jsay1zeXNmcy5jLTcxNi1cXHRcXHRcXHRcXHQgIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6NDEuNzkzOTI0NDc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTc5ODgyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEZWx2aW5nIGludG8gU3lzZnMgQXR0cmlidXRlIERlZmluaXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaW4gdGFja2xpbmcgdGhpcyBpcyB0byBqdW1wIGludG8gdGhlIHN5c2ZzIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBjb25maXJtIG15IGFzc3VtcHRpb25zLCBhbmQgbWFrZSBzdXJlIEknbSB3b3JraW5nIGZyb20gYSBzb2xpZCwgYWNjdXJhdGUgZm91bmRhdGlvbi4gTm8gcG9pbnQgaW4gc3Bpbm5pbmcgbXkgd2hlZWxzIG9uIHNvbWV0aGluZyBJICp0aGluayogSSBrbm93LCB3aGVuIGEgcXVpY2sgY2hlY2sgY2FuIHNhdmUgYSB0b24gb2YgdGltZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gc2F5czsgbWF5YmUgdGhlcmUncyBhIHBhcnRpY3VsYXIgbnVhbmNlIGhlcmUgdGhhdCBJJ20gb3Zlcmxvb2tpbmcgb3Igc29tZXRoaW5nIGluIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0IEkgaGFkbid0IGNvbnNpZGVyZWQuIFRpbWUgdG8gZ2V0IGRvd24gdG8gdGhlIGJyYXNzIHRhY2tzIGFuZCByZWFsbHkgdW5kZXJzdGFuZCB0aGUgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzU2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6NDQuODkxOTE0NzcyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg4MTUxMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX3diX2xhdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstc3lzZnMuYz02ODA9c3RhdGljIHNzaXplX3QgcXVldWVfdmFyX3N0b3JlNjQoczY0ICp2YXIsIGNvbnN0IGNoYXIgKnBhZ2UpXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy02OTItXFxuYmxvY2svYmxrLXN5c2ZzLmM6NjkzOnN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zaG93KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjaGFyICpwYWdlKVxcbmJsb2NrL2Jsay1zeXNmcy5jLTY5NC17XFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy03MTQtXFxuYmxvY2svYmxrLXN5c2ZzLmM6NzE1OnN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zdG9yZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3QgY2hhciAqcGFnZSxcXG5ibG9jay9ibGstc3lzZnMuYy03MTYtXFx0XFx0XFx0XFx0ICBzaXplX3QgY291bnQpXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy03MzAtXFxuYmxvY2svYmxrLXN5c2ZzLmM6NzMxOlFVRVVFX1JXX0VOVFJZKHF1ZXVlX3diX2xhdCwgXFxcIndidF9sYXRfdXNlY1xcXCIpO1xcbmJsb2NrL2Jsay1zeXNmcy5jLTczMi0jZW5kaWZcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jPTc5NT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3QgYmxrX21xX3F1ZXVlX2F0dHJzW10gPSB7XFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy04MDMtI2lmZGVmIENPTkZJR19CTEtfV0JUXFxuYmxvY2svYmxrLXN5c2ZzLmM6ODA0OlxcdFxcdTAwMjZxdWV1ZV93Yl9sYXRfZW50cnkuYXR0cixcXG5ibG9jay9ibGstc3lzZnMuYy04MDUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE4OjQ2Ljc4MDA3MTMxNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzAwMzY2OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBXcml0ZWJhY2sgTGF0ZW5jeSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGB3YnRfbGF0X3VzZWNgIGhlcmUuIEdvdCBpdC4gVGhpcyBjb25uZWN0cyBkaXJlY3RseSB0byB0aGUgYEJMS19XQlRgIGNvbmZpZ3VyYXRpb25zLiBNeSBmb2N1cyBpcyBvbiB0aGUgc3ltYm9scyBgd2J0X3NldF9sYXRgIGFuZCBgcXVldWVfd2JfbGF0X3N0b3JlYC4gR29vZCBuZXdzLCB0aGUgc3lzdGVtIGZsYWdnZWQgdGhpcyBhcyBgV29ydGhGdXp6aW5nYCwgd2hpY2ggbWVhbnMgaXQgY291bGQgaGF2ZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMuXG5cbkxldCBtZSBxdWlja2x5IGNvbmZpcm0gYSBodW5jaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgd2J0X2xhdF9jaGFuZ2VkYCBpcyBzdGF0aWMg4oCTIHllcywgcGVyZmVjdCwgaXQncyBzdGF0aWMuIFRoYXQgbWVhbnMgdGhlIGVudHJ5IHBvaW50IGlzIGxpa2VseSBgd2J0X3NldF9sYXRgLCB0aGUgZXhwb3J0ZWQsIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBpdC4gVGhpcyBnaXZlcyBtZSBhIGRlZmluZWQgcG9pbnQgZm9yIGludGVyYWN0aW9uLlxuXG5Ob3csIEknbGwgc2V0IHRoZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcyBhY2NvcmRpbmdseS4gVGhhdCdzIHRoZSBpbXBvcnRhbnQgcGllY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4OTQsIk91dHB1dFRva2VucyI6MTEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE4OjUxLjA4MDQzOTg4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDgzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfV0JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2J0X3NldF9sYXRcIixcbiAgICBcInF1ZXVlX3diX2xhdF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY2hlY2tpbmcgaWYgdGhlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGxhdGVuY3kgaGFzIGNoYW5nZWQgd2hlbiB1cGRhdGVkIHZpYSBzeXNmcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBsYXllcidzIHdyaXRlYmFjayB0aHJvdHRsaW5nIGZlYXR1cmUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byB0aGUgYHdidF9sYXRfdXNlY2Agc3lzZnMgZmlsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfV0JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2J0X3NldF9sYXRcIixcbiAgICBcInF1ZXVlX3diX2xhdF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY2hlY2tpbmcgaWYgdGhlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGxhdGVuY3kgaGFzIGNoYW5nZWQgd2hlbiB1cGRhdGVkIHZpYSBzeXNmcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBsYXllcidzIHdyaXRlYmFjayB0aHJvdHRsaW5nIGZlYXR1cmUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byB0aGUgYHdidF9sYXRfdXNlY2Agc3lzZnMgZmlsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzk2m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-17 15:53:58 +0000 UTC FinishedAt: 2026-07-17 16:18:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_WBT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_WBT" ], "series_id": "ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "wbt_set_lat", "queue_wb_lat_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19XQlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3YnRfc2V0X2xhdCYjMzQ7LAogICAgJiMzNDtxdWV1ZV93Yl9sYXRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjaGVja2luZyBpZiB0aGUgd3JpdGViYWNrIHRocm90dGxpbmcgbGF0ZW5jeSBoYXMgY2hhbmdlZCB3aGVuIHVwZGF0ZWQgdmlhIHN5c2ZzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIHdyaXRlYmFjayB0aHJvdHRsaW5nIGZlYXR1cmUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byB0aGUgYHdidF9sYXRfdXNlY2Agc3lzZnMgZmlsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRjNzE1MWI2NmZiZjdiMGZkZTJhMzNhNGFkNmMxZjI5NGEyMjkzODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAxNjoxNzozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstd2J0LmMgYi9ibG9jay9ibGstd2J0LmNcbmluZGV4IDk1M2Q0MDBmZDAxMzdiLi40ZjEyYTA2NDI4NmVmZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay13YnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXdidC5jXG5AQCAtODEzLDcgJiM0Mzs4MTMsMTQgQEAgc3RhdGljIHZvaWQgd2J0X3F1ZXVlX2RlcHRoX2NoYW5nZWQoc3RydWN0IHJxX3FvcyAqcnFvcylcbiBcdHdidF91cGRhdGVfbGltaXRzKFJRV0IocnFvcykpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB3YnRfc2V0X2xhdF9jaGFuZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1NjQgdmFsKVxuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm4gdHJ1ZSBpZiB3cml0aW5nIEB2YWwgd291bGQgY2hhbmdlIHRoZSBXQlQgc3RhdGU6XG4mIzQzOyAqIDEpIEB2YWwgZGlmZmVycyBmcm9tIHRoZSBzdG9yZWQgbWluX2xhdF9uc2VjLCBvclxuJiM0MzsgKiAyKSBAdmFsIG1hdGNoZXMsIGJ1dCBlbmFibGVfc3RhdGUgaXMgbm90IHRoZSBjb3JyZXNwb25kaW5nIG1hbnVhbCBzdGF0ZVxuJiM0MzsgKiAgICAoV0JUX1NUQVRFX09OX01BTlVBTCBmb3Igbm9uLXplcm8gQHZhbCwgV0JUX1NUQVRFX09GRl9NQU5VQUwgZm9yIDApLFxuJiM0MzsgKiAgICBzbyB0aGUgd3JpdGUgc3RpbGwgaGFzIHRvIHVwZGF0ZSBlbmFibGVfc3RhdGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCB3YnRfbGF0X2NoYW5nZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHU2NCB2YWwpXG4ge1xuIFx0c3RydWN0IHJxX3FvcyAqcnFvcyA9IHdidF9ycV9xb3MocSk7XG4gXHRzdHJ1Y3QgcnFfd2IgKnJ3YjtcbkBAIC04MjUsNyAmIzQzOzgzMiw4IEBAIHN0YXRpYyBib29sIHdidF9zZXRfbGF0X2NoYW5nZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHU2NCB2YWwpXG4gXHRpZiAocndiLVx1MDAzZW1pbl9sYXRfbnNlYyAhPSB2YWwpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0cmV0dXJuIHJ3Yl9lbmFibGVkKHJ3YikgIT0gISF2YWw7XG4mIzQzO1x0cmV0dXJuIHJ3Yi1cdTAwM2VlbmFibGVfc3RhdGUgIT1cbiYjNDM7XHQgICAgICAgKHZhbCA/IFdCVF9TVEFURV9PTl9NQU5VQUwgOiBXQlRfU1RBVEVfT0ZGX01BTlVBTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHdidF9leGl0KHN0cnVjdCBycV9xb3MgKnJxb3MpXG5AQCAtMTAyMSw3ICYjNDM7MTAyOSw3IEBAIGludCB3YnRfc2V0X2xhdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgczY0IHZhbClcbiBcdFx0dmFsICo9IDEwMDBVTEw7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlcnFvc19zdGF0ZV9tdXRleCk7XG4tXHRpZiAoIXdidF9zZXRfbGF0X2NoYW5nZWQocSwgdmFsKSkge1xuJiM0MztcdGlmICghd2J0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlcnFvc19zdGF0ZV9tdXRleCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19XQlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3YnRfc2V0X2xhdCYjMzQ7LAogICAgJiMzNDtxdWV1ZV93Yl9sYXRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjaGVja2luZyBpZiB0aGUgd3JpdGViYWNrIHRocm90dGxpbmcgbGF0ZW5jeSBoYXMgY2hhbmdlZCB3aGVuIHVwZGF0ZWQgdmlhIHN5c2ZzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyJiMzOTtzIHdyaXRlYmFjayB0aHJvdHRsaW5nIGZlYXR1cmUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byB0aGUgYHdidF9sYXRfdXNlY2Agc3lzZnMgZmlsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGM3MTUxYjY2ZmJmN2IwZmRlMmEzM2E0YWQ2YzFmMjk0YTIyOTM4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDE3IDE2OjE3OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXdidC5jIGIvYmxvY2svYmxrLXdidC5jCmluZGV4IDk1M2Q0MDBmZDAxMzdiLi40ZjEyYTA2NDI4NmVmZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXdidC5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay13YnQuYwpAQCAtODEzLDcgJiM0Mzs4MTMsMTQgQEAgc3RhdGljIHZvaWQgd2J0X3F1ZXVlX2RlcHRoX2NoYW5nZWQoc3RydWN0IHJxX3FvcyAqcnFvcykKIAl3YnRfdXBkYXRlX2xpbWl0cyhSUVdCKHJxb3MpKTsKIH0KIAotc3RhdGljIGJvb2wgd2J0X3NldF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbCkKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0cnVlIGlmIHdyaXRpbmcgQHZhbCB3b3VsZCBjaGFuZ2UgdGhlIFdCVCBzdGF0ZToKJiM0MzsgKiAxKSBAdmFsIGRpZmZlcnMgZnJvbSB0aGUgc3RvcmVkIG1pbl9sYXRfbnNlYywgb3IKJiM0MzsgKiAyKSBAdmFsIG1hdGNoZXMsIGJ1dCBlbmFibGVfc3RhdGUgaXMgbm90IHRoZSBjb3JyZXNwb25kaW5nIG1hbnVhbCBzdGF0ZQomIzQzOyAqICAgIChXQlRfU1RBVEVfT05fTUFOVUFMIGZvciBub24temVybyBAdmFsLCBXQlRfU1RBVEVfT0ZGX01BTlVBTCBmb3IgMCksCiYjNDM7ICogICAgc28gdGhlIHdyaXRlIHN0aWxsIGhhcyB0byB1cGRhdGUgZW5hYmxlX3N0YXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHdidF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbCkKIHsKIAlzdHJ1Y3QgcnFfcW9zICpycW9zID0gd2J0X3JxX3FvcyhxKTsKIAlzdHJ1Y3QgcnFfd2IgKnJ3YjsKQEAgLTgyNSw3ICYjNDM7ODMyLDggQEAgc3RhdGljIGJvb2wgd2J0X3NldF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbCkKIAlpZiAocndiLSZndDttaW5fbGF0X25zZWMgIT0gdmFsKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiByd2JfZW5hYmxlZChyd2IpICE9ICEhdmFsOwomIzQzOwlyZXR1cm4gcndiLSZndDtlbmFibGVfc3RhdGUgIT0KJiM0MzsJICAgICAgICh2YWwgPyBXQlRfU1RBVEVfT05fTUFOVUFMIDogV0JUX1NUQVRFX09GRl9NQU5VQUwpOwogfQogCiBzdGF0aWMgdm9pZCB3YnRfZXhpdChzdHJ1Y3QgcnFfcW9zICpycW9zKQpAQCAtMTAyMSw3ICYjNDM7MTAyOSw3IEBAIGludCB3YnRfc2V0X2xhdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgczY0IHZhbCkKIAkJdmFsICo9IDEwMDBVTEw7CiAKIAltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7cnFvc19zdGF0ZV9tdXRleCk7Ci0JaWYgKCF3YnRfc2V0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHsKJiM0MzsJaWYgKCF3YnRfbGF0X2NoYW5nZWQocSwgdmFsKSkgewogCQltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtycW9zX3N0YXRlX211dGV4KTsKIAkJZ290byBvdXQ7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV0JUIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYmxvY2svYmxrLXdidC5jYC4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHJlbmFtZSwgYHdidF9zZXRfbGF0X2NoYW5nZWRgIHRvIGB3YnRfbGF0X2NoYW5nZWRgLCB3aGljaCBpcyBmaW5lLCBhbmQgSSBjYW4gc2VlIHdoYXQgdGhleSYjMzk7cmUgZG9pbmcgd2l0aCB0aGUgbG9naWMgaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgbWFpbiBjb25jZXJuIGlzIGRldGVybWluaW5nIGlmIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgd3JpdGViYWNrIHRocm90dGxpbmcgKFdCVCkgd2lsbCBhY3R1YWxseSAqY2hhbmdlKiB0aGUgY3VycmVudCBzdGF0ZS4gVGhlIG9yaWdpbmFsIGNoZWNrLCBgcmV0dXJuIHJ3Yl9lbmFibGVkKHJ3YikgIT0gISF2YWw7YCwgd2FzIGEgYml0IGNsdW5reSwgYnV0IGZ1bmN0aW9uYWwuIE5vdyB0aGV5JiMzOTt2ZSByZXBsYWNlZCBpdCB3aXRoIGByZXR1cm4gcndiLSZndDtlbmFibGVfc3RhdGUgIT0gKHZhbCA/IFdCVF9TVEFURV9PTl9NQU5VQUwgOiBXQlRfU1RBVEVfT0ZGX01BTlVBTCk7YC4KCkVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBub3cgY29tcGFyaW5nIHRoZSBjdXJyZW50IGBlbmFibGVfc3RhdGVgIG9mIHRoZSBgcndiYCBzdHJ1Y3QgYWdhaW5zdCB0aGUgKmludGVuZGVkKiBzdGF0ZSBiYXNlZCBvbiB0aGUgaW5wdXQgYHZhbGAuIGB2YWxgIHNlZW1zIHRvIGJlIGEgYm9vbGVhbiwgd2hpY2ggaXMgdGhlbiBtYXBwZWQgdG8gdGhlIGBXQlRfU1RBVEVfT05fTUFOVUFMYCBhbmQgYFdCVF9TVEFURV9PRkZfTUFOVUFMYCBlbnVtIHZhbHVlcywgaW5kaWNhdGluZyB3aGV0aGVyIHdlJiMzOTtyZSBtYW51YWxseSB0dXJuaW5nIFdCVCBvbiBvciBvZmYuCgpJIG5lZWQgdG8gZGlnIGludG8gYGJsb2NrL2Jsay13YnQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGByd2JgIHN0cnVjdHVyZSBjb21lcyBmcm9tLCB3aGF0IGl0cyBmaWVsZHMgbWVhbiwgYW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgbWVjaGFuaXNtcyBhcmUgaW4gcGxheSBhcm91bmQgV0JULiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIFdCVCBtYW5hZ2VtZW50IGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGlzIGNoYW5nZSBtaWdodCBoYXZlIGZvciBkaWZmZXJlbnQgc2NlbmFyaW9zLiBVbmRlcnN0YW5kaW5nIHRoZSB3aWRlciBjb250ZXh0IGlzIGtleSBiZWZvcmUgSSYjMzk7bGwgYmUgY29tZm9ydGFibGUgd2l0aCB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3didF9sYXRfY2hhbmdlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstd2J0LmM9ODEwPXN0YXRpYyB2b2lkIHdidF9xdWV1ZV9kZXB0aF9jaGFuZ2VkKHN0cnVjdCBycV9xb3MgKnJxb3MpXG4tLVxuYmxvY2svYmxrLXdidC5jLTgyMi0gKi9cbmJsb2NrL2Jsay13YnQuYzo4MjM6c3RhdGljIGJvb2wgd2J0X2xhdF9jaGFuZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1NjQgdmFsKVxuYmxvY2svYmxrLXdidC5jLTgyNC17XG4tLVxuYmxvY2svYmxrLXdidC5jPTk5OD1pbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpXG4tLVxuYmxvY2svYmxrLXdidC5jLTEwMzEtXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlcnFvc19zdGF0ZV9tdXRleCk7XG5ibG9jay9ibGstd2J0LmM6MTAzMjpcdGlmICghd2J0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHtcbmJsb2NrL2Jsay13YnQuYy0xMDMzLVx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VycW9zX3N0YXRlX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEJsb2NrIFdyaXRlYmFjayBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgYGJsay13YnQuY2AuIEl0JiMzOTtzIGEga2V5IGNvbXBvbmVudCwgc28gdW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgZm9yLCBzYXksIHR1bmluZyB3cml0ZWJhY2sgcGVyZm9ybWFuY2UsIGRlYnVnZ2luZyBsYXRlbmN5IGlzc3Vlcywgb3IganVzdCBnZW5lcmFsbHkgZ3Jhc3BpbmcgaG93IHRoZSBibG9jayBsYXllciBpcyBiZWhhdmluZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBpdHMgcHJlc2VuY2UgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQmIzM5O3MgcHVsbGluZyBpdCBpbi4KCkkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGhpZXJhcmNoeS4gVXN1YWxseSwgeW91IGNhbiBmaW5kIGEgZ29vZCBlbnRyeSBwb2ludCB0aHJvdWdoIGBLY29uZmlnYCBmaWxlcyBpbiByZWxldmFudCBkaXJlY3RvcmllcywgbGlrZSB0aGUgYmxvY2sgbGF5ZXImIzM5O3Mgcm9vdCBvciB0aGUgZHJpdmVycy9ibG9jayBkaXJlY3RvcnkuIEkmIzM5O2xsIG1lbnRhbGx5IHJ1biB0aHJvdWdoIHRoZSByZWxldmFudCBkaXJlY3Rvcmllcywgc2Nhbm5pbmcgZm9yIGxpa2VseSBjYW5kaWRhdGVzIOKAkyBwb3RlbnRpYWxseSBhbnkgYEtjb25maWdgIGZpbGUgdG91Y2hpbmcgYmxvY2sgZGV2aWNlIGZlYXR1cmVzIG9yIGdlbmVyaWMgYmxvY2sgZGV2aWNlIHN1cHBvcnQuIElmIEkmIzM5O20gbHVja3ksIGEgcXVpY2sgZ3JlcCBvciBgZmluZCAuIC1uYW1lICYjMzQ7S2NvbmZpZyYjMzQ7IHwgeGFyZ3MgZ3JlcCBibGstd2J0LmNgIG1pZ2h0IGRvIHRoZSB0cmljaywgcHJvdmlkaW5nIHRoZSBkaXJlY3QgZGVwZW5kZW5jeS4KCklmIHRoYXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IGZydWl0ZnVsLCBJJiMzOTtsbCBmYWxsIGJhY2sgdG8gc2VhcmNoaW5nIGZvciBzeW1ib2xzLiBJJiMzOTtkIGNoZWNrIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgb3V0cHV0IG9yIHBvdGVudGlhbGx5IHVzZSBhIHRvb2wgbGlrZSBga2NvbmZpZy10dWlgIG9yIGBtZW51Y29uZmlnYCwgc2Nhbm5pbmcgZm9yIHN5bWJvbHMgcmVsYXRlZCB0byBibG9jayB3cml0ZWJhY2ssIGRpcnR5IHBhZ2UgaGFuZGxpbmcsIG9yIHNpbWlsYXIgZnVuY3Rpb25hbGl0eS4gSSBtaWdodCBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYW55IHJlbGF0ZWQgY29yZSBmZWF0dXJlcy4KClRoZW4sIG9uY2UgSSBmaW5kIHRoZSBjb25maWcgb3B0aW9uLCBJJiMzOTtsbCBpbW1lZGlhdGVseSB0aGluayBhYm91dCBpdHMgaW1wbGljYXRpb25zLiBJcyBpdCBhIGNvcmUgZmVhdHVyZSBvZiB0aGUgYmxvY2sgbGF5ZXIsIG9yIGlzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBzdG9yYWdlIGRyaXZlciBvciBmZWF0dXJlIHNldD8gSWYgaXQmIzM5O3MgYSBkcml2ZXItc3BlY2lmaWMgb3B0aW9uLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGF0IGRyaXZlciB0byBwcmVkaWN0IGl0cyBiZWhhdmlvci4gSWYgaXQmIzM5O3MgbW9yZSBnZW5lcmljLCBJJiMzOTtsbCBjb25zaWRlciBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIG90aGVyIG9wdGlvbnMsIHN1Y2ggYXMgdGhlIHdyaXRlYmFjayBpbnRlcnZhbCBvciBkaXJ0eSBwYWdlIHRocmVzaG9sZHMuIEkgbmVlZCB0byBxdWlja2x5IHZpc3VhbGl6ZSB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSBpdCBmYWxscyBpbnRvLCBlc3BlY2lhbGx5IGdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsJiMzOTtzIGJsb2NrIGxheWVyIGFyY2hpdGVjdHVyZS4gSSBrbm93IHRoZSBsaWtlbHkgZGVwZW5kZW5jaWVzLCBzbyB3aGF0IGVsc2UgZG9lcyB0aGlzIGRlcGVuZCBvbiwgYW5kIHdoYXQgZG9lcyB0aGlzIGVuYWJsZSwgYW5kIGhvdyBkb2VzIHRoaXMgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUga2VybmVsPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsay13YnQubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQkxLX0RFVl9aT05FRClcdCYjNDM7PSBibGstem9uZWQub1xuYmxvY2svTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JMS19XQlQpXHRcdCYjNDM7PSBibGstd2J0Lm9cbmJsb2NrL01ha2VmaWxlLTM1LW9iai0kKENPTkZJR19CTEtfREVCVUdfRlMpXHQmIzQzOz0gYmxrLW1xLWRlYnVnZnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqQW5hbHl6aW5nIHRoZSBCTEtfV0JUIENvbmZpZ3VyYXRpb24gYW5kIExhdGVuY3kgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaXMgYEJMS19XQlRgLiBHb3QgaXQuIE5vdywgdGhlIGtleSBjaGFuZ2UgaXMgaW4gdGhlIGB3YnRfc2V0X2xhdGAgZnVuY3Rpb247IGl0JiMzOTtzIGJlZW4gdXBkYXRlZCB0byBsZXZlcmFnZSBgd2J0X2xhdF9jaGFuZ2VkYC4gTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBUbyBkbyB0aGF0LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMuIFdoZXJlIGlzIGB3YnRfc2V0X2xhdGAgYmVpbmcgaW52b2tlZD8gSSBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIHRvIGB3YnRfbGF0X2NoYW5nZWRgLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBmbG93IHRvIGZ1bGx5IGFuYWx5emUgdGhlIGNoYW5nZXMgbWFkZSBhbmQgcHJlZGljdCB0aGVpciBlZmZlY3Qgb24gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YnRfc2V0X2xhdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstc3lzZnMuYz03MTU9c3RhdGljIHNzaXplX3QgcXVldWVfd2JfbGF0X3N0b3JlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBjaGFyICpwYWdlLFxuLS1cbmJsb2NrL2Jsay1zeXNmcy5jLTcyNi1cbmJsb2NrL2Jsay1zeXNmcy5jOjcyNzpcdHJldCA9IHdidF9zZXRfbGF0KGRpc2ssIHZhbCk7XG5ibG9jay9ibGstc3lzZnMuYy03MjgtXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4tLVxuYmxvY2svYmxrLXdidC5jPTk2OD1zdGF0aWMgaW50IHdidF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgcnFfd2IgKnJ3Yilcbi0tXG5ibG9jay9ibGstd2J0LmMtOTk3LVxuYmxvY2svYmxrLXdidC5jOjk5ODppbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpXG5ibG9jay9ibGstd2J0LmMtOTk5LXtcbi0tXG5ibG9jay9ibGstd2J0Lmg9MTI9Ym9vbCB3YnRfZGlzYWJsZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xuYmxvY2svYmxrLXdidC5oOjEzOmludCB3YnRfc2V0X2xhdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgczY0IHZhbCk7XG5ibG9jay9ibGstd2J0LmgtMTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTeXNmcyBTdG9yZSBGdW5jdGlvbiBhbmQgYSBQb3RlbnRpYWwgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHBhdGguIEl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIGBxdWV1ZV93Yl9sYXRfc3RvcmVgIGluIGBibG9jay9ibGstc3lzZnMuY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgbWVhbmluZyBhIHVzZXIgaW4gdXNlcnNwYWNlIGNhbiBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGl0IGJ5IHdyaXRpbmcgdG8gYSBzeXNmcyBmaWxlLiBUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgYSBkaXJlY3QgaW50ZXJmYWNlLgoKVGhlIHBhdGNoIGl0c2VsZiBhZGRyZXNzZXMgYSBidWcgd2l0aGluIGB3YnRfc2V0X2xhdF9jaGFuZ2VkYC4gSXQgc2VlbXMgdGhlIGlzc3VlIHdhcyBhIGxhY2sgb2YgcHJvcGVyIGNoZWNraW5nIG9mIGBlbmFibGVfc3RhdGVgIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFRoaXMgdGVsbHMgbWUgaXQgd2FzbiYjMzk7dCBoYW5kbGluZyB0aGF0IHN0YXRlIHByb3Blcmx5LiBNYWtlcyBzZW5zZS4KCkdpdmVuIHRoZSBjb250ZXh0LCB0aGUgYnVnIGlzIGNsZWFybHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlOyBpdCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgY29kZSBwYXRoLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBpcyBzaWduaWZpY2FudCBpbiB0aGF0IHRoZSBmaXggbWF0dGVycyEgSSBzZWUgdGhhdCBgQkxLX1dCVGAgaXMgdGhlIGNvbmZpZyBoZXJlLgoKSSYjMzk7ZCBiZXR0ZXIgcXVpY2tseSBjb25maXJtIHRoYXQgYEJMS19XQlRgIGlzIHRoZSBvbmx5IGNvbmZpZyBoZXJlLiBKdXN0IHRvIGJlIHN1cmUuIEkgd2lsbCBsb29rIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhhdCBhbHNvIGluY2x1ZGVzIGl0LiBUaGUgZm9jYWwgc3ltYm9sIHNlZW1zIHRvIGJlIGB3YnRfc2V0X2xhdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfV0JUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MTA2PWNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbi0tXG5ibG9jay9LY29uZmlnLTExNy1cbmJsb2NrL0tjb25maWc6MTE4OmNvbmZpZyBCTEtfV0JUXG5ibG9jay9LY29uZmlnLTExOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSB3cml0ZWJhY2sgdGhyb3R0bGluZ1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTI2LVxuYmxvY2svS2NvbmZpZzoxMjc6Y29uZmlnIEJMS19XQlRfTVFcbmJsb2NrL0tjb25maWctMTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjMzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBXcml0ZWJhY2sgTGF0ZW5jeSBpbiB0aGUgQmxvY2sgTGF5ZXIqKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSYjMzk7bSB3b3JraW5nIHdpdGggcmlnaHQgbm93IGlzIGBCTEtfV0JUYC4gR290IGl0LiBNeSBtYWluIGZvY3VzIGlzIG9uIHN5bWJvbHMgcmVsYXRlZCB0byB3cml0ZWJhY2sgbGF0ZW5jeSwgc3BlY2lmaWNhbGx5IGB3YnRfc2V0X2xhdGAgYW5kIGBxdWV1ZV93Yl9sYXRfc3RvcmVgLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgcXVldWVfd2JfbGF0X3N0b3JlYC4gSSBrbm93IHRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIGluIHRoZSBibG9jayBsYXllciBzb21ld2hlcmUuIE1vcmUgc3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgaXQgaW4gYGJsb2NrL2Jsay1zeXNmcy5jYC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3F1ZXVlX3diX2xhdF9zdG9yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstc3lzZnMuYz02OTM9c3RhdGljIHNzaXplX3QgcXVldWVfd2JfbGF0X3Nob3coc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNoYXIgKnBhZ2UpXG4tLVxuYmxvY2svYmxrLXN5c2ZzLmMtNzE0LVxuYmxvY2svYmxrLXN5c2ZzLmM6NzE1OnN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zdG9yZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3QgY2hhciAqcGFnZSxcbmJsb2NrL2Jsay1zeXNmcy5jLTcxNi1cdFx0XHRcdCAgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTczCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMYXRlbmN5IFN0b3JlIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBxdWV1ZV93Yl9sYXRfc3RvcmVgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBhIGZsYWcgZ29lcyB1cC4gVGhpcyBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBTeXprYWxsZXIgKm1pZ2h0KiBub3QgYmUgYWJsZSB0byBmdXp6IGl0IGRpcmVjdGx5IHVubGVzcyBpdCBoYXMgc3BlY2lmaWMga25vd2xlZGdlIG9mIHRoaXMgcGFydGljdWxhciBzeXNmcyBmaWxlLiBTeXprYWxsZXIgKmNhbiogZnV6eiBzeXNmcyBmaWxlcywgYnV0IGl0IG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlbSwgcmlnaHQ/IEl0JiMzOTtzIG5vdCBtYWdpYy4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIHNlZW1zIHRvIGJlIGB3YnRfc2V0X2xhdGAsIHNvICp0aGF0JiMzOTtzKiB0aGUgZnVuY3Rpb24gSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbi4KCkZpcnN0IHN0ZXA6IGxldCYjMzk7cyBzZWUgd2hlcmUgZWxzZSBgd2J0X3NldF9sYXRgIGlzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaCB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4gSWRlbnRpZnlpbmcgYWxsIHRoZSBjYWxsIHNpdGVzIHdpbGwgc2hvdyBtZSBpZiBpdCYjMzk7cyByZWFjaGFibGUgZnJvbSBvdGhlciBmdXp6ZXIgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2J0X3NldF9sYXRcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN5c2ZzLmM9NzE1PXN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zdG9yZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3QgY2hhciAqcGFnZSxcbi0tXG5ibG9jay9ibGstc3lzZnMuYy03MjYtXG5ibG9jay9ibGstc3lzZnMuYzo3Mjc6XHRyZXQgPSB3YnRfc2V0X2xhdChkaXNrLCB2YWwpO1xuYmxvY2svYmxrLXN5c2ZzLmMtNzI4LVx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuLS1cbmJsb2NrL2Jsay13YnQuYz05Njg9c3RhdGljIGludCB3YnRfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IHJxX3diICpyd2IpXG4tLVxuYmxvY2svYmxrLXdidC5jLTk5Ny1cbmJsb2NrL2Jsay13YnQuYzo5OTg6aW50IHdidF9zZXRfbGF0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzNjQgdmFsKVxuYmxvY2svYmxrLXdidC5jLTk5OS17XG4tLVxuYmxvY2svYmxrLXdidC5oPTEyPWJvb2wgd2J0X2Rpc2FibGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcbmJsb2NrL2Jsay13YnQuaDoxMzppbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpO1xuYmxvY2svYmxrLXdidC5oLTE0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTUwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkZvY3VzaW5nIG9uIFdyaXRlIEJ1ZmZlciBMYXRlbmN5KioKClJpZ2h0LCB0aGUgb25seSBmdW5jdGlvbiBtZW50aW9uZWQgaXMgYHF1ZXVlX3diX2xhdF9zdG9yZWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYHdidF9zZXRfbGF0YCBhcyBhIHByaW1lIHBvaW50IG9mIGludGVyZXN0LiBJdCYjMzk7cyB0aGUgY2VudHJhbCBzeW1ib2wgdG8gaG9uZSBpbiBvbiwgYXMgaXQgc2VlbXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gdGhlIHdyaXRlIGJ1ZmZlciBsYXRlbmN5IHN0b3JhZ2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX1dCVGAuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8sIG9yIHRoaXMgcGllY2Ugb2YgdGhlIHN5c3RlbSwgcmVsaWVzIG9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSBpbW1lZGlhdGUgY29udGV4dCBhbmQgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIGludmVzdGlnYXRpb24uIEtub3dpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgaWRlbnRpZnkgdGhlIGNhc2NhZGluZyBlZmZlY3RzIG9mIGNoYW5nZXMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gd3JpdGUgYnVmZmVyIGxhdGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKkJMS19XQlQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEyOS1cdGRlZmF1bHQgeVxuYmxvY2svS2NvbmZpZzoxMzA6XHRkZXBlbmRzIG9uIEJMS19XQlRcbmJsb2NrL0tjb25maWctMTMxLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODUyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYEJMS19XQlRgIERlcGVuZGVuY2llcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX1dCVGAuIExldCYjMzk7cyBhc3N1bWUgdGhlIHVzZXIga25vd3MgdGhhdCBpdCByZWxhdGVzIHRvIGEgYmxvY2sgZGV2aWNlLCBhbmQgdGhhdCBpdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHRoZSBvdmVyYWxsIHN5c3RlbSYjMzk7cyBzdGFiaWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwaWVjZSBvZiBjb2RlIHJlbGllcyBvbiwgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGludGVyYWN0IHdpdGggaXQsIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIG9yIGlzc3VlcyBtaWdodCBiZS4gVGhpcyBtZWFucyBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBjaGVja2luZyBoZWFkZXIgZmlsZXMsIGxvb2tpbmcgZm9yIGNhbGxzIHRvIGFuZCBmcm9tIGBCTEtfV0JUYCwgYW5kIHRyYWNpbmcgZGF0YSBmbG93cy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHN1c3BlY3RzOiBhbnkgcmVsYXRlZCBzdHJ1Y3R1cmVzLCBhbmQgZnVuY3Rpb25zLCBhbmQgdGhlbiB3b3JrIG15IHdheSBvdXR3YXJkLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBhbnkgdXBzdHJlYW0gY29tcG9uZW50cyBkZXBlbmQgb24gdGhpcywgb3IgaWYgaXQgcHJvdmlkZXMgYSBwdWJsaWMgQVBJLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19XQlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MTA2PWNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcbi0tXG5ibG9jay9LY29uZmlnLTExNy1cbmJsb2NrL0tjb25maWc6MTE4OmNvbmZpZyBCTEtfV0JUXG5ibG9jay9LY29uZmlnLTExOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSB3cml0ZWJhY2sgdGhyb3R0bGluZ1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTI2LVxuYmxvY2svS2NvbmZpZzoxMjc6Y29uZmlnIEJMS19XQlRfTVFcbmJsb2NrL0tjb25maWctMTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBhc3BlY3Qgb2YgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24gd29ya3MuIE15IG1lbnRhbCBtYXAgcG9pbnRzIG1lIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGJsb2NrL2AgZGlyZWN0b3J5LCBuYXR1cmFsbHkuIExpbmUgMTE4IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyBob3BlZnVsbHksIGl0IGNvbnRhaW5zIHRoZSByZWxldmFudCBlbnRyeSBvciBhbiBpbmRpcmVjdCBsaW5rIHRvIGl0LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZmlndXJhdGlvbiBvcHRpb24gZGVmaW5pdGlvbiwgbWF5YmUgYSBkZXBlbmRlbmN5LCBvciBwZXJoYXBzIGEgc3VibWVudSByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBmZWF0dXJlIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Iga2V5d29yZHMgYW5kIHBhdHRlcm5zIHRoYXQgSSYjMzk7bSBmYW1pbGlhciB3aXRoIOKAkyBgY29uZmlnYCwgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBgaGVscGAgYW5kIHRoZWlyIGNvbnRleHRzIHdpbGwgaW1tZWRpYXRlbHkgZ3JhYiBteSBhdHRlbnRpb24uIEZyb20gdGhhdCBzdGFydGluZyBwb2ludCwgSSBhbnRpY2lwYXRlIEkgY2FuIHRyYWNlIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIG9wdGlvbnMgcHJldHR5IHF1aWNrbHksIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4gYW5kIGhvcGUgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XHRoZWxwXG4gMTExOlx0XHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxuIDExMjpcdFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXG4gMTEzOlx0XHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcbiAxMTQ6XHRcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxuIDExNTpcdFxuIDExNjpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIDExNzpcdFxuIDExODpcdGNvbmZpZyBCTEtfV0JUXG4gMTE5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBibG9jayBkZXZpY2Ugd3JpdGViYWNrIHRocm90dGxpbmdcJiMzNDtcbiAxMjA6XHRcdGhlbHBcbiAxMjE6XHRcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGJsb2NrIGxheWVyIHRvIHRocm90dGxlIGJ1ZmZlcmVkXG4gMTIyOlx0XHRiYWNrZ3JvdW5kIHdyaXRlYmFjayBmcm9tIHRoZSBWTSwgbWFraW5nIGl0IG1vcmUgc21vb3RoIGFuZCBoYXZpbmdcbiAxMjM6XHRcdGxlc3MgaW1wYWN0IG9uIGZvcmVncm91bmQgb3BlcmF0aW9ucy4gVGhlIHRocm90dGxpbmcgaXMgZG9uZVxuIDEyNDpcdFx0ZHluYW1pY2FsbHkgb24gYW4gYWxnb3JpdGhtIGxvb3NlbHkgYmFzZWQgb24gQ29EZWwsIGZhY3RvcmluZyBpblxuIDEyNTpcdFx0dGhlIHJlYWx0aW1lIHBlcmZvcm1hbmNlIG9mIHRoZSBkaXNrLlxuIDEyNjpcdFxuIDEyNzpcdGNvbmZpZyBCTEtfV0JUX01RXG4gMTI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBieSBkZWZhdWx0XCYjMzQ7XG4gMTI5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgwNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIEJsb2NrIExheWVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgZGV2aWNlIG9yIHN1YnN5c3RlbSDigJMgaXQmIzM5O3MgYWxsIGFib3V0IHRoZSBmdW5kYW1lbnRhbCBibG9jayBsYXllci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBgQkxLX1dCVGAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIHdyaXRlYmFjayB0aHJvdHRsaW5nLCBzbyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGB3YnRfbGF0X2NoYW5nZWRgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYHdidF9zZXRfbGF0YC4gVGhhdCBgd2J0X3NldF9sYXRgIHN5bWJvbCBpcyByZWFsbHkgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIExvb2tzIGxpa2UgYHF1ZXVlX3diX2xhdF9zdG9yZWAgY291bGQgYmUgYW5vdGhlciBjcml0aWNhbCBzeW1ib2wgdG8gaW52ZXN0aWdhdGUuCgpUaGUgZnVuY3Rpb25hbCBpbXBhY3QgaGVyZSBpcyBhYm91dCBtb2RpZnlpbmcgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBjaGVjayBmb3Igd3JpdGViYWNrIHRocm90dGxpbmcgbGF0ZW5jeSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBgd2J0X2xhdF91c2VjYCBpbiBzeXNmcyBpcyBhbHRlcmVkLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB3YnRfbGF0X3VzZWNgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBzeXNmcyBmaWxlLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIGJlY2F1c2UgdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGhvdyB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlcyB0aHJvdHRsaW5nIGNoYW5nZXMgaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSwgc28gdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3IgaXMgcGFyYW1vdW50LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV93Yl9sYXRfc3RvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXN5c2ZzLmM9NjkzPXN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zaG93KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjaGFyICpwYWdlKVxuLS1cbmJsb2NrL2Jsay1zeXNmcy5jLTcxNC1cbmJsb2NrL2Jsay1zeXNmcy5jOjcxNTpzdGF0aWMgc3NpemVfdCBxdWV1ZV93Yl9sYXRfc3RvcmUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IGNoYXIgKnBhZ2UsXG5ibG9jay9ibGstc3lzZnMuYy03MTYtXHRcdFx0XHQgIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGVsdmluZyBpbnRvIFN5c2ZzIEF0dHJpYnV0ZSBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBpbiB0YWNrbGluZyB0aGlzIGlzIHRvIGp1bXAgaW50byB0aGUgc3lzZnMgYXR0cmlidXRlIGRlZmluaXRpb24gaXRzZWxmLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnksIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMsIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSB3b3JraW5nIGZyb20gYSBzb2xpZCwgYWNjdXJhdGUgZm91bmRhdGlvbi4gTm8gcG9pbnQgaW4gc3Bpbm5pbmcgbXkgd2hlZWxzIG9uIHNvbWV0aGluZyBJICp0aGluayogSSBrbm93LCB3aGVuIGEgcXVpY2sgY2hlY2sgY2FuIHNhdmUgYSB0b24gb2YgdGltZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIHNheXM7IG1heWJlIHRoZXJlJiMzOTtzIGEgcGFydGljdWxhciBudWFuY2UgaGVyZSB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmcgb3Igc29tZXRoaW5nIGluIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0IEkgaGFkbiYjMzk7dCBjb25zaWRlcmVkLiBUaW1lIHRvIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcyBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfd2JfbGF0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zeXNmcy5jPTY4MD1zdGF0aWMgc3NpemVfdCBxdWV1ZV92YXJfc3RvcmU2NChzNjQgKnZhciwgY29uc3QgY2hhciAqcGFnZSlcbi0tXG5ibG9jay9ibGstc3lzZnMuYy02OTItXG5ibG9jay9ibGstc3lzZnMuYzo2OTM6c3RhdGljIHNzaXplX3QgcXVldWVfd2JfbGF0X3Nob3coc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNoYXIgKnBhZ2UpXG5ibG9jay9ibGstc3lzZnMuYy02OTQte1xuLS1cbmJsb2NrL2Jsay1zeXNmcy5jLTcxNC1cbmJsb2NrL2Jsay1zeXNmcy5jOjcxNTpzdGF0aWMgc3NpemVfdCBxdWV1ZV93Yl9sYXRfc3RvcmUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IGNoYXIgKnBhZ2UsXG5ibG9jay9ibGstc3lzZnMuYy03MTYtXHRcdFx0XHQgIHNpemVfdCBjb3VudClcbi0tXG5ibG9jay9ibGstc3lzZnMuYy03MzAtXG5ibG9jay9ibGstc3lzZnMuYzo3MzE6UVVFVUVfUldfRU5UUlkocXVldWVfd2JfbGF0LCBcJiMzNDt3YnRfbGF0X3VzZWNcJiMzNDspO1xuYmxvY2svYmxrLXN5c2ZzLmMtNzMyLSNlbmRpZlxuLS1cbmJsb2NrL2Jsay1zeXNmcy5jPTc5NT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3QgYmxrX21xX3F1ZXVlX2F0dHJzW10gPSB7XG4tLVxuYmxvY2svYmxrLXN5c2ZzLmMtODAzLSNpZmRlZiBDT05GSUdfQkxLX1dCVFxuYmxvY2svYmxrLXN5c2ZzLmM6ODA0Olx0XHUwMDI2cXVldWVfd2JfbGF0X2VudHJ5LmF0dHIsXG5ibG9jay9ibGstc3lzZnMuYy04MDUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTQKCQkJCQkJCW91dHB1dDogMTEyCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBXcml0ZWJhY2sgTGF0ZW5jeSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYHdidF9sYXRfdXNlY2AgaGVyZS4gR290IGl0LiBUaGlzIGNvbm5lY3RzIGRpcmVjdGx5IHRvIHRoZSBgQkxLX1dCVGAgY29uZmlndXJhdGlvbnMuIE15IGZvY3VzIGlzIG9uIHRoZSBzeW1ib2xzIGB3YnRfc2V0X2xhdGAgYW5kIGBxdWV1ZV93Yl9sYXRfc3RvcmVgLiBHb29kIG5ld3MsIHRoZSBzeXN0ZW0gZmxhZ2dlZCB0aGlzIGFzIGBXb3J0aEZ1enppbmdgLCB3aGljaCBtZWFucyBpdCBjb3VsZCBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4KCkxldCBtZSBxdWlja2x5IGNvbmZpcm0gYSBodW5jaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgd2J0X2xhdF9jaGFuZ2VkYCBpcyBzdGF0aWMg4oCTIHllcywgcGVyZmVjdCwgaXQmIzM5O3Mgc3RhdGljLiBUaGF0IG1lYW5zIHRoZSBlbnRyeSBwb2ludCBpcyBsaWtlbHkgYHdidF9zZXRfbGF0YCwgdGhlIGV4cG9ydGVkLCBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FsbHMgaXQuIFRoaXMgZ2l2ZXMgbWUgYSBkZWZpbmVkIHBvaW50IGZvciBpbnRlcmFjdGlvbi4KCk5vdywgSSYjMzk7bGwgc2V0IHRoZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcyBhY2NvcmRpbmdseS4gVGhhdCYjMzk7cyB0aGUgaW1wb3J0YW50IHBpZWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX1dCVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3didF9zZXRfbGF0JiMzNDssCiAgICAmIzM0O3F1ZXVlX3diX2xhdF9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNoZWNraW5nIGlmIHRoZSB3cml0ZWJhY2sgdGhyb3R0bGluZyBsYXRlbmN5IGhhcyBjaGFuZ2VkIHdoZW4gdXBkYXRlZCB2aWEgc3lzZnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgYmxvY2sgbGF5ZXImIzM5O3Mgd3JpdGViYWNrIHRocm90dGxpbmcgZmVhdHVyZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIHRoZSBgd2J0X2xhdF91c2VjYCBzeXNmcyBmaWxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfV0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d2J0X3NldF9sYXQmIzM0OywKICAgICYjMzQ7cXVldWVfd2JfbGF0X3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY2hlY2tpbmcgaWYgdGhlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGxhdGVuY3kgaGFzIGNoYW5nZWQgd2hlbiB1cGRhdGVkIHZpYSBzeXNmcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBsYXllciYjMzk7cyB3cml0ZWJhY2sgdGhyb3R0bGluZyBmZWF0dXJlIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHdyaXRpbmcgdG8gdGhlIGB3YnRfbGF0X3VzZWNgIHN5c2ZzIGZpbGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxNzozMS4xOTI3OTA4NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk2Mzc1MDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfV0JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2J0X3NldF9sYXRcIixcbiAgICBcInF1ZXVlX3diX2xhdF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY2hlY2tpbmcgaWYgdGhlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGxhdGVuY3kgaGFzIGNoYW5nZWQgd2hlbiB1cGRhdGVkIHZpYSBzeXNmcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBsYXllcidzIHdyaXRlYmFjayB0aHJvdHRsaW5nIGZlYXR1cmUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byB0aGUgYHdidF9sYXRfdXNlY2Agc3lzZnMgZmlsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTc6MzEuMTkyODA0ODY4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzc2NDkyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YzcxNTFiNjZmYmY3YjBmZGUyYTMzYTRhZDZjMWYyOTRhMjI5Mzg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDE3IDE2OjE3OjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay13YnQuYyBiL2Jsb2NrL2Jsay13YnQuY1xcbmluZGV4IDk1M2Q0MDBmZDAxMzdiLi40ZjEyYTA2NDI4NmVmZiAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstd2J0LmNcXG4rKysgYi9ibG9jay9ibGstd2J0LmNcXG5AQCAtODEzLDcgKzgxMywxNCBAQCBzdGF0aWMgdm9pZCB3YnRfcXVldWVfZGVwdGhfY2hhbmdlZChzdHJ1Y3QgcnFfcW9zICpycW9zKVxcbiBcXHR3YnRfdXBkYXRlX2xpbWl0cyhSUVdCKHJxb3MpKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgd2J0X3NldF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbClcXG4rLypcXG4rICogUmV0dXJuIHRydWUgaWYgd3JpdGluZyBAdmFsIHdvdWxkIGNoYW5nZSB0aGUgV0JUIHN0YXRlOlxcbisgKiAxKSBAdmFsIGRpZmZlcnMgZnJvbSB0aGUgc3RvcmVkIG1pbl9sYXRfbnNlYywgb3JcXG4rICogMikgQHZhbCBtYXRjaGVzLCBidXQgZW5hYmxlX3N0YXRlIGlzIG5vdCB0aGUgY29ycmVzcG9uZGluZyBtYW51YWwgc3RhdGVcXG4rICogICAgKFdCVF9TVEFURV9PTl9NQU5VQUwgZm9yIG5vbi16ZXJvIEB2YWwsIFdCVF9TVEFURV9PRkZfTUFOVUFMIGZvciAwKSxcXG4rICogICAgc28gdGhlIHdyaXRlIHN0aWxsIGhhcyB0byB1cGRhdGUgZW5hYmxlX3N0YXRlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgd2J0X2xhdF9jaGFuZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1NjQgdmFsKVxcbiB7XFxuIFxcdHN0cnVjdCBycV9xb3MgKnJxb3MgPSB3YnRfcnFfcW9zKHEpO1xcbiBcXHRzdHJ1Y3QgcnFfd2IgKnJ3YjtcXG5AQCAtODI1LDcgKzgzMiw4IEBAIHN0YXRpYyBib29sIHdidF9zZXRfbGF0X2NoYW5nZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHU2NCB2YWwpXFxuIFxcdGlmIChyd2ItXFx1MDAzZW1pbl9sYXRfbnNlYyAhPSB2YWwpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0cmV0dXJuIHJ3Yl9lbmFibGVkKHJ3YikgIT0gISF2YWw7XFxuK1xcdHJldHVybiByd2ItXFx1MDAzZWVuYWJsZV9zdGF0ZSAhPVxcbitcXHQgICAgICAgKHZhbCA/IFdCVF9TVEFURV9PTl9NQU5VQUwgOiBXQlRfU1RBVEVfT0ZGX01BTlVBTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHdidF9leGl0KHN0cnVjdCBycV9xb3MgKnJxb3MpXFxuQEAgLTEwMjEsNyArMTAyOSw3IEBAIGludCB3YnRfc2V0X2xhdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgczY0IHZhbClcXG4gXFx0XFx0dmFsICo9IDEwMDBVTEw7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VycW9zX3N0YXRlX211dGV4KTtcXG4tXFx0aWYgKCF3YnRfc2V0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHtcXG4rXFx0aWYgKCF3YnRfbGF0X2NoYW5nZWQocSwgdmFsKSkge1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRpc2stXFx1MDAzZXJxb3Nfc3RhdGVfbXV0ZXgpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxNzozMS42MzExODEzNzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NTI1MzQ3NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19XQlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3YnRfc2V0X2xhdFwiLFxuICAgIFwicXVldWVfd2JfbGF0X3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjaGVja2luZyBpZiB0aGUgd3JpdGViYWNrIHRocm90dGxpbmcgbGF0ZW5jeSBoYXMgY2hhbmdlZCB3aGVuIHVwZGF0ZWQgdmlhIHN5c2ZzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGJsb2NrIGxheWVyJ3Mgd3JpdGViYWNrIHRocm90dGxpbmcgZmVhdHVyZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB3cml0aW5nIHRvIHRoZSBgd2J0X2xhdF91c2VjYCBzeXNmcyBmaWxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjNzE1MWI2NmZiZjdiMGZkZTJhMzNhNGFkNmMxZjI5NGEyMjkzODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxNyAxNjoxNzozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay13YnQuYyBiL2Jsb2NrL2Jsay13YnQuY1xuaW5kZXggOTUzZDQwMGZkMDEzN2IuLjRmMTJhMDY0Mjg2ZWZmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLXdidC5jXG4rKysgYi9ibG9jay9ibGstd2J0LmNcbkBAIC04MTMsNyArODEzLDE0IEBAIHN0YXRpYyB2b2lkIHdidF9xdWV1ZV9kZXB0aF9jaGFuZ2VkKHN0cnVjdCBycV9xb3MgKnJxb3MpXG4gXHR3YnRfdXBkYXRlX2xpbWl0cyhSUVdCKHJxb3MpKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgd2J0X3NldF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbClcbisvKlxuKyAqIFJldHVybiB0cnVlIGlmIHdyaXRpbmcgQHZhbCB3b3VsZCBjaGFuZ2UgdGhlIFdCVCBzdGF0ZTpcbisgKiAxKSBAdmFsIGRpZmZlcnMgZnJvbSB0aGUgc3RvcmVkIG1pbl9sYXRfbnNlYywgb3JcbisgKiAyKSBAdmFsIG1hdGNoZXMsIGJ1dCBlbmFibGVfc3RhdGUgaXMgbm90IHRoZSBjb3JyZXNwb25kaW5nIG1hbnVhbCBzdGF0ZVxuKyAqICAgIChXQlRfU1RBVEVfT05fTUFOVUFMIGZvciBub24temVybyBAdmFsLCBXQlRfU1RBVEVfT0ZGX01BTlVBTCBmb3IgMCksXG4rICogICAgc28gdGhlIHdyaXRlIHN0aWxsIGhhcyB0byB1cGRhdGUgZW5hYmxlX3N0YXRlLlxuKyAqL1xuK3N0YXRpYyBib29sIHdidF9sYXRfY2hhbmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdTY0IHZhbClcbiB7XG4gXHRzdHJ1Y3QgcnFfcW9zICpycW9zID0gd2J0X3JxX3FvcyhxKTtcbiBcdHN0cnVjdCBycV93YiAqcndiO1xuQEAgLTgyNSw3ICs4MzIsOCBAQCBzdGF0aWMgYm9vbCB3YnRfc2V0X2xhdF9jaGFuZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1NjQgdmFsKVxuIFx0aWYgKHJ3Yi1cdTAwM2VtaW5fbGF0X25zZWMgIT0gdmFsKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHJldHVybiByd2JfZW5hYmxlZChyd2IpICE9ICEhdmFsO1xuK1x0cmV0dXJuIHJ3Yi1cdTAwM2VlbmFibGVfc3RhdGUgIT1cbitcdCAgICAgICAodmFsID8gV0JUX1NUQVRFX09OX01BTlVBTCA6IFdCVF9TVEFURV9PRkZfTUFOVUFMKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgd2J0X2V4aXQoc3RydWN0IHJxX3FvcyAqcnFvcylcbkBAIC0xMDIxLDcgKzEwMjksNyBAQCBpbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpXG4gXHRcdHZhbCAqPSAxMDAwVUxMO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZXJxb3Nfc3RhdGVfbXV0ZXgpO1xuLVx0aWYgKCF3YnRfc2V0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHtcbitcdGlmICghd2J0X2xhdF9jaGFuZ2VkKHEsIHZhbCkpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlcnFvc19zdGF0ZV9tdXRleCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTc6MzEuNjMxMTgyNjk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUwNjc4MDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdCVCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9ibGstd2J0LmNgLiBJdCdzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCByZW5hbWUsIGB3YnRfc2V0X2xhdF9jaGFuZ2VkYCB0byBgd2J0X2xhdF9jaGFuZ2VkYCwgd2hpY2ggaXMgZmluZSwgYW5kIEkgY2FuIHNlZSB3aGF0IHRoZXkncmUgZG9pbmcgd2l0aCB0aGUgbG9naWMgaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgbWFpbiBjb25jZXJuIGlzIGRldGVybWluaW5nIGlmIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgd3JpdGViYWNrIHRocm90dGxpbmcgKFdCVCkgd2lsbCBhY3R1YWxseSAqY2hhbmdlKiB0aGUgY3VycmVudCBzdGF0ZS4gVGhlIG9yaWdpbmFsIGNoZWNrLCBgcmV0dXJuIHJ3Yl9lbmFibGVkKHJ3YikgIT0gISF2YWw7YCwgd2FzIGEgYml0IGNsdW5reSwgYnV0IGZ1bmN0aW9uYWwuIE5vdyB0aGV5J3ZlIHJlcGxhY2VkIGl0IHdpdGggYHJldHVybiByd2ItXHUwMDNlZW5hYmxlX3N0YXRlICE9ICh2YWwgPyBXQlRfU1RBVEVfT05fTUFOVUFMIDogV0JUX1NUQVRFX09GRl9NQU5VQUwpO2AuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3JlIG5vdyBjb21wYXJpbmcgdGhlIGN1cnJlbnQgYGVuYWJsZV9zdGF0ZWAgb2YgdGhlIGByd2JgIHN0cnVjdCBhZ2FpbnN0IHRoZSAqaW50ZW5kZWQqIHN0YXRlIGJhc2VkIG9uIHRoZSBpbnB1dCBgdmFsYC4gYHZhbGAgc2VlbXMgdG8gYmUgYSBib29sZWFuLCB3aGljaCBpcyB0aGVuIG1hcHBlZCB0byB0aGUgYFdCVF9TVEFURV9PTl9NQU5VQUxgIGFuZCBgV0JUX1NUQVRFX09GRl9NQU5VQUxgIGVudW0gdmFsdWVzLCBpbmRpY2F0aW5nIHdoZXRoZXIgd2UncmUgbWFudWFsbHkgdHVybmluZyBXQlQgb24gb3Igb2ZmLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gYGJsb2NrL2Jsay13YnQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBrbm93IHdoZXJlIHRoaXMgYHJ3YmAgc3RydWN0dXJlIGNvbWVzIGZyb20sIHdoYXQgaXRzIGZpZWxkcyBtZWFuLCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBvciBtZWNoYW5pc21zIGFyZSBpbiBwbGF5IGFyb3VuZCBXQlQuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgV0JUIG1hbmFnZW1lbnQgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoaXMgY2hhbmdlIG1pZ2h0IGhhdmUgZm9yIGRpZmZlcmVudCBzY2VuYXJpb3MuIFVuZGVyc3RhbmRpbmcgdGhlIHdpZGVyIGNvbnRleHQgaXMga2V5IGJlZm9yZSBJJ2xsIGJlIGNvbWZvcnRhYmxlIHdpdGggdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE3OjM5LjEzNzk2NDc2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc1Mzk0OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndidF9sYXRfY2hhbmdlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstd2J0LmM9ODEwPXN0YXRpYyB2b2lkIHdidF9xdWV1ZV9kZXB0aF9jaGFuZ2VkKHN0cnVjdCBycV9xb3MgKnJxb3MpXFxuLS1cXG5ibG9jay9ibGstd2J0LmMtODIyLSAqL1xcbmJsb2NrL2Jsay13YnQuYzo4MjM6c3RhdGljIGJvb2wgd2J0X2xhdF9jaGFuZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1NjQgdmFsKVxcbmJsb2NrL2Jsay13YnQuYy04MjQte1xcbi0tXFxuYmxvY2svYmxrLXdidC5jPTk5OD1pbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpXFxuLS1cXG5ibG9jay9ibGstd2J0LmMtMTAzMS1cXHRtdXRleF9sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VycW9zX3N0YXRlX211dGV4KTtcXG5ibG9jay9ibGstd2J0LmM6MTAzMjpcXHRpZiAoIXdidF9sYXRfY2hhbmdlZChxLCB2YWwpKSB7XFxuYmxvY2svYmxrLXdidC5jLTEwMzMtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VycW9zX3N0YXRlX211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTc6NDEuMjEzMzY5NTM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyMDUyODI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJsb2NrIFdyaXRlYmFjayBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGVuYWJsaW5nIGBibGstd2J0LmNgLiBJdCdzIGEga2V5IGNvbXBvbmVudCwgc28gdW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgZm9yLCBzYXksIHR1bmluZyB3cml0ZWJhY2sgcGVyZm9ybWFuY2UsIGRlYnVnZ2luZyBsYXRlbmN5IGlzc3Vlcywgb3IganVzdCBnZW5lcmFsbHkgZ3Jhc3BpbmcgaG93IHRoZSBibG9jayBsYXllciBpcyBiZWhhdmluZy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBpdHMgcHJlc2VuY2UgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQncyBwdWxsaW5nIGl0IGluLlxuXG5JJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGhpZXJhcmNoeS4gVXN1YWxseSwgeW91IGNhbiBmaW5kIGEgZ29vZCBlbnRyeSBwb2ludCB0aHJvdWdoIGBLY29uZmlnYCBmaWxlcyBpbiByZWxldmFudCBkaXJlY3RvcmllcywgbGlrZSB0aGUgYmxvY2sgbGF5ZXIncyByb290IG9yIHRoZSBkcml2ZXJzL2Jsb2NrIGRpcmVjdG9yeS4gSSdsbCBtZW50YWxseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgZGlyZWN0b3JpZXMsIHNjYW5uaW5nIGZvciBsaWtlbHkgY2FuZGlkYXRlcyDigJMgcG90ZW50aWFsbHkgYW55IGBLY29uZmlnYCBmaWxlIHRvdWNoaW5nIGJsb2NrIGRldmljZSBmZWF0dXJlcyBvciBnZW5lcmljIGJsb2NrIGRldmljZSBzdXBwb3J0LiBJZiBJJ20gbHVja3ksIGEgcXVpY2sgZ3JlcCBvciBgZmluZCAuIC1uYW1lIFwiS2NvbmZpZ1wiIHwgeGFyZ3MgZ3JlcCBibGstd2J0LmNgIG1pZ2h0IGRvIHRoZSB0cmljaywgcHJvdmlkaW5nIHRoZSBkaXJlY3QgZGVwZW5kZW5jeS5cblxuSWYgdGhhdCdzIG5vdCBpbW1lZGlhdGVseSBmcnVpdGZ1bCwgSSdsbCBmYWxsIGJhY2sgdG8gc2VhcmNoaW5nIGZvciBzeW1ib2xzLiBJJ2QgY2hlY2sgdGhlIGtlcm5lbCdzIGJ1aWxkIG91dHB1dCBvciBwb3RlbnRpYWxseSB1c2UgYSB0b29sIGxpa2UgYGtjb25maWctdHVpYCBvciBgbWVudWNvbmZpZ2AsIHNjYW5uaW5nIGZvciBzeW1ib2xzIHJlbGF0ZWQgdG8gYmxvY2sgd3JpdGViYWNrLCBkaXJ0eSBwYWdlIGhhbmRsaW5nLCBvciBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkuIEkgbWlnaHQgbG9vayBhdCB0aGUgZGVwZW5kZW5jaWVzIG9mIGFueSByZWxhdGVkIGNvcmUgZmVhdHVyZXMuXG5cblRoZW4sIG9uY2UgSSBmaW5kIHRoZSBjb25maWcgb3B0aW9uLCBJJ2xsIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IGl0cyBpbXBsaWNhdGlvbnMuIElzIGl0IGEgY29yZSBmZWF0dXJlIG9mIHRoZSBibG9jayBsYXllciwgb3IgaXMgaXQgdGllZCB0byBhIHNwZWNpZmljIHN0b3JhZ2UgZHJpdmVyIG9yIGZlYXR1cmUgc2V0PyBJZiBpdCdzIGEgZHJpdmVyLXNwZWNpZmljIG9wdGlvbiwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGF0IGRyaXZlciB0byBwcmVkaWN0IGl0cyBiZWhhdmlvci4gSWYgaXQncyBtb3JlIGdlbmVyaWMsIEknbGwgY29uc2lkZXIgaG93IGl0IGludGVncmF0ZXMgd2l0aCBvdGhlciBvcHRpb25zLCBzdWNoIGFzIHRoZSB3cml0ZWJhY2sgaW50ZXJ2YWwgb3IgZGlydHkgcGFnZSB0aHJlc2hvbGRzLiBJIG5lZWQgdG8gcXVpY2tseSB2aXN1YWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UgaXQgZmFsbHMgaW50bywgZXNwZWNpYWxseSBnaXZlbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCdzIGJsb2NrIGxheWVyIGFyY2hpdGVjdHVyZS4gSSBrbm93IHRoZSBsaWtlbHkgZGVwZW5kZW5jaWVzLCBzbyB3aGF0IGVsc2UgZG9lcyB0aGlzIGRlcGVuZCBvbiwgYW5kIHdoYXQgZG9lcyB0aGlzIGVuYWJsZSwgYW5kIGhvdyBkb2VzIHRoaXMgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUga2VybmVsP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTc6NDUuOTMzODk5NzczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDY5ODk5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrLXdidC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEKVxcdCs9IGJsay16b25lZC5vXFxuYmxvY2svTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0JMS19XQlQpXFx0XFx0Kz0gYmxrLXdidC5vXFxuYmxvY2svTWFrZWZpbGUtMzUtb2JqLSQoQ09ORklHX0JMS19ERUJVR19GUylcXHQrPSBibGstbXEtZGVidWdmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE3OjQ4LjQ4MDg5NDQwMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDU1MTAyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgQkxLX1dCVCBDb25maWd1cmF0aW9uIGFuZCBMYXRlbmN5IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHdlJ3JlIHdvcmtpbmcgd2l0aCBpcyBgQkxLX1dCVGAuIEdvdCBpdC4gTm93LCB0aGUga2V5IGNoYW5nZSBpcyBpbiB0aGUgYHdidF9zZXRfbGF0YCBmdW5jdGlvbjsgaXQncyBiZWVuIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgYHdidF9sYXRfY2hhbmdlZGAuIE15IGltbWVkaWF0ZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gVG8gZG8gdGhhdCwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBXaGVyZSBpcyBgd2J0X3NldF9sYXRgIGJlaW5nIGludm9rZWQ/IEkgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSB0byBgd2J0X2xhdF9jaGFuZ2VkYC4gSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBmbG93IHRvIGZ1bGx5IGFuYWx5emUgdGhlIGNoYW5nZXMgbWFkZSBhbmQgcHJlZGljdCB0aGVpciBlZmZlY3Qgb24gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE3OjUyLjAyNjQwNjAyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkzNzc0NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndidF9zZXRfbGF0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zeXNmcy5jPTcxNT1zdGF0aWMgc3NpemVfdCBxdWV1ZV93Yl9sYXRfc3RvcmUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IGNoYXIgKnBhZ2UsXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy03MjYtXFxuYmxvY2svYmxrLXN5c2ZzLmM6NzI3OlxcdHJldCA9IHdidF9zZXRfbGF0KGRpc2ssIHZhbCk7XFxuYmxvY2svYmxrLXN5c2ZzLmMtNzI4LVxcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcXG4tLVxcbmJsb2NrL2Jsay13YnQuYz05Njg9c3RhdGljIGludCB3YnRfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IHJxX3diICpyd2IpXFxuLS1cXG5ibG9jay9ibGstd2J0LmMtOTk3LVxcbmJsb2NrL2Jsay13YnQuYzo5OTg6aW50IHdidF9zZXRfbGF0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzNjQgdmFsKVxcbmJsb2NrL2Jsay13YnQuYy05OTkte1xcbi0tXFxuYmxvY2svYmxrLXdidC5oPTEyPWJvb2wgd2J0X2Rpc2FibGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcXG5ibG9jay9ibGstd2J0Lmg6MTM6aW50IHdidF9zZXRfbGF0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzNjQgdmFsKTtcXG5ibG9jay9ibGstd2J0LmgtMTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE3OjU0LjAyMDE4NDQ1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MTI3OTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTeXNmcyBTdG9yZSBGdW5jdGlvbiBhbmQgYSBQb3RlbnRpYWwgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBwYXRoLiBJdCdzIHRyaWdnZXJlZCBmcm9tIGBxdWV1ZV93Yl9sYXRfc3RvcmVgIGluIGBibG9jay9ibGstc3lzZnMuY2AuIFJpZ2h0LCB0aGF0J3MgdGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCBtZWFuaW5nIGEgdXNlciBpbiB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggaXQgYnkgd3JpdGluZyB0byBhIHN5c2ZzIGZpbGUuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGEgZGlyZWN0IGludGVyZmFjZS5cblxuVGhlIHBhdGNoIGl0c2VsZiBhZGRyZXNzZXMgYSBidWcgd2l0aGluIGB3YnRfc2V0X2xhdF9jaGFuZ2VkYC4gSXQgc2VlbXMgdGhlIGlzc3VlIHdhcyBhIGxhY2sgb2YgcHJvcGVyIGNoZWNraW5nIG9mIGBlbmFibGVfc3RhdGVgIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFRoaXMgdGVsbHMgbWUgaXQgd2Fzbid0IGhhbmRsaW5nIHRoYXQgc3RhdGUgcHJvcGVybHkuIE1ha2VzIHNlbnNlLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgdGhlIGJ1ZyBpcyBjbGVhcmx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZTsgaXQgaXMgZGVmaW5pdGVseSBhIHZhbGlkIGNvZGUgcGF0aC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgaXMgc2lnbmlmaWNhbnQgaW4gdGhhdCB0aGUgZml4IG1hdHRlcnMhIEkgc2VlIHRoYXQgYEJMS19XQlRgIGlzIHRoZSBjb25maWcgaGVyZS5cblxuSSdkIGJldHRlciBxdWlja2x5IGNvbmZpcm0gdGhhdCBgQkxLX1dCVGAgaXMgdGhlIG9ubHkgY29uZmlnIGhlcmUuIEp1c3QgdG8gYmUgc3VyZS4gSSB3aWxsIGxvb2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGFsc28gaW5jbHVkZXMgaXQuIFRoZSBmb2NhbCBzeW1ib2wgc2VlbXMgdG8gYmUgYHdidF9zZXRfbGF0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxNzo1OC42ODE0NjU5OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTk3MTI4NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19XQlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0xMDY9Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbi0tXFxuYmxvY2svS2NvbmZpZy0xMTctXFxuYmxvY2svS2NvbmZpZzoxMTg6Y29uZmlnIEJMS19XQlRcXG5ibG9jay9LY29uZmlnLTExOS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHdyaXRlYmFjayB0aHJvdHRsaW5nXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMjYtXFxuYmxvY2svS2NvbmZpZzoxMjc6Y29uZmlnIEJMS19XQlRfTVFcXG5ibG9jay9LY29uZmlnLTEyOC1cXHRib29sIFxcXCJFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6MDAuNTgxMTgyOTEzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDU5OTE5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgV3JpdGViYWNrIExhdGVuY3kgaW4gdGhlIEJsb2NrIExheWVyKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSdtIHdvcmtpbmcgd2l0aCByaWdodCBub3cgaXMgYEJMS19XQlRgLiBHb3QgaXQuIE15IG1haW4gZm9jdXMgaXMgb24gc3ltYm9scyByZWxhdGVkIHRvIHdyaXRlYmFjayBsYXRlbmN5LCBzcGVjaWZpY2FsbHkgYHdidF9zZXRfbGF0YCBhbmQgYHF1ZXVlX3diX2xhdF9zdG9yZWAuIExldCdzIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYHF1ZXVlX3diX2xhdF9zdG9yZWAuIEkga25vdyB0aGF0IGZ1bmN0aW9uIHNob3VsZCBiZSBpbiB0aGUgYmxvY2sgbGF5ZXIgc29tZXdoZXJlLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIGl0IGluIGBibG9jay9ibGstc3lzZnMuY2AuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxODowNC4yMjcxNzY1OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDE0NDg4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfd2JfbGF0X3N0b3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zeXNmcy5jPTY5Mz1zdGF0aWMgc3NpemVfdCBxdWV1ZV93Yl9sYXRfc2hvdyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY2hhciAqcGFnZSlcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jLTcxNC1cXG5ibG9jay9ibGstc3lzZnMuYzo3MTU6c3RhdGljIHNzaXplX3QgcXVldWVfd2JfbGF0X3N0b3JlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBjaGFyICpwYWdlLFxcbmJsb2NrL2Jsay1zeXNmcy5jLTcxNi1cXHRcXHRcXHRcXHQgIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6MDYuMDY4NjI5ODY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTUyOTIwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMYXRlbmN5IFN0b3JlIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcXVldWVfd2JfbGF0X3N0b3JlYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHkgYSBmbGFnIGdvZXMgdXAuIFRoaXMgaXMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgU3l6a2FsbGVyICptaWdodCogbm90IGJlIGFibGUgdG8gZnV6eiBpdCBkaXJlY3RseSB1bmxlc3MgaXQgaGFzIHNwZWNpZmljIGtub3dsZWRnZSBvZiB0aGlzIHBhcnRpY3VsYXIgc3lzZnMgZmlsZS4gU3l6a2FsbGVyICpjYW4qIGZ1enogc3lzZnMgZmlsZXMsIGJ1dCBpdCBuZWVkcyB0byBrbm93IGFib3V0IHRoZW0sIHJpZ2h0PyBJdCdzIG5vdCBtYWdpYy4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIHNlZW1zIHRvIGJlIGB3YnRfc2V0X2xhdGAsIHNvICp0aGF0J3MqIHRoZSBmdW5jdGlvbiBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5GaXJzdCBzdGVwOiBsZXQncyBzZWUgd2hlcmUgZWxzZSBgd2J0X3NldF9sYXRgIGlzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaCB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4gSWRlbnRpZnlpbmcgYWxsIHRoZSBjYWxsIHNpdGVzIHdpbGwgc2hvdyBtZSBpZiBpdCdzIHJlYWNoYWJsZSBmcm9tIG90aGVyIGZ1enplciB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTczLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6MDkuNTgzOTIzNTU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2Mzk4OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndidF9zZXRfbGF0XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXN5c2ZzLmM9NzE1PXN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zdG9yZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3QgY2hhciAqcGFnZSxcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jLTcyNi1cXG5ibG9jay9ibGstc3lzZnMuYzo3Mjc6XFx0cmV0ID0gd2J0X3NldF9sYXQoZGlzaywgdmFsKTtcXG5ibG9jay9ibGstc3lzZnMuYy03MjgtXFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcbi0tXFxuYmxvY2svYmxrLXdidC5jPTk2OD1zdGF0aWMgaW50IHdidF9pbml0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgcnFfd2IgKnJ3YilcXG4tLVxcbmJsb2NrL2Jsay13YnQuYy05OTctXFxuYmxvY2svYmxrLXdidC5jOjk5ODppbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpXFxuYmxvY2svYmxrLXdidC5jLTk5OS17XFxuLS1cXG5ibG9jay9ibGstd2J0Lmg9MTI9Ym9vbCB3YnRfZGlzYWJsZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xcbmJsb2NrL2Jsay13YnQuaDoxMzppbnQgd2J0X3NldF9sYXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHM2NCB2YWwpO1xcbmJsb2NrL2Jsay13YnQuaC0xNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6MTEuODgwMzI3MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MDk0NDA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOlxuXG4qKkZvY3VzaW5nIG9uIFdyaXRlIEJ1ZmZlciBMYXRlbmN5KipcblxuUmlnaHQsIHRoZSBvbmx5IGZ1bmN0aW9uIG1lbnRpb25lZCBpcyBgcXVldWVfd2JfbGF0X3N0b3JlYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBgd2J0X3NldF9sYXRgIGFzIGEgcHJpbWUgcG9pbnQgb2YgaW50ZXJlc3QuIEl0J3MgdGhlIGNlbnRyYWwgc3ltYm9sIHRvIGhvbmUgaW4gb24sIGFzIGl0IHNlZW1zIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIHRoZSB3cml0ZSBidWZmZXIgbGF0ZW5jeSBzdG9yYWdlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX1dCVGAuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtYWNybywgb3IgdGhpcyBwaWVjZSBvZiB0aGUgc3lzdGVtLCByZWxpZXMgb24uIFRoYXQgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBjb250ZXh0IGFuZCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgaW52ZXN0aWdhdGlvbi4gS25vd2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSBpZGVudGlmeSB0aGUgY2FzY2FkaW5nIGVmZmVjdHMgb2YgY2hhbmdlcyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgcmVsYXRlZCB0byB3cml0ZSBidWZmZXIgbGF0ZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE4OjE0Ljk3MTI3MzQxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwODUwMDUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipCTEtfV0JUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEyOS1cXHRkZWZhdWx0IHlcXG5ibG9jay9LY29uZmlnOjEzMDpcXHRkZXBlbmRzIG9uIEJMS19XQlRcXG5ibG9jay9LY29uZmlnLTEzMS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE4OjE3LjU3OTc3ODY3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDEzNzcyMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgQkxLX1dCVGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJMS19XQlRgLiBMZXQncyBhc3N1bWUgdGhlIHVzZXIga25vd3MgdGhhdCBpdCByZWxhdGVzIHRvIGEgYmxvY2sgZGV2aWNlLCBhbmQgdGhhdCBpdCdzIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgc3RhYmlsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGllY2Ugb2YgY29kZSByZWxpZXMgb24sIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBpbnRlcmFjdCB3aXRoIGl0LCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBvciBpc3N1ZXMgbWlnaHQgYmUuIFRoaXMgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgY2hlY2tpbmcgaGVhZGVyIGZpbGVzLCBsb29raW5nIGZvciBjYWxscyB0byBhbmQgZnJvbSBgQkxLX1dCVGAsIGFuZCB0cmFjaW5nIGRhdGEgZmxvd3MuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHN1c3BlY3RzOiBhbnkgcmVsYXRlZCBzdHJ1Y3R1cmVzLCBhbmQgZnVuY3Rpb25zLCBhbmQgdGhlbiB3b3JrIG15IHdheSBvdXR3YXJkLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSB1cHN0cmVhbSBjb21wb25lbnRzIGRlcGVuZCBvbiB0aGlzLCBvciBpZiBpdCBwcm92aWRlcyBhIHB1YmxpYyBBUEkuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxODoyMC45OTM1NTI0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MjIxOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfV0JUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0xMDY9Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xcbi0tXFxuYmxvY2svS2NvbmZpZy0xMTctXFxuYmxvY2svS2NvbmZpZzoxMTg6Y29uZmlnIEJMS19XQlRcXG5ibG9jay9LY29uZmlnLTExOS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHdyaXRlYmFjayB0aHJvdHRsaW5nXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMjYtXFxuYmxvY2svS2NvbmZpZzoxMjc6Y29uZmlnIEJMS19XQlRfTVFcXG5ibG9jay9LY29uZmlnLTEyOC1cXHRib29sIFxcXCJFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6MjEuMjE3NzgwOTk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTYzMjIyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBhc3BlY3Qgb2YgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24gd29ya3MuIE15IG1lbnRhbCBtYXAgcG9pbnRzIG1lIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGJsb2NrL2AgZGlyZWN0b3J5LCBuYXR1cmFsbHkuIExpbmUgMTE4IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyBob3BlZnVsbHksIGl0IGNvbnRhaW5zIHRoZSByZWxldmFudCBlbnRyeSBvciBhbiBpbmRpcmVjdCBsaW5rIHRvIGl0LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBkZWZpbml0aW9uLCBtYXliZSBhIGRlcGVuZGVuY3ksIG9yIHBlcmhhcHMgYSBzdWJtZW51IHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGZlYXR1cmUgSSdtIGludGVyZXN0ZWQgaW4uIEknbGwgYmUgbG9va2luZyBmb3Iga2V5d29yZHMgYW5kIHBhdHRlcm5zIHRoYXQgSSdtIGZhbWlsaWFyIHdpdGgg4oCTIGBjb25maWdgLCBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBgYm9vbGAsIGB0cmlzdGF0ZWAsIGBoZWxwYCBhbmQgdGhlaXIgY29udGV4dHMgd2lsbCBpbW1lZGlhdGVseSBncmFiIG15IGF0dGVudGlvbi4gRnJvbSB0aGF0IHN0YXJ0aW5nIHBvaW50LCBJIGFudGljaXBhdGUgSSBjYW4gdHJhY2UgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgb3B0aW9ucyBwcmV0dHkgcXVpY2tseSwgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi4gYW5kIGhvcGUgaXQncyB3ZWxsLWNvbW1lbnRlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE4OjI0LjgzNDEwNTA0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRcXHRoZWxwXFxuIDExMTpcXHRcXHRCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0LiBJdCBjYW4gYmUgdXNlZCB0byBsaW1pdFxcbiAxMTI6XFx0XFx0dGhlIElPIHJhdGUgdG8gYSBkZXZpY2UuIElPIHJhdGUgcG9saWNpZXMgYXJlIHBlciBjZ3JvdXAgYW5kXFxuIDExMzpcXHRcXHRvbmUgbmVlZHMgdG8gbW91bnQgYW5kIHVzZSBibGtpbyBjZ3JvdXAgY29udHJvbGxlciBmb3IgY3JlYXRpbmdcXG4gMTE0OlxcdFxcdGNncm91cHMgYW5kIHNwZWNpZnlpbmcgcGVyIGRldmljZSBJTyByYXRlIHBvbGljaWVzLlxcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvYmxraW8tY29udHJvbGxlci5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuIDExNzpcXHRcXG4gMTE4OlxcdGNvbmZpZyBCTEtfV0JUXFxuIDExOTpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHdyaXRlYmFjayB0aHJvdHRsaW5nXFxcIlxcbiAxMjA6XFx0XFx0aGVscFxcbiAxMjE6XFx0XFx0RW5hYmxpbmcgdGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYmxvY2sgbGF5ZXIgdG8gdGhyb3R0bGUgYnVmZmVyZWRcXG4gMTIyOlxcdFxcdGJhY2tncm91bmQgd3JpdGViYWNrIGZyb20gdGhlIFZNLCBtYWtpbmcgaXQgbW9yZSBzbW9vdGggYW5kIGhhdmluZ1xcbiAxMjM6XFx0XFx0bGVzcyBpbXBhY3Qgb24gZm9yZWdyb3VuZCBvcGVyYXRpb25zLiBUaGUgdGhyb3R0bGluZyBpcyBkb25lXFxuIDEyNDpcXHRcXHRkeW5hbWljYWxseSBvbiBhbiBhbGdvcml0aG0gbG9vc2VseSBiYXNlZCBvbiBDb0RlbCwgZmFjdG9yaW5nIGluXFxuIDEyNTpcXHRcXHR0aGUgcmVhbHRpbWUgcGVyZm9ybWFuY2Ugb2YgdGhlIGRpc2suXFxuIDEyNjpcXHRcXG4gMTI3OlxcdGNvbmZpZyBCTEtfV0JUX01RXFxuIDEyODpcXHRcXHRib29sIFxcXCJFbmFibGUgd3JpdGViYWNrIHRocm90dGxpbmcgYnkgZGVmYXVsdFxcXCJcXG4gMTI5OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxODoyNC44MzQxODE0MTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5NjIxNzUyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBCbG9jayBMYXllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJ3QgdGllZCB0byBhbnkgcGFydGljdWxhciBkZXZpY2Ugb3Igc3Vic3lzdGVtIOKAkyBpdCdzIGFsbCBhYm91dCB0aGUgZnVuZGFtZW50YWwgYmxvY2sgbGF5ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgYEJMS19XQlRgIGlzIGVuYWJsZWQuIEl0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIHdyaXRlYmFjayB0aHJvdHRsaW5nLCBzbyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgd2J0X2xhdF9jaGFuZ2VkYCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGB3YnRfc2V0X2xhdGAuIFRoYXQgYHdidF9zZXRfbGF0YCBzeW1ib2wgaXMgcmVhbGx5IHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBMb29rcyBsaWtlIGBxdWV1ZV93Yl9sYXRfc3RvcmVgIGNvdWxkIGJlIGFub3RoZXIgY3JpdGljYWwgc3ltYm9sIHRvIGludmVzdGlnYXRlLlxuXG5UaGUgZnVuY3Rpb25hbCBpbXBhY3QgaGVyZSBpcyBhYm91dCBtb2RpZnlpbmcgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBjaGVjayBmb3Igd3JpdGViYWNrIHRocm90dGxpbmcgbGF0ZW5jeSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBgd2J0X2xhdF91c2VjYCBpbiBzeXNmcyBpcyBhbHRlcmVkLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB3YnRfbGF0X3VzZWNgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBzeXNmcyBmaWxlLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIGJlY2F1c2UgdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGhvdyB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlcyB0aHJvdHRsaW5nIGNoYW5nZXMgaW5pdGlhdGVkIGJ5IHVzZXJzcGFjZSwgc28gdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3IgaXMgcGFyYW1vdW50LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGRldmljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNjoxODozOS43OTYzNTgzMDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTc1NjE0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfd2JfbGF0X3N0b3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zeXNmcy5jPTY5Mz1zdGF0aWMgc3NpemVfdCBxdWV1ZV93Yl9sYXRfc2hvdyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY2hhciAqcGFnZSlcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jLTcxNC1cXG5ibG9jay9ibGstc3lzZnMuYzo3MTU6c3RhdGljIHNzaXplX3QgcXVldWVfd2JfbGF0X3N0b3JlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBjaGFyICpwYWdlLFxcbmJsb2NrL2Jsay1zeXNmcy5jLTcxNi1cXHRcXHRcXHRcXHQgIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6NDEuNzkzOTI0NDc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTc5ODgyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEZWx2aW5nIGludG8gU3lzZnMgQXR0cmlidXRlIERlZmluaXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaW4gdGFja2xpbmcgdGhpcyBpcyB0byBqdW1wIGludG8gdGhlIHN5c2ZzIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBjb25maXJtIG15IGFzc3VtcHRpb25zLCBhbmQgbWFrZSBzdXJlIEknbSB3b3JraW5nIGZyb20gYSBzb2xpZCwgYWNjdXJhdGUgZm91bmRhdGlvbi4gTm8gcG9pbnQgaW4gc3Bpbm5pbmcgbXkgd2hlZWxzIG9uIHNvbWV0aGluZyBJICp0aGluayogSSBrbm93LCB3aGVuIGEgcXVpY2sgY2hlY2sgY2FuIHNhdmUgYSB0b24gb2YgdGltZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gc2F5czsgbWF5YmUgdGhlcmUncyBhIHBhcnRpY3VsYXIgbnVhbmNlIGhlcmUgdGhhdCBJJ20gb3Zlcmxvb2tpbmcgb3Igc29tZXRoaW5nIGluIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0IEkgaGFkbid0IGNvbnNpZGVyZWQuIFRpbWUgdG8gZ2V0IGRvd24gdG8gdGhlIGJyYXNzIHRhY2tzIGFuZCByZWFsbHkgdW5kZXJzdGFuZCB0aGUgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzU2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTY6MTg6NDQuODkxOTE0NzcyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg4MTUxMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX3diX2xhdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstc3lzZnMuYz02ODA9c3RhdGljIHNzaXplX3QgcXVldWVfdmFyX3N0b3JlNjQoczY0ICp2YXIsIGNvbnN0IGNoYXIgKnBhZ2UpXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy02OTItXFxuYmxvY2svYmxrLXN5c2ZzLmM6NjkzOnN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zaG93KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjaGFyICpwYWdlKVxcbmJsb2NrL2Jsay1zeXNmcy5jLTY5NC17XFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy03MTQtXFxuYmxvY2svYmxrLXN5c2ZzLmM6NzE1OnN0YXRpYyBzc2l6ZV90IHF1ZXVlX3diX2xhdF9zdG9yZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgY29uc3QgY2hhciAqcGFnZSxcXG5ibG9jay9ibGstc3lzZnMuYy03MTYtXFx0XFx0XFx0XFx0ICBzaXplX3QgY291bnQpXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy03MzAtXFxuYmxvY2svYmxrLXN5c2ZzLmM6NzMxOlFVRVVFX1JXX0VOVFJZKHF1ZXVlX3diX2xhdCwgXFxcIndidF9sYXRfdXNlY1xcXCIpO1xcbmJsb2NrL2Jsay1zeXNmcy5jLTczMi0jZW5kaWZcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jPTc5NT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3QgYmxrX21xX3F1ZXVlX2F0dHJzW10gPSB7XFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy04MDMtI2lmZGVmIENPTkZJR19CTEtfV0JUXFxuYmxvY2svYmxrLXN5c2ZzLmM6ODA0OlxcdFxcdTAwMjZxdWV1ZV93Yl9sYXRfZW50cnkuYXR0cixcXG5ibG9jay9ibGstc3lzZnMuYy04MDUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE4OjQ2Ljc4MDA3MTMxNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzAwMzY2OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBXcml0ZWJhY2sgTGF0ZW5jeSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGB3YnRfbGF0X3VzZWNgIGhlcmUuIEdvdCBpdC4gVGhpcyBjb25uZWN0cyBkaXJlY3RseSB0byB0aGUgYEJMS19XQlRgIGNvbmZpZ3VyYXRpb25zLiBNeSBmb2N1cyBpcyBvbiB0aGUgc3ltYm9scyBgd2J0X3NldF9sYXRgIGFuZCBgcXVldWVfd2JfbGF0X3N0b3JlYC4gR29vZCBuZXdzLCB0aGUgc3lzdGVtIGZsYWdnZWQgdGhpcyBhcyBgV29ydGhGdXp6aW5nYCwgd2hpY2ggbWVhbnMgaXQgY291bGQgaGF2ZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMuXG5cbkxldCBtZSBxdWlja2x5IGNvbmZpcm0gYSBodW5jaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgd2J0X2xhdF9jaGFuZ2VkYCBpcyBzdGF0aWMg4oCTIHllcywgcGVyZmVjdCwgaXQncyBzdGF0aWMuIFRoYXQgbWVhbnMgdGhlIGVudHJ5IHBvaW50IGlzIGxpa2VseSBgd2J0X3NldF9sYXRgLCB0aGUgZXhwb3J0ZWQsIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyBpdC4gVGhpcyBnaXZlcyBtZSBhIGRlZmluZWQgcG9pbnQgZm9yIGludGVyYWN0aW9uLlxuXG5Ob3csIEknbGwgc2V0IHRoZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcyBhY2NvcmRpbmdseS4gVGhhdCdzIHRoZSBpbXBvcnRhbnQgcGllY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4OTQsIk91dHB1dFRva2VucyI6MTEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE2OjE4OjUxLjA4MDQzOTg4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDgzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfV0JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2J0X3NldF9sYXRcIixcbiAgICBcInF1ZXVlX3diX2xhdF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY2hlY2tpbmcgaWYgdGhlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGxhdGVuY3kgaGFzIGNoYW5nZWQgd2hlbiB1cGRhdGVkIHZpYSBzeXNmcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBsYXllcidzIHdyaXRlYmFjayB0aHJvdHRsaW5nIGZlYXR1cmUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byB0aGUgYHdidF9sYXRfdXNlY2Agc3lzZnMgZmlsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfV0JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2J0X3NldF9sYXRcIixcbiAgICBcInF1ZXVlX3diX2xhdF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY2hlY2tpbmcgaWYgdGhlIHdyaXRlYmFjayB0aHJvdHRsaW5nIGxhdGVuY3kgaGFzIGNoYW5nZWQgd2hlbiB1cGRhdGVkIHZpYSBzeXNmcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBibG9jayBsYXllcidzIHdyaXRlYmFjayB0aHJvdHRsaW5nIGZlYXR1cmUgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgd3JpdGluZyB0byB0aGUgYHdidF9sYXRfdXNlY2Agc3lzZnMgZmlsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzk2m[1] Phase: Succeeded StartedAt: 2026-07-17 16:19:02 +0000 UTC FinishedAt: 2026-07-17 16:19:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-17 16:19:02 +0000 UTC FinishedAt: 2026-07-17 16:19:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2] Phase: Succeeded StartedAt: 2026-07-17 16:19:02 +0000 UTC FinishedAt: 2026-07-17 20:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-17 16:19:02 +0000 UTC FinishedAt: 2026-07-17 20:32:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-17 16:19:02 +0000 UTC FinishedAt: 2026-07-17 16:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-17 16:19:02 +0000 UTC FinishedAt: 2026-07-17 16:19:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzk2m/series-workflowhzk2m-convert-artifact-2400495306/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-17 16:19:12 +0000 UTC FinishedAt: 2026-07-17 16:53:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-17 16:19:12 +0000 UTC FinishedAt: 2026-07-17 16:53:43 +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:*5e6bb182-2a66-4d93-9a84-dabb6eb05a0f,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-workflowhzk2m/series-workflowhzk2m-convert-artifact-2400495306/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": "87445a0e-41ab-49f3-9e1e-91d2e3a87ef3", "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-workflowhzk2m/series-workflowhzk2m-build-action-3261677240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-17 16:19:12 +0000 UTC FinishedAt: 2026-07-17 16:53:33 +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:*5e6bb182-2a66-4d93-9a84-dabb6eb05a0f,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-workflowhzk2m/series-workflowhzk2m-convert-artifact-2400495306/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": "87445a0e-41ab-49f3-9e1e-91d2e3a87ef3", "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-workflowhzk2m/series-workflowhzk2m-build-action-3261677240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-17 16:53:43 +0000 UTC FinishedAt: 2026-07-17 16:53:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-17 16:53:43 +0000 UTC FinishedAt: 2026-07-17 16:53:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-17 16:53:43 +0000 UTC FinishedAt: 2026-07-17 16:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-17 16:53:43 +0000 UTC FinishedAt: 2026-07-17 16:53:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzk2m/series-workflowhzk2m-convert-artifact-1067676005/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-17 16:53:53 +0000 UTC FinishedAt: 2026-07-17 16:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-17 16:53:53 +0000 UTC FinishedAt: 2026-07-17 16:55:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87445a0e-41ab-49f3-9e1e-91d2e3a87ef3,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-workflowhzk2m/series-workflowhzk2m-build-action-3261677240/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-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-17 16:56:08 +0000 UTC FinishedAt: 2026-07-17 16:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-17 16:56:08 +0000 UTC FinishedAt: 2026-07-17 16:56:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-17 16:56:08 +0000 UTC FinishedAt: 2026-07-17 17:27:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-17 16:56:08 +0000 UTC FinishedAt: 2026-07-17 17:27:26 +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:*5e6bb182-2a66-4d93-9a84-dabb6eb05a0f,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-workflowhzk2m/series-workflowhzk2m-convert-artifact-1067676005/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": "10693a7d-a4ba-4f69-9eb7-8f3c56d0fc88", "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-workflowhzk2m/series-workflowhzk2m-build-action-3689301425/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-17 16:56:08 +0000 UTC FinishedAt: 2026-07-17 17:27:16 +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:*5e6bb182-2a66-4d93-9a84-dabb6eb05a0f,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-workflowhzk2m/series-workflowhzk2m-convert-artifact-1067676005/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": "10693a7d-a4ba-4f69-9eb7-8f3c56d0fc88", "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-workflowhzk2m/series-workflowhzk2m-build-action-3689301425/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-17 17:27:26 +0000 UTC FinishedAt: 2026-07-17 17:27:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-17 17:27:26 +0000 UTC FinishedAt: 2026-07-17 17:27:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-17 17:27:26 +0000 UTC FinishedAt: 2026-07-17 17:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-17 17:27:26 +0000 UTC FinishedAt: 2026-07-17 17:29: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:*10693a7d-a4ba-4f69-9eb7-8f3c56d0fc88,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-workflowhzk2m/series-workflowhzk2m-build-action-3689301425/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-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-17 17:29:17 +0000 UTC FinishedAt: 2026-07-17 20:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-17 17:29:17 +0000 UTC FinishedAt: 2026-07-17 20:32:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*87445a0e-41ab-49f3-9e1e-91d2e3a87ef3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*10693a7d-a4ba-4f69-9eb7-8f3c56d0fc88,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-workflowhzk2m/series-workflowhzk2m-build-action-3261677240/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-workflowhzk2m/series-workflowhzk2m-build-action-3689301425/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-17 17:29:17 +0000 UTC FinishedAt: 2026-07-17 17:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-17 17:29:17 +0000 UTC FinishedAt: 2026-07-17 17:29:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhzk2m/series-workflowhzk2m-convert-artifact-4145357546/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-17 17:29:17 +0000 UTC FinishedAt: 2026-07-17 17:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-17 17:29:17 +0000 UTC FinishedAt: 2026-07-17 17:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-17 17:29:18 +0000 UTC FinishedAt: 2026-07-17 17:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-17 17:29:28 +0000 UTC FinishedAt: 2026-07-17 20:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhzk2m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["wbt_set_lat","queue_wb_lat_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_WBT"],"series_id":"ab0d7c53-9f0c-4bde-b8ed-d9fd99f19d83","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-17 17:29:28 +0000 UTC FinishedAt: 2026-07-17 20:32:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87445a0e-41ab-49f3-9e1e-91d2e3a87ef3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*10693a7d-a4ba-4f69-9eb7-8f3c56d0fc88,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-workflowhzk2m/series-workflowhzk2m-build-action-3261677240/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-workflowhzk2m/series-workflowhzk2m-build-action-3689301425/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-workflowhzk2m/series-workflowhzk2m-convert-artifact-4145357546/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,}