Name: series-workflow75dn7 Phase: Succeeded StartedAt: 2026-07-12 20:25:52 +0000 UTC FinishedAt: 2026-07-13 00:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[0] Phase: Succeeded StartedAt: 2026-07-12 20:25:52 +0000 UTC FinishedAt: 2026-07-12 20:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[0].run-triage Phase: Succeeded StartedAt: 2026-07-12 20:25:52 +0000 UTC FinishedAt: 2026-07-12 20:41:53 +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": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "b9b6c7bf-5eaa-4121-98fd-b42ccd846b60" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_ring_buffers_peek", "io_send_select_buffer", "io_recv_buf_select", "io_buffers_select", "io_buffers_peek" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX3NlbmRfc2VsZWN0X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtpb19yZWN2X2J1Zl9zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cdTAwM2Vpb3ZzYCB3aGVuIGEgbmV3IGlvdmVjIGFycmF5IGlzIGFsbG9jYXRlZCBhbmQgYEtCVUZfTU9ERV9GUkVFYCBpcyBzZXQuIFRoaXMgYWZmZWN0cyBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMgbGlrZSBzZW5kIGFuZCByZWN2IHdoZW4gdXNpbmcgYnVmZmVyIHNlbGVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAyMDo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUxNGI4NWQ5ODYzOWFkNGJlMGM1MDNiZGI5YjVhZjQwNmUyYjRmNjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAyMDo0MTowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmNcbmluZGV4IGI2Yjk2OWI1NWUxMjI0Li4wN2Q4MWRjN2NiZTI5NiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2tidWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcva2J1Zi5jXG5AQCAtMzI4LDggJiM0MzszMjgsOCBAQCBzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbiBcdFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgJiM0MzsmIzQzO2hlYWQsIGJsLVx1MDAzZW1hc2spO1xuIFx0fSB3aGlsZSAoLS1ucl9pb3ZzKTtcbiBcbi1cdGlmIChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpXG4tXHRcdGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKTtcbiYjNDM7XHRpZiAoKGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRlJFRSkgXHUwMDI2XHUwMDI2IGFyZy1cdTAwM2Vpb3ZzICE9IG9yZ19pb3ZzKVxuJiM0MztcdFx0a2ZyZWUob3JnX2lvdnMpO1xuIFxuIFx0aWYgKGhlYWQgPT0gdGFpbClcbiBcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX0VNUFRZO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX3NlbmRfc2VsZWN0X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtpb19yZWN2X2J1Zl9zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cdTAwM2Vpb3ZzYCB3aGVuIGEgbmV3IGlvdmVjIGFycmF5IGlzIGFsbG9jYXRlZCBhbmQgYEtCVUZfTU9ERV9GUkVFYCBpcyBzZXQuIFRoaXMgYWZmZWN0cyBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMgbGlrZSBzZW5kIGFuZCByZWN2IHdoZW4gdXNpbmcgYnVmZmVyIHNlbGVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTE0Yjg1ZDk4NjM5YWQ0YmUwYzUwM2JkYjliNWFmNDA2ZTJiNGY2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDIwOjQxOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jCmluZGV4IGI2Yjk2OWI1NWUxMjI0Li4wN2Q4MWRjN2NiZTI5NiAxMDA2NDQKLS0tIGEvaW9fdXJpbmcva2J1Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2tidWYuYwpAQCAtMzI4LDggJiM0MzszMjgsOCBAQCBzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZywKIAkJYnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgJiM0MzsmIzQzO2hlYWQsIGJsLSZndDttYXNrKTsKIAl9IHdoaWxlICgtLW5yX2lvdnMpOwogCi0JaWYgKGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRlJFRSkKLQkJa2ZyZWUoYXJnLSZndDtpb3ZzKTsKJiM0MzsJaWYgKChhcmctJmd0O21vZGUgJmFtcDsgS0JVRl9NT0RFX0ZSRUUpICZhbXA7JmFtcDsgYXJnLSZndDtpb3ZzICE9IG9yZ19pb3ZzKQomIzQzOwkJa2ZyZWUob3JnX2lvdnMpOwogCiAJaWYgKGhlYWQgPT0gdGFpbCkKIAkJcmVxLSZndDtmbGFncyB8PSBSRVFfRl9CTF9FTVBUWTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBpb191cmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlvX3VyaW5nL2tidWYuY2AuIEl0JiMzOTtzIGEgZmFpcmx5IHNwZWNpZmljIGNoYW5nZSB3aXRoaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNhdGNoaW5nIG15IGV5ZS4gVGhleSYjMzk7dmUgbW9kaWZpZWQgdGhlIGNvbmRpdGlvbiBmb3IgZnJlZWluZyBgYXJnLSZndDtpb3ZzYC4gSG1tLCBpbnN0ZWFkIG9mIHRoZSBzdHJhaWdodGZvcndhcmQgYGtmcmVlKGFyZy0mZ3Q7aW92cylgIHdoZW4gYEtCVUZfTU9ERV9GUkVFYCBpcyBzZXQsIHdlIG5vdyBoYXZlIHRoaXMgY2hlY2s6IGBrZnJlZShvcmdfaW92cylgIGJ1dCBvbmx5IGlmIGBhcmctJmd0O2lvdnNgIGlzICpub3QqIGVxdWFsIHRvIGBvcmdfaW92c2AuCgpUaGF0IGNoYW5nZSBmcm9tIGBhcmctJmd0O2lvdnNgIHRvIGBvcmdfaW92c2AgaXMgdGhlIGNydXggb2YgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5JiMzOTtyZSBmcmVlaW5nIGBvcmdfaW92c2AgYW5kIHdoYXQgYG9yZ19pb3ZzYCByZXByZXNlbnRzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbiBkZWZpbml0aW9uIHdpdGhpbiBgaW9fdXJpbmcva2J1Zi5jYCB0byBzZWUgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCBhbmQgaG93IGBvcmdfaW92c2AgaXMgYXNzaWduZWQuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgYWxpYXNpbmcgb3IgY29weS1vbi13cml0ZSBvcHRpbWl6YXRpb24sIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IHRvIGJlIGNlcnRhaW4uIE15IGd1ZXNzIGlzIHRoZXJlIGlzIGFuIG9yaWdpbmFsIHNldCBvZiBpb3ZzIHVzZWQgYXQgc29tZSBwb2ludCBhbmQgdGhhdCBpcyB0aGUgb25lIHRoYXQgbmVlZHMgdG8gYmUgZnJlZWQgdW5kZXIgdGhlIHVwZGF0ZWQgY29uZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0yMzA9c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcbi0tXG5pb191cmluZy9rYnVmLmMtMjUyLVxuaW9fdXJpbmcva2J1Zi5jOjI1MzpzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuYy0yNTQtXHRcdFx0XHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxuLS1cbmlvX3VyaW5nL2tidWYuYz0zNDE9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzUyLVx0aWYgKHNlbC1cdTAwM2VidWZfbGlzdC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuaW9fdXJpbmcva2J1Zi5jOjM1MzpcdFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG5pb191cmluZy9rYnVmLmMtMzU0LVx0XHQvKlxuLS1cbmlvX3VyaW5nL2tidWYuYz0zNzc9aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM5MC1cdGlmIChibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuaW9fdXJpbmcva2J1Zi5jOjM5MTpcdFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIGJsKTtcbmlvX3VyaW5nL2tidWYuYy0zOTItXHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbiwgYXMgYW4gZXhwZXJ0IHdobyYjMzk7cyB3b3JrZWQgd2l0aCBJL08gYW5kIGtlcm5lbCBpbnRlcm5hbHMgYmVmb3JlOgoKKipQZWVraW5nIGludG8gaW9fcmluZ19idWZmZXJzKioKCkFscmlnaHQsIEkgc2VlIHdlJiMzOTtyZSBoZWFkaW5nIGludG8gYGlvX3VyaW5nL2tidWYuY2AgdG8gbG9vayBhdCBgaW9fcmluZ19idWZmZXJzX3BlZWtgLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZGVzaWduZWQgZm9yIGEgbm9uLWRlc3RydWN0aXZlIHJlYWQsIGEgJiMzNDtsb29rLWJ1dC1kb24mIzM5O3QtdG91Y2gmIzM0OyBraW5kIG9mIG9wZXJhdGlvbi4gSXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGV4YW1pbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciByaW5nIHdpdGhvdXQgYWN0dWFsbHkgY29uc3VtaW5nIG9yIG1vZGlmeWluZyB0aGUgZGF0YSB3aXRoaW4gaXQuIFRoYXQgbWFrZXMgc2Vuc2U7IGluIHRoZSB3b3JsZCBvZiBlZmZpY2llbnQgYXN5bmNocm9ub3VzIEkvTywgeW91IG9mdGVuIG5lZWQgdG8gcXVpY2tseSBjaGVjayB3aGF0JiMzOTtzIHRoZXJlIGJlZm9yZSBjb21taXR0aW5nIHRvIHByb2Nlc3NpbmcgaXQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgcHJvYmFibHkgY3J1Y2lhbCBpbiBhbnkgc2NoZW1lIHRoYXQgaW52b2x2ZXMgc2hhcmVkIG1lbW9yeS4gSSYjMzk7bGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gZm9yIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucy4gVGhpcyB3b3VsZCBtZWFuIGxvb2tpbmcgZm9yIGxvY2tzLCBhdG9taWMgb3BlcmF0aW9ucywgb3IgY2FyZWZ1bCBtZW1vcnkgb3JkZXJpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBhcnRpYWwgcmVhZHMuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTtkIGFudGljaXBhdGUgaXQmIzM5O3MgZGVzaWduZWQgdG8gZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGF0JiMzOTtzIHdhaXRpbmcgaW4gdGhlIHJpbmcgYnVmZmVyLCB3aXRob3V0IHRoZSBvdmVyaGVhZCBvZiBhIGZ1bGwgcmVhZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGRldGVybWluZXMgdmFsaWQgZGF0YSByZWdpb25zLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN1Ym1pc3Npb24gYW5kIGNvbXBsZXRpb24gcXVldWVzLCBhbmQgaWYgaXQgcHJvdmlkZXMgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBkYXRhJiMzOTtzIG1ldGFkYXRhLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUzOlx0c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gMjU0Olx0XHRcdFx0XHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxuIDI1NTpcdHtcbiAyNTY6XHRcdHN0cnVjdCBpb191cmluZ19idWZfcmluZyAqYnIgPSBibC1cdTAwM2VidWZfcmluZztcbiAyNTc6XHRcdHN0cnVjdCBpb3ZlYyAqb3JnX2lvdnMgPSBhcmctXHUwMDNlaW92cztcbiAyNTg6XHRcdHN0cnVjdCBpb3ZlYyAqaW92ID0gYXJnLVx1MDAzZWlvdnM7XG4gMjU5Olx0XHRpbnQgbnJfaW92cyA9IGFyZy1cdTAwM2Vucl9pb3ZzO1xuIDI2MDpcdFx0X191MTYgbnJfYXZhaWwsIHRhaWwsIGhlYWQ7XG4gMjYxOlx0XHRzdHJ1Y3QgaW9fdXJpbmdfYnVmICpidWY7XG4gMjYyOlx0XG4gMjYzOlx0XHR0YWlsID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZici1cdTAwM2V0YWlsKTtcbiAyNjQ6XHRcdGhlYWQgPSBibC1cdTAwM2VoZWFkO1xuIDI2NTpcdFx0bnJfYXZhaWwgPSBtaW5fdChfX3UxNiwgdGFpbCAtIGhlYWQsIFVJT19NQVhJT1YpO1xuIDI2NjpcdFx0aWYgKHVubGlrZWx5KCFucl9hdmFpbCkpXG4gMjY3Olx0XHRcdHJldHVybiAtRU5PQlVGUztcbiAyNjg6XHRcbiAyNjk6XHRcdGJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsIGhlYWQsIGJsLVx1MDAzZW1hc2spO1xuIDI3MDpcdFx0aWYgKGFyZy1cdTAwM2VtYXhfbGVuKSB7XG4gMjcxOlx0XHRcdHUzMiBsZW4gPSBSRUFEX09OQ0UoYnVmLVx1MDAzZWxlbik7XG4gMjcyOlx0XHRcdHNpemVfdCBuZWVkZWQ7XG4gMjczOlx0XG4gMjc0Olx0XHRcdGlmICh1bmxpa2VseSghbGVuKSlcbiAyNzU6XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gMjc2Olx0XHRcdG5lZWRlZCA9IChhcmctXHUwMDNlbWF4X2xlbiAmIzQzOyBsZW4gLSAxKSAvIGxlbjtcbiAyNzc6XHRcdFx0bmVlZGVkID0gbWluX25vdF96ZXJvKG5lZWRlZCwgKHNpemVfdCkgUEVFS19NQVhfSU1QT1JUKTtcbiAyNzg6XHRcdFx0aWYgKG5yX2F2YWlsIFx1MDAzZSBuZWVkZWQpXG4gMjc5Olx0XHRcdFx0bnJfYXZhaWwgPSBuZWVkZWQ7XG4gMjgwOlx0XHR9XG4gMjgxOlx0XG4gMjgyOlx0XHQvKlxuIDI4MzpcdFx0ICogb25seSBhbGxvYyBhIGJpZ2dlciBhcnJheSBpZiB3ZSBrbm93IHdlIGhhdmUgZGF0YSB0byBtYXAsIGVnIG5vdFxuIDI4NDpcdFx0ICogYSBzcGVjdWxhdGl2ZSBwZWVrIG9wZXJhdGlvbi5cbiAyODU6XHRcdCAqL1xuIDI4NjpcdFx0aWYgKGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRVhQQU5EIFx1MDAyNlx1MDAyNiBucl9hdmFpbCBcdTAwM2UgbnJfaW92cyBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZW1heF9sZW4pIHtcbiAyODc6XHRcdFx0aW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgbnJfYXZhaWwpO1xuIDI4ODpcdFx0XHRpZiAodW5saWtlbHkoIWlvdikpXG4gMjg5Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjkwOlx0XHRcdGFyZy1cdTAwM2Vpb3ZzID0gaW92O1xuIDI5MTpcdFx0XHRucl9pb3ZzID0gbnJfYXZhaWw7XG4gMjkyOlx0XHR9IGVsc2UgaWYgKG5yX2F2YWlsIFx1MDAzYyBucl9pb3ZzKSB7XG4gMjkzOlx0XHRcdG5yX2lvdnMgPSBucl9hdmFpbDtcbiAyOTQ6XHRcdH1cbiAyOTU6XHRcbiAyOTY6XHRcdC8qIHNldCBpdCB0byBtYXgsIGlmIG5vdCBzZXQsIHNvIHdlIGNhbiB1c2UgaXQgdW5jb25kaXRpb25hbGx5ICovXG4gMjk3Olx0XHRpZiAoIWFyZy1cdTAwM2VtYXhfbGVuKVxuIDI5ODpcdFx0XHRhcmctXHUwMDNlbWF4X2xlbiA9IElOVF9NQVg7XG4gMjk5Olx0XG4gMzAwOlx0XHRyZXEtXHUwMDNlYnVmX2luZGV4ID0gUkVBRF9PTkNFKGJ1Zi1cdTAwM2ViaWQpO1xuIDMwMTpcdFx0ZG8ge1xuIDMwMjpcdFx0XHR1MzIgbGVuID0gUkVBRF9PTkNFKGJ1Zi1cdTAwM2VsZW4pO1xuIDMwMzpcdFxuIDMwNDpcdFx0XHQvKiB0cnVuY2F0ZSBlbmQgcGllY2UsIGlmIG5lZWRlZCwgZm9yIG5vbiBwYXJ0aWFsIGJ1ZmZlcnMgKi9cbiAzMDU6XHRcdFx0aWYgKGxlbiBcdTAwM2UgYXJnLVx1MDAzZW1heF9sZW4pIHtcbiAzMDY6XHRcdFx0XHRsZW4gPSBhcmctXHUwMDNlbWF4X2xlbjtcbiAzMDc6XHRcdFx0XHRpZiAoIShibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9JTkMpKSB7XG4gMzA4Olx0XHRcdFx0XHRhcmctXHUwMDNlcGFydGlhbF9tYXAgPSAxO1xuIDMwOTpcdFx0XHRcdFx0aWYgKGlvdiAhPSBhcmctXHUwMDNlaW92cylcbiAzMTA6XHRcdFx0XHRcdFx0YnJlYWs7XG4gMzExOlx0XHRcdFx0fVxuIDMxMjpcdFx0XHR9XG4gMzEzOlx0XG4gMzE0Olx0XHRcdGlvdi1cdTAwM2Vpb3ZfYmFzZSA9IHU2NF90b191c2VyX3B0cihSRUFEX09OQ0UoYnVmLVx1MDAzZWFkZHIpKTtcbiAzMTU6XHRcdFx0aW92LVx1MDAzZWlvdl9sZW4gPSBsZW47XG4gMzE2Olx0XHRcdGlmICh1bmxpa2VseSghYWNjZXNzX29rKGlvdi1cdTAwM2Vpb3ZfYmFzZSwgbGVuKSkpIHtcbiAzMTc6XHRcdFx0XHRpZiAoYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG4gMzE4Olx0XHRcdFx0XHRrZnJlZShhcmctXHUwMDNlaW92cyk7XG4gMzE5Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzIwOlx0XHRcdH1cbiAzMjE6XHRcdFx0aW92JiM0MzsmIzQzOztcbiAzMjI6XHRcbiAzMjM6XHRcdFx0YXJnLVx1MDAzZW91dF9sZW4gJiM0Mzs9IGxlbjtcbiAzMjQ6XHRcdFx0YXJnLVx1MDAzZW1heF9sZW4gLT0gbGVuO1xuIDMyNTpcdFx0XHRpZiAoIWFyZy1cdTAwM2VtYXhfbGVuKVxuIDMyNjpcdFx0XHRcdGJyZWFrO1xuIDMyNzpcdFxuIDMyODpcdFx0XHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJyLCAmIzQzOyYjNDM7aGVhZCwgYmwtXHUwMDNlbWFzayk7XG4gMzI5Olx0XHR9IHdoaWxlICgtLW5yX2lvdnMpO1xuIDMzMDpcdFxuIDMzMTpcdFx0aWYgKChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92cylcbiAzMzI6XHRcdFx0a2ZyZWUob3JnX2lvdnMpO1xuIDMzMzpcdFxuIDMzNDpcdFx0aWYgKGhlYWQgPT0gdGFpbClcbiAzMzU6XHRcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX0VNUFRZO1xuIDMzNjpcdFxuIDMzNzpcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRkZFUl9SSU5HO1xuIDMzODpcdFx0cmV0dXJuIGlvdiAtIGFyZy1cdTAwM2Vpb3ZzO1xuIDMzOTpcdH1cbiAzNDA6XHRcbiAzNDE6XHRpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIDM0MjpcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiAzNDM6XHR7XG4gMzQ0Olx0XHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cdTAwM2VjdHg7XG4gMzQ1Olx0XHRpbnQgcmV0ID0gLUVOT0VOVDtcbiAzNDY6XHRcbiAzNDc6XHRcdGlvX3Jpbmdfc3VibWl0X2xvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4gMzQ4Olx0XHRzZWwtXHUwMDNlYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QoY3R4LCBhcmctXHUwMDNlYnVmX2dyb3VwKTtcbiAzNDk6XHRcdGlmICh1bmxpa2VseSghc2VsLVx1MDAzZWJ1Zl9saXN0KSlcbiAzNTA6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIDM1MTpcdFxuIDM1MjpcdFx0aWYgKHNlbC1cdTAwM2VidWZfbGlzdC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBrYnVmLmMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb19yaW5nX2J1ZmZlcnNfcGVla2Agd2l0aGluIGBpb191cmluZy9rYnVmLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBgYXJnLSZndDtpb3ZzYCBpcyBoYW5kbGVkIHdoZW4gdGhlIGBLQlVGX01PREVfRlJFRWAgZmxhZyBpcyBzZXQuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdhcyBzaW1wbHk6CgpgYGBjCglpZiAoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKQoJCWtmcmVlKGFyZy0mZ3Q7aW92cyk7CmBgYAoKRXNzZW50aWFsbHksIGBhcmctJmd0O2lvdnNgIHdhcyBiZWluZyB1bmNvbmRpdGlvbmFsbHkgZnJlZWQgaWYgYEtCVUZfTU9ERV9GUkVFYCB3YXMgYWN0aXZlLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IGBhcmctJmd0O2lvdnNgIGNhbiBiZSB1cGRhdGVkIGlmIHRoZSBgS0JVRl9NT0RFX0VYUEFORGAgZmxhZyBpcyBzZXQgYW5kIGBucl9hdmFpbCAmZ3Q7IG5yX2lvdnNgLgoKYGBgYwoJaWYgKGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRVhQQU5EICZhbXA7JmFtcDsgbnJfYXZhaWwgJmd0OyBucl9pb3ZzICZhbXA7JmFtcDsgYXJnLSZndDttYXhfbGVuKSB7CgkJaW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgbnJfYXZhaWwpOwoJCWlmICh1bmxpa2VseSghaW92KSkKCQkJcmV0dXJuIC1FTk9NRU07CgkJYXJnLSZndDtpb3ZzID0gaW92OwoJCW5yX2lvdnMgPSBucl9hdmFpbDsKCX0KYGBgCgpTbywgaWYgYW4gZXhwYW5zaW9uIGhhcHBlbmVkLCBgYXJnLSZndDtpb3ZzYCB3b3VsZCBiZSBwb2ludGluZyB0byBhIG5ld2x5IGFsbG9jYXRlZCBhcnJheSwgd2hpbGUgdGhlIG9yaWdpbmFsIGFycmF5IG1pZ2h0IHN0aWxsIGJlIGluIHVzZS4gVGhlIHBhdGNoIG5vdyBpbnRyb2R1Y2VzIGEgY2hlY2s6CgpgYGBjCglpZiAoKGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRlJFRSkgJmFtcDsmYW1wOyBhcmctJmd0O2lvdnMgIT0gb3JnX2lvdnMpCgkJa2ZyZWUob3JnX2lvdnMpOwpgYGAKCkFoLCBJIHNlZSBpdCBub3cuIFRoZSBwYXRjaCBpcyBub3cgZnJlZWluZyB0aGUgKm9sZCogYXJyYXkgKGBvcmdfaW92c2ApIGlmIGEgbmV3IGFycmF5IHdhcyBhbGxvY2F0ZWQuIE1ha2VzIHNlbnNlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcHJvYmFibHkgbGVha2luZyBtZW1vcnkgb3IsIHdvcnNlLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uISBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBmcmVlIGBhcmctJmd0O2lvdnNgIGFuZCB0aGVuIGhhbmQgYmFjayBhIHBvaW50ZXIgdG8gZnJlZWQgbWVtb3J5ISBJIHN1c3BlY3QgdGhhdCB0aGUgY2FsbGVyIGV4cGVjdHMgYGFyZy0mZ3Q7aW92c2AgdG8gYmUgdmFsaWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBhbmQgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBpdCBsYXRlci4gCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgd2hlcmUgYEtCVUZfTU9ERV9GUkVFYCBpcyBhY3R1YWxseSBzZXQgYW5kIGhvdyB0aGUgcmV0dXJuZWQgYGFyZy0mZ3Q7aW92c2AgaXMgdXNlZC4gVGhhdCYjMzk7bGwgc29saWRpZnkgdGhpcyBldmVuIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S0JVRl9NT0RFX0ZSRUUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jPTI1Mz1zdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzMwLVxuaW9fdXJpbmcva2J1Zi5jOjMzMTpcdGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG5pb191cmluZy9rYnVmLmMtMzMyLVx0XHRrZnJlZShvcmdfaW92cyk7XG4tLVxuaW9fdXJpbmcva2J1Zi5oPTUzPWVudW0ge1xuLS1cbmlvX3VyaW5nL2tidWYuaC01Ni1cdC8qIGlmIGJpZ2dlciB2ZWMgYWxsb2NhdGVkLCBmcmVlIG9sZCBvbmUgKi9cbmlvX3VyaW5nL2tidWYuaDo1NzpcdEtCVUZfTU9ERV9GUkVFXHRcdD0gMixcbmlvX3VyaW5nL2tidWYuaC01OC19O1xuLS1cbmlvX3VyaW5nL25ldC5jPTYwOD1zdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuLS1cbmlvX3VyaW5nL25ldC5jLTYyMi1cdFx0YXJnLmlvdnMgPSBrbXNnLVx1MDAzZXZlYy5pb3ZlYztcbmlvX3VyaW5nL25ldC5jOjYyMzpcdFx0YXJnLm1vZGUgPSBLQlVGX01PREVfRlJFRTtcbmlvX3VyaW5nL25ldC5jLTYyNC1cdH1cbi0tXG5pb191cmluZy9uZXQuYz0xMTM3PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTExNTktXHRcdFx0YXJnLmlvdnMgPSBrbXNnLVx1MDAzZXZlYy5pb3ZlYztcbmlvX3VyaW5nL25ldC5jOjExNjA6XHRcdFx0YXJnLm1vZGUgfD0gS0JVRl9NT0RFX0ZSRUU7XG5pb191cmluZy9uZXQuYy0xMTYxLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgYSBQb3RlbnRpYWwgTWVtb3J5IExlYWsgaW4gaW9fdXJpbmcgTmV0d29yayBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBLQlVGX01PREVfRlJFRWAgZmxhZyBpbiB0aGUgY29udGV4dCBvZiBgaW9fdXJpbmdgIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIHNwb3R0ZWQgYSBjcnVjaWFsIGJ1ZyBmaXguIEZyb20gdGhlIGxvb2tzIG9mIGl0LCBgS0JVRl9NT0RFX0ZSRUVgIG1lYW5zIHRoYXQgaWYgYSBsYXJnZXIgdmVjdG9yIChgdmVjYCkgaXMgYWxsb2NhdGVkLCB0aGVuIHRoZSAqb2xkKiBvbmUgbmVlZHMgdG8gYmUgZnJlZWQuIExvb2tpbmcgYXQgdGhlIG9yaWdpbmFsIGNvZGU6CgpgYGBjCglpZiAoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKQoJCWtmcmVlKGFyZy0mZ3Q7aW92cyk7CmBgYAoKLi4uaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgd2FzIGZyZWVpbmcgYGFyZy0mZ3Q7aW92c2AsIHdoaWNoIGlzIHRoZSAqbmV3KiBidWZmZXIgKG9yIHBvdGVudGlhbGx5IHRoZSBvbGQgb25lIGlmIG5vdGhpbmcgd2FzIHJlYWxsb2NhdGVkKS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSB1cGRhdGVkIGNvZGUsIGhvd2V2ZXIsIGlzIG11Y2ggYmV0dGVyOgoKYGBgYwoJaWYgKChhcmctJmd0O21vZGUgJmFtcDsgS0JVRl9NT0RFX0ZSRUUpICZhbXA7JmFtcDsgYXJnLSZndDtpb3ZzICE9IG9yZ19pb3ZzKQoJCWtmcmVlKG9yZ19pb3ZzKTsKYGBgCgpOb3csIGl0IGNvcnJlY3RseSBmcmVlcyB0aGUgKm9sZCogYnVmZmVyIChgb3JnX2lvdnNgKSBvbmx5IGlmIGEgbmV3IG9uZSB3YXMgYWxsb2NhdGVkLiBUaGlzIGRlZmluaXRpdmVseSBzb2x2ZXMgdGhlIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgdGhhdCB3YXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHJlYWwgYnVnIGZpeC4KClRoaXMgZml4IGxpa2VseSB0YXJnZXRzIG5ldHdvcmsgb3BlcmF0aW9ucyB3aXRoaW4gYGlvX3VyaW5nYCwgc3BlY2lmaWNhbGx5IGluIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YCB3aGVyZSB0aGlzIGBLQlVGX01PREVfRlJFRWAgZmxhZyBjb21lcyBpbnRvIHBsYXkuIEl0IG1ha2VzIHNlbnNlIHRvIGZ1enogdGhlc2UgYXJlYXMgcGFydGljdWxhcmx5LCBhbG9uZyB3aXRoIHBvdGVudGlhbGx5IHJlbGF0ZWQgc3ltYm9sczogYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCwgYW5kIGBpb19idWZmZXJzX3BlZWtgLgoKSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyB0byBiZSByZWxldmFudC4gYGlvX3VyaW5nYCBpdHNlbGYgaXMgZW5hYmxlZCBieSBgQ09ORklHX0lPX1VSSU5HYCwgc28gdGhhdCYjMzk7cyB0aGUgYmFzZSByZXF1aXJlbWVudC4gTmV0d29yayBvcGVyYXRpb25zIHdpdGhpbiBgaW9fdXJpbmdgIHNob3VsZCBiZSBwcmV0dHkgc3RhbmRhcmQgb3RoZXJ3aXNlLiBOb3csIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgaW9fdXJpbmcvbmV0LmNgIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBmdW5jdGlvbnMgdGhhdCB1c2UgdGhpcyBuZXcgbG9naWMuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgbW9yZSBjb2RlIGltcGFjdGVkLCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3NlbmRfc2VsZWN0X2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTU1OT1pbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTYwNy1cbmlvX3VyaW5nL25ldC5jOjYwODpzdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuaW9fdXJpbmcvbmV0LmMtNjA5LVx0XHRcdFx0IHN0cnVjdCBpb19icl9zZWwgKnNlbCwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZylcbi0tXG5pb191cmluZy9uZXQuYz02NTY9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy02ODktXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG5pb191cmluZy9uZXQuYzo2OTA6XHRcdHJldCA9IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihyZXEsIGlzc3VlX2ZsYWdzLCBcdTAwMjZzZWwsIGttc2cpO1xuaW9fdXJpbmcvbmV0LmMtNjkxLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSBub2QgdG8gdGhlIGZhY3QgdGhhdCBJJiMzOTttIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOgoKKipEZWx2aW5nIGludG8gaW9fdXJpbmcmIzM5O3MgQ29yZSBJTyBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgLCBhbmQgcG90ZW50aWFsbHkgdGhlaXIgbWVzc2FnZS1wYXNzaW5nIGNvdW50ZXJwYXJ0cyBgaW9fc2VuZG1zZ2AgYW5kIGBpb19yZWN2bXNnYCwgYXJlIGZ1bmRhbWVudGFsbHkgdGllZCB0byB0aGlzIHVuZGVybHlpbmcgbWVjaGFuaXNtLiBUaGlzIGlzICpjb3JlKiBgaW9fdXJpbmdgIHN0dWZmLCB0aGUgYnJlYWQgYW5kIGJ1dHRlci4gSXTigJlzIHdoYXQgbWFrZXMgdGhlIGFzeW5jaHJvbm91cywgemVyby1jb3B5IG9wZXJhdGlvbnMgcG9zc2libGUuIEkgbmVlZCB0byBrZWVwIHRoaXMgcmVsYXRpb25zaGlwIGZyb250IG9mIG1pbmQgd2hlbiBJ4oCZbSBkaWdnaW5nIGludG8gdGhlIGFyY2hpdGVjdHVyZSBvciBvcHRpbWl6aW5nIHRoZXNlIGZ1bmN0aW9ucy4KCkFuZCB3aGlsZSBJJiMzOTttIGF0IGl0LCBJIHNob3VsZCBwcm9iYWJseSBnbGFuY2UgYXQgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgdG9vLiBKdXN0IHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBjb25zaXN0ZW50IHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgd291bGRuJiMzOTt0IGh1cnQgdG8gaGF2ZSB0aGF0IGNvbnRleHQgZnJlc2guIEl0IGNvdWxkIHJldmVhbCBzb21lIGludGVyZXN0aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlY3ZfYnVmX3NlbGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTEwNTA9aW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMTM2LVxuaW9fdXJpbmcvbmV0LmM6MTEzNzpzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTExMzgtXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmM9MTIwOT1pbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTEyNDctXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG5pb191cmluZy9uZXQuYzoxMjQ4Olx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTEyNDktXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIGlvX3VyaW5nIGFuZCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaW9fdXJpbmdgIGFuZCBpdHMgcm9sZSBpbiBuZXR3b3JrIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgeWVzLCB0aGUgYGlvX3JlY3ZgIGZ1bmN0aW9uIGRlZmluaXRlbHkgbGV2ZXJhZ2VzIGl0LiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgcGVydGFpbiB0byB1c2luZyBgaW9fdXJpbmdgIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkuIEJleW9uZCB0aGUgb2J2aW91cywgd2hpY2ggSSBzdXNwZWN0IGlzIHRoZSBgQ09ORklHX0lPX1VSSU5HYCBvcHRpb24sIEkga25vdyBgQ09ORklHX05FVGAgaXMgZnVuZGFtZW50YWwgZm9yIGFueXRoaW5nIG5ldHdvcmtpbmcgcmVsYXRlZCwgYnV0IGlzIHRoZXJlIGFueXRoaW5nIG1vcmUgZ3JhbnVsYXI/CgpNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBpb191cmluZy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRlZmluaXRpdmUgYW5zd2VycyBhYm91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIG51YW5jZXMuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBpb191cmluZyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBJT19VUklOR19aQ1JYXG4gICA3Olx0XHRkZWZfYm9vbCB5XG4gICA4Olx0XHRkZXBlbmRzIG9uIElPX1VSSU5HXG4gICA5Olx0XHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxuICAxMDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDExOlx0XHRkZXBlbmRzIG9uIE5FVF9SWF9CVVNZX1BPTExcbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgSU9fVVJJTkdfQlBGXG4gIDE0Olx0XHRkZWZfYm9vbCB5XG4gIDE1Olx0XHRkZXBlbmRzIG9uIEJQRlxuICAxNjpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuICAxOTpcdFx0ZGVmX2Jvb2wgeVxuICAyMDpcdFx0ZGVwZW5kcyBvbiBJT19VUklOR1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU1MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgSU9fVVJJTkcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKCkhtbSwgc28gaXQgbG9va3MgbGlrZSBgaW9fdXJpbmdgJiMzOTtzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgdGllZCB0byB0aGUga2VybmVsIGNvbmZpZyBvcHRpb24gYENPTkZJR19JT19VUklOR2AuIFJpZ2h0LCB0aGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLiBNeSBuZXh0IHN0ZXAgc2hvdWxkIGJlIHRvIGRlbHZlIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGBJT19VUklOR2AgaXMgZGVmaW5lZCwgaXRzIGRlcGVuZGVuY2llcyAoaWYgYW55KSwgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gSXQmIzM5O3MgY3J1Y2lhbCB0byBrbm93IHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGNvbnRleHQgaWYgSSYjMzk7bSBnb2luZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBiZWhhdmVzIGluIHByYWN0aWNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgd2hvbGUgcGljdHVyZSB0byBhbnN3ZXIgdGhlIHF1ZXN0aW9uIGF0IGhhbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTQtXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzYtXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTkzOC1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQzCgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSU9fVVJJTkcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgYElPX1VSSU5HYCBwYXRjaCBpbiBmcm9udCBvZiBtZS4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGEgYnVnIGZpeCBpbiB0aGUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyB3aGVuIGBLQlVGX01PREVfRlJFRWAgd2FzIHNldCwgYmVjYXVzZSBpdCB3YXMgZnJlZWluZyB0aGUgd3JvbmcgaW92ZWMgYXJyYXkgKGBhcmctJmd0O2lvdnNgIGluc3RlYWQgb2YgYG9yZ19pb3ZzYCkuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KCk15IGluaXRpYWwgZm9jdXMgc3ltYm9scywgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCB3ZXJlIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AsIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLCBgaW9fcmVjdl9idWZfc2VsZWN0YCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AuIEJ1dCwgbGV0IG1lIGRvdWJsZSBjaGVjayBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBhbmQgYWggeWVzLCBpdCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBBbmQgbG9va2luZyBhdCB0aGUgY2FsbCBzaXRlcywgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGJ5IGJvdGggYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AsIHNvIHRoZXNlIHNob3VsZCBkZWZpbml0ZWx5IGJlIGluY2x1ZGVkIGluIHRoZSBmb2N1cyBzeW1ib2wgbGlzdCBhcyB3ZWxsLgoKSSBjYW4mIzM5O3Qgc2VlIGFueXRoaW5nIG9kZCB3aXRoIHRoZSBjb25maWcgZW5hYmxpbmcsIGBJT19VUklOR2AgYW5kIGBORVRgIHNlZW0gYXBwcm9wcmlhdGUuIEFsdGhvdWdoIGBORVRgIGlzIHN0YW5kYXJkLCBgSU9fVVJJTkdgIGlzIGEgZ29vZCBjb25maWcgdG8gY2hlY2suCgpUaGUgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCB3aGVuIGRlYWxpbmcgd2l0aCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMgKGxpa2Ugc2VuZHMgYW5kIHJlY2VpdmVzKSBhbmQgdXNpbmcgYnVmZmVyIHNlbGVjdGlvbiwgdGhlIHBhdGNoIGVuc3VyZXMgdGhlIGNvcnJlY3QgaW92ZWMgYXJyYXkgKGBvcmdfaW92c2ApIGlzIGZyZWVkIHdoZW4gYSBuZXcgYXJyYXkgaXMgYWxsb2NhdGVkIGFuZCB0aGUgYEtCVUZfTU9ERV9GUkVFYCBmbGFnIGlzIHNldC4gVGhhdCYjMzk7cyBhIGdvb2QgZml4LCBwcmV2ZW50aW5nIGEgbGlrZWx5IG1lbW9yeSBpc3N1ZS4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhpcyBzZXQgdG8gcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19yaW5nX2J1ZmZlcnNfcGVlayYjMzQ7LAogICAgJiMzNDtpb19zZW5kX3NlbGVjdF9idWZmZXImIzM0OywKICAgICYjMzQ7aW9fcmVjdl9idWZfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfcGVlayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlL21lbW9yeSBsZWFrIGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgYnkgY29ycmVjdGx5IGZyZWVpbmcgYG9yZ19pb3ZzYCBpbnN0ZWFkIG9mIGBhcmctXHUwMDNlaW92c2Agd2hlbiBhIG5ldyBpb3ZlYyBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LiBUaGlzIGFmZmVjdHMgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zIGxpa2Ugc2VuZCBhbmQgcmVjdiB3aGVuIHVzaW5nIGJ1ZmZlciBzZWxlY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX3NlbmRfc2VsZWN0X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtpb19yZWN2X2J1Zl9zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cdTAwM2Vpb3ZzYCB3aGVuIGEgbmV3IGlvdmVjIGFycmF5IGlzIGFsbG9jYXRlZCBhbmQgYEtCVUZfTU9ERV9GUkVFYCBpcyBzZXQuIFRoaXMgYWZmZWN0cyBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMgbGlrZSBzZW5kIGFuZCByZWN2IHdoZW4gdXNpbmcgYnVmZmVyIHNlbGVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjAyLjI2MjI2NzcxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5Nzc3NTMyOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19yaW5nX2J1ZmZlcnNfcGVla1wiLFxuICAgIFwiaW9fc2VuZF9zZWxlY3RfYnVmZmVyXCIsXG4gICAgXCJpb19yZWN2X2J1Zl9zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfc2VsZWN0XCIsXG4gICAgXCJpb19idWZmZXJzX3BlZWtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlL21lbW9yeSBsZWFrIGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgYnkgY29ycmVjdGx5IGZyZWVpbmcgYG9yZ19pb3ZzYCBpbnN0ZWFkIG9mIGBhcmctXFx1MDAzZWlvdnNgIHdoZW4gYSBuZXcgaW92ZWMgYXJyYXkgaXMgYWxsb2NhdGVkIGFuZCBgS0JVRl9NT0RFX0ZSRUVgIGlzIHNldC4gVGhpcyBhZmZlY3RzIGlvX3VyaW5nIG5ldHdvcmsgb3BlcmF0aW9ucyBsaWtlIHNlbmQgYW5kIHJlY3Ygd2hlbiB1c2luZyBidWZmZXIgc2VsZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MTowMi4yNjIyNzMzOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjQ0MzYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUxNGI4NWQ5ODYzOWFkNGJlMGM1MDNiZGI5YjVhZjQwNmUyYjRmNjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMTIgMjA6NDE6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jXFxuaW5kZXggYjZiOTY5YjU1ZTEyMjQuLjA3ZDgxZGM3Y2JlMjk2IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL2tidWYuY1xcbisrKyBiL2lvX3VyaW5nL2tidWYuY1xcbkBAIC0zMjgsOCArMzI4LDggQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuIFxcdFxcdGJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsICsraGVhZCwgYmwtXFx1MDAzZW1hc2spO1xcbiBcXHR9IHdoaWxlICgtLW5yX2lvdnMpO1xcbiBcXG4tXFx0aWYgKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxcbi1cXHRcXHRrZnJlZShhcmctXFx1MDAzZWlvdnMpO1xcbitcXHRpZiAoKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuK1xcdFxcdGtmcmVlKG9yZ19pb3ZzKTtcXG4gXFxuIFxcdGlmIChoZWFkID09IHRhaWwpXFxuIFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQkxfRU1QVFk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjAyLjY2OTY2MDE1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzNzAxMzA4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19zZW5kX3NlbGVjdF9idWZmZXJcIixcbiAgICBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfcGVla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cXHUwMDNlaW92c2Agd2hlbiBhIG5ldyBpb3ZlYyBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LiBUaGlzIGFmZmVjdHMgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zIGxpa2Ugc2VuZCBhbmQgcmVjdiB3aGVuIHVzaW5nIGJ1ZmZlciBzZWxlY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTE0Yjg1ZDk4NjM5YWQ0YmUwYzUwM2JkYjliNWFmNDA2ZTJiNGY2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDIwOjQxOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jXG5pbmRleCBiNmI5NjliNTVlMTIyNC4uMDdkODFkYzdjYmUyOTYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmNcbisrKyBiL2lvX3VyaW5nL2tidWYuY1xuQEAgLTMyOCw4ICszMjgsOCBAQCBzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbiBcdFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgKytoZWFkLCBibC1cdTAwM2VtYXNrKTtcbiBcdH0gd2hpbGUgKC0tbnJfaW92cyk7XG4gXG4tXHRpZiAoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxuLVx0XHRrZnJlZShhcmctXHUwMDNlaW92cyk7XG4rXHRpZiAoKGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRlJFRSkgXHUwMDI2XHUwMDI2IGFyZy1cdTAwM2Vpb3ZzICE9IG9yZ19pb3ZzKVxuK1x0XHRrZnJlZShvcmdfaW92cyk7XG4gXG4gXHRpZiAoaGVhZCA9PSB0YWlsKVxuIFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQkxfRU1QVFk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MTowMi42Njk2NjE2NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5MzA3NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGlvX3VyaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlvX3VyaW5nL2tidWYuY2AuIEl0J3MgYSBmYWlybHkgc3BlY2lmaWMgY2hhbmdlIHdpdGhpbiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjYXRjaGluZyBteSBleWUuIFRoZXkndmUgbW9kaWZpZWQgdGhlIGNvbmRpdGlvbiBmb3IgZnJlZWluZyBgYXJnLVx1MDAzZWlvdnNgLiBIbW0sIGluc3RlYWQgb2YgdGhlIHN0cmFpZ2h0Zm9yd2FyZCBga2ZyZWUoYXJnLVx1MDAzZWlvdnMpYCB3aGVuIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LCB3ZSBub3cgaGF2ZSB0aGlzIGNoZWNrOiBga2ZyZWUob3JnX2lvdnMpYCBidXQgb25seSBpZiBgYXJnLVx1MDAzZWlvdnNgIGlzICpub3QqIGVxdWFsIHRvIGBvcmdfaW92c2AuXG5cblRoYXQgY2hhbmdlIGZyb20gYGFyZy1cdTAwM2Vpb3ZzYCB0byBgb3JnX2lvdnNgIGlzIHRoZSBjcnV4IG9mIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSdyZSBmcmVlaW5nIGBvcmdfaW92c2AgYW5kIHdoYXQgYG9yZ19pb3ZzYCByZXByZXNlbnRzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgaW9fcmluZ19idWZmZXJzX3BlZWtgIGZ1bmN0aW9uIGRlZmluaXRpb24gd2l0aGluIGBpb191cmluZy9rYnVmLmNgIHRvIHNlZSBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGFuZCBob3cgYG9yZ19pb3ZzYCBpcyBhc3NpZ25lZC4gSXQncyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIGFsaWFzaW5nIG9yIGNvcHktb24td3JpdGUgb3B0aW1pemF0aW9uLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB0byBiZSBjZXJ0YWluLiBNeSBndWVzcyBpcyB0aGVyZSBpcyBhbiBvcmlnaW5hbCBzZXQgb2YgaW92cyB1c2VkIGF0IHNvbWUgcG9pbnQgYW5kIHRoYXQgaXMgdGhlIG9uZSB0aGF0IG5lZWRzIHRvIGJlIGZyZWVkIHVuZGVyIHRoZSB1cGRhdGVkIGNvbmRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjA2LjcxODk3MTA2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY2NTI2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yaW5nX2J1ZmZlcnNfcGVla1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9rYnVmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTIzMD1zdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTI1Mi1cXG5pb191cmluZy9rYnVmLmM6MjUzOnN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuYy0yNTQtXFx0XFx0XFx0XFx0c3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz0zNDE9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0zNTItXFx0aWYgKHNlbC1cXHUwMDNlYnVmX2xpc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORykge1xcbmlvX3VyaW5nL2tidWYuYzozNTM6XFx0XFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbmlvX3VyaW5nL2tidWYuYy0zNTQtXFx0XFx0LypcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz0zNzc9aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzkwLVxcdGlmIChibC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT0JMX0JVRl9SSU5HKSB7XFxuaW9fdXJpbmcva2J1Zi5jOjM5MTpcXHRcXHRyZXQgPSBpb19yaW5nX2J1ZmZlcnNfcGVlayhyZXEsIGFyZywgYmwpO1xcbmlvX3VyaW5nL2tidWYuYy0zOTItXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjA2Ljc3OTY0MzkzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjcxNjU1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbiwgYXMgYW4gZXhwZXJ0IHdobydzIHdvcmtlZCB3aXRoIEkvTyBhbmQga2VybmVsIGludGVybmFscyBiZWZvcmU6XG5cbioqUGVla2luZyBpbnRvIGlvX3JpbmdfYnVmZmVycyoqXG5cbkFscmlnaHQsIEkgc2VlIHdlJ3JlIGhlYWRpbmcgaW50byBgaW9fdXJpbmcva2J1Zi5jYCB0byBsb29rIGF0IGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBkZXNpZ25lZCBmb3IgYSBub24tZGVzdHJ1Y3RpdmUgcmVhZCwgYSBcImxvb2stYnV0LWRvbid0LXRvdWNoXCIga2luZCBvZiBvcGVyYXRpb24uIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGV4YW1pbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciByaW5nIHdpdGhvdXQgYWN0dWFsbHkgY29uc3VtaW5nIG9yIG1vZGlmeWluZyB0aGUgZGF0YSB3aXRoaW4gaXQuIFRoYXQgbWFrZXMgc2Vuc2U7IGluIHRoZSB3b3JsZCBvZiBlZmZpY2llbnQgYXN5bmNocm9ub3VzIEkvTywgeW91IG9mdGVuIG5lZWQgdG8gcXVpY2tseSBjaGVjayB3aGF0J3MgdGhlcmUgYmVmb3JlIGNvbW1pdHRpbmcgdG8gcHJvY2Vzc2luZyBpdC4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHByb2JhYmx5IGNydWNpYWwgaW4gYW55IHNjaGVtZSB0aGF0IGludm9sdmVzIHNoYXJlZCBtZW1vcnkuIEknbGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gZm9yIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucy4gVGhpcyB3b3VsZCBtZWFuIGxvb2tpbmcgZm9yIGxvY2tzLCBhdG9taWMgb3BlcmF0aW9ucywgb3IgY2FyZWZ1bCBtZW1vcnkgb3JkZXJpbmcuIEknbGwgbmVlZCB0byBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcGFydGlhbCByZWFkcy4gR2l2ZW4gdGhlIG5hbWUsIEknZCBhbnRpY2lwYXRlIGl0J3MgZGVzaWduZWQgdG8gZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGF0J3Mgd2FpdGluZyBpbiB0aGUgcmluZyBidWZmZXIsIHdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mIGEgZnVsbCByZWFkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBkZXRlcm1pbmVzIHZhbGlkIGRhdGEgcmVnaW9ucywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdWJtaXNzaW9uIGFuZCBjb21wbGV0aW9uIHF1ZXVlcywgYW5kIGlmIGl0IHByb3ZpZGVzIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGF0YSdzIG1ldGFkYXRhLiBMZXQncyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MToxMC44NDY4MTE5ODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcva2J1Zi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTM6XFx0c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuIDI1NDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxcbiAyNTU6XFx0e1xcbiAyNTY6XFx0XFx0c3RydWN0IGlvX3VyaW5nX2J1Zl9yaW5nICpiciA9IGJsLVxcdTAwM2VidWZfcmluZztcXG4gMjU3OlxcdFxcdHN0cnVjdCBpb3ZlYyAqb3JnX2lvdnMgPSBhcmctXFx1MDAzZWlvdnM7XFxuIDI1ODpcXHRcXHRzdHJ1Y3QgaW92ZWMgKmlvdiA9IGFyZy1cXHUwMDNlaW92cztcXG4gMjU5OlxcdFxcdGludCBucl9pb3ZzID0gYXJnLVxcdTAwM2Vucl9pb3ZzO1xcbiAyNjA6XFx0XFx0X191MTYgbnJfYXZhaWwsIHRhaWwsIGhlYWQ7XFxuIDI2MTpcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfYnVmICpidWY7XFxuIDI2MjpcXHRcXG4gMjYzOlxcdFxcdHRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZici1cXHUwMDNldGFpbCk7XFxuIDI2NDpcXHRcXHRoZWFkID0gYmwtXFx1MDAzZWhlYWQ7XFxuIDI2NTpcXHRcXHRucl9hdmFpbCA9IG1pbl90KF9fdTE2LCB0YWlsIC0gaGVhZCwgVUlPX01BWElPVik7XFxuIDI2NjpcXHRcXHRpZiAodW5saWtlbHkoIW5yX2F2YWlsKSlcXG4gMjY3OlxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gMjY4OlxcdFxcbiAyNjk6XFx0XFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgaGVhZCwgYmwtXFx1MDAzZW1hc2spO1xcbiAyNzA6XFx0XFx0aWYgKGFyZy1cXHUwMDNlbWF4X2xlbikge1xcbiAyNzE6XFx0XFx0XFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXFx1MDAzZWxlbik7XFxuIDI3MjpcXHRcXHRcXHRzaXplX3QgbmVlZGVkO1xcbiAyNzM6XFx0XFxuIDI3NDpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWxlbikpXFxuIDI3NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIDI3NjpcXHRcXHRcXHRuZWVkZWQgPSAoYXJnLVxcdTAwM2VtYXhfbGVuICsgbGVuIC0gMSkgLyBsZW47XFxuIDI3NzpcXHRcXHRcXHRuZWVkZWQgPSBtaW5fbm90X3plcm8obmVlZGVkLCAoc2l6ZV90KSBQRUVLX01BWF9JTVBPUlQpO1xcbiAyNzg6XFx0XFx0XFx0aWYgKG5yX2F2YWlsIFxcdTAwM2UgbmVlZGVkKVxcbiAyNzk6XFx0XFx0XFx0XFx0bnJfYXZhaWwgPSBuZWVkZWQ7XFxuIDI4MDpcXHRcXHR9XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdC8qXFxuIDI4MzpcXHRcXHQgKiBvbmx5IGFsbG9jIGEgYmlnZ2VyIGFycmF5IGlmIHdlIGtub3cgd2UgaGF2ZSBkYXRhIHRvIG1hcCwgZWcgbm90XFxuIDI4NDpcXHRcXHQgKiBhIHNwZWN1bGF0aXZlIHBlZWsgb3BlcmF0aW9uLlxcbiAyODU6XFx0XFx0ICovXFxuIDI4NjpcXHRcXHRpZiAoYXJnLVxcdTAwM2Vtb2RlIFxcdTAwMjYgS0JVRl9NT0RFX0VYUEFORCBcXHUwMDI2XFx1MDAyNiBucl9hdmFpbCBcXHUwMDNlIG5yX2lvdnMgXFx1MDAyNlxcdTAwMjYgYXJnLVxcdTAwM2VtYXhfbGVuKSB7XFxuIDI4NzpcXHRcXHRcXHRpb3YgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvdmVjLCBucl9hdmFpbCk7XFxuIDI4ODpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWlvdikpXFxuIDI4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjkwOlxcdFxcdFxcdGFyZy1cXHUwMDNlaW92cyA9IGlvdjtcXG4gMjkxOlxcdFxcdFxcdG5yX2lvdnMgPSBucl9hdmFpbDtcXG4gMjkyOlxcdFxcdH0gZWxzZSBpZiAobnJfYXZhaWwgXFx1MDAzYyBucl9pb3ZzKSB7XFxuIDI5MzpcXHRcXHRcXHRucl9pb3ZzID0gbnJfYXZhaWw7XFxuIDI5NDpcXHRcXHR9XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdC8qIHNldCBpdCB0byBtYXgsIGlmIG5vdCBzZXQsIHNvIHdlIGNhbiB1c2UgaXQgdW5jb25kaXRpb25hbGx5ICovXFxuIDI5NzpcXHRcXHRpZiAoIWFyZy1cXHUwMDNlbWF4X2xlbilcXG4gMjk4OlxcdFxcdFxcdGFyZy1cXHUwMDNlbWF4X2xlbiA9IElOVF9NQVg7XFxuIDI5OTpcXHRcXG4gMzAwOlxcdFxcdHJlcS1cXHUwMDNlYnVmX2luZGV4ID0gUkVBRF9PTkNFKGJ1Zi1cXHUwMDNlYmlkKTtcXG4gMzAxOlxcdFxcdGRvIHtcXG4gMzAyOlxcdFxcdFxcdHUzMiBsZW4gPSBSRUFEX09OQ0UoYnVmLVxcdTAwM2VsZW4pO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRcXHQvKiB0cnVuY2F0ZSBlbmQgcGllY2UsIGlmIG5lZWRlZCwgZm9yIG5vbiBwYXJ0aWFsIGJ1ZmZlcnMgKi9cXG4gMzA1OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzZSBhcmctXFx1MDAzZW1heF9sZW4pIHtcXG4gMzA2OlxcdFxcdFxcdFxcdGxlbiA9IGFyZy1cXHUwMDNlbWF4X2xlbjtcXG4gMzA3OlxcdFxcdFxcdFxcdGlmICghKGJsLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfSU5DKSkge1xcbiAzMDg6XFx0XFx0XFx0XFx0XFx0YXJnLVxcdTAwM2VwYXJ0aWFsX21hcCA9IDE7XFxuIDMwOTpcXHRcXHRcXHRcXHRcXHRpZiAoaW92ICE9IGFyZy1cXHUwMDNlaW92cylcXG4gMzEwOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMTE6XFx0XFx0XFx0XFx0fVxcbiAzMTI6XFx0XFx0XFx0fVxcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRcXHRpb3YtXFx1MDAzZWlvdl9iYXNlID0gdTY0X3RvX3VzZXJfcHRyKFJFQURfT05DRShidWYtXFx1MDAzZWFkZHIpKTtcXG4gMzE1OlxcdFxcdFxcdGlvdi1cXHUwMDNlaW92X2xlbiA9IGxlbjtcXG4gMzE2OlxcdFxcdFxcdGlmICh1bmxpa2VseSghYWNjZXNzX29rKGlvdi1cXHUwMDNlaW92X2Jhc2UsIGxlbikpKSB7XFxuIDMxNzpcXHRcXHRcXHRcXHRpZiAoYXJnLVxcdTAwM2Vpb3ZzICE9IG9yZ19pb3ZzKVxcbiAzMTg6XFx0XFx0XFx0XFx0XFx0a2ZyZWUoYXJnLVxcdTAwM2Vpb3ZzKTtcXG4gMzE5OlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzMjA6XFx0XFx0XFx0fVxcbiAzMjE6XFx0XFx0XFx0aW92Kys7XFxuIDMyMjpcXHRcXG4gMzIzOlxcdFxcdFxcdGFyZy1cXHUwMDNlb3V0X2xlbiArPSBsZW47XFxuIDMyNDpcXHRcXHRcXHRhcmctXFx1MDAzZW1heF9sZW4gLT0gbGVuO1xcbiAzMjU6XFx0XFx0XFx0aWYgKCFhcmctXFx1MDAzZW1heF9sZW4pXFxuIDMyNjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0XFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgKytoZWFkLCBibC1cXHUwMDNlbWFzayk7XFxuIDMyOTpcXHRcXHR9IHdoaWxlICgtLW5yX2lvdnMpO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRpZiAoKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuIDMzMjpcXHRcXHRcXHRrZnJlZShvcmdfaW92cyk7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdGlmIChoZWFkID09IHRhaWwpXFxuIDMzNTpcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX0VNUFRZO1xcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRkZFUl9SSU5HO1xcbiAzMzg6XFx0XFx0cmV0dXJuIGlvdiAtIGFyZy1cXHUwMDNlaW92cztcXG4gMzM5OlxcdH1cXG4gMzQwOlxcdFxcbiAzNDE6XFx0aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4gMzQyOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiAzNDM6XFx0e1xcbiAzNDQ6XFx0XFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXFx1MDAzZWN0eDtcXG4gMzQ1OlxcdFxcdGludCByZXQgPSAtRU5PRU5UO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRpb19yaW5nX3N1Ym1pdF9sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiAzNDg6XFx0XFx0c2VsLVxcdTAwM2VidWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChjdHgsIGFyZy1cXHUwMDNlYnVmX2dyb3VwKTtcXG4gMzQ5OlxcdFxcdGlmICh1bmxpa2VseSghc2VsLVxcdTAwM2VidWZfbGlzdCkpXFxuIDM1MDpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGlmIChzZWwtXFx1MDAzZWJ1Zl9saXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfQlVGX1JJTkcpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMjA6NDE6MTAuODQ2OTYwOTgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NTcyNDMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIGtidWYuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb19yaW5nX2J1ZmZlcnNfcGVla2Agd2l0aGluIGBpb191cmluZy9rYnVmLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBgYXJnLVx1MDAzZWlvdnNgIGlzIGhhbmRsZWQgd2hlbiB0aGUgYEtCVUZfTU9ERV9GUkVFYCBmbGFnIGlzIHNldC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd2FzIHNpbXBseTpcblxuYGBgY1xuXHRpZiAoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxuXHRcdGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKTtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgYGFyZy1cdTAwM2Vpb3ZzYCB3YXMgYmVpbmcgdW5jb25kaXRpb25hbGx5IGZyZWVkIGlmIGBLQlVGX01PREVfRlJFRWAgd2FzIGFjdGl2ZS4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBgYXJnLVx1MDAzZWlvdnNgIGNhbiBiZSB1cGRhdGVkIGlmIHRoZSBgS0JVRl9NT0RFX0VYUEFORGAgZmxhZyBpcyBzZXQgYW5kIGBucl9hdmFpbCBcdTAwM2UgbnJfaW92c2AuXG5cbmBgYGNcblx0aWYgKGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRVhQQU5EIFx1MDAyNlx1MDAyNiBucl9hdmFpbCBcdTAwM2UgbnJfaW92cyBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZW1heF9sZW4pIHtcblx0XHRpb3YgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvdmVjLCBucl9hdmFpbCk7XG5cdFx0aWYgKHVubGlrZWx5KCFpb3YpKVxuXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5cdFx0YXJnLVx1MDAzZWlvdnMgPSBpb3Y7XG5cdFx0bnJfaW92cyA9IG5yX2F2YWlsO1xuXHR9XG5gYGBcblxuU28sIGlmIGFuIGV4cGFuc2lvbiBoYXBwZW5lZCwgYGFyZy1cdTAwM2Vpb3ZzYCB3b3VsZCBiZSBwb2ludGluZyB0byBhIG5ld2x5IGFsbG9jYXRlZCBhcnJheSwgd2hpbGUgdGhlIG9yaWdpbmFsIGFycmF5IG1pZ2h0IHN0aWxsIGJlIGluIHVzZS4gVGhlIHBhdGNoIG5vdyBpbnRyb2R1Y2VzIGEgY2hlY2s6XG5cbmBgYGNcblx0aWYgKChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92cylcblx0XHRrZnJlZShvcmdfaW92cyk7XG5gYGBcblxuQWgsIEkgc2VlIGl0IG5vdy4gVGhlIHBhdGNoIGlzIG5vdyBmcmVlaW5nIHRoZSAqb2xkKiBhcnJheSAoYG9yZ19pb3ZzYCkgaWYgYSBuZXcgYXJyYXkgd2FzIGFsbG9jYXRlZC4gTWFrZXMgc2Vuc2UuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwcm9iYWJseSBsZWFraW5nIG1lbW9yeSBvciwgd29yc2UsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24hIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGZyZWUgYGFyZy1cdTAwM2Vpb3ZzYCBhbmQgdGhlbiBoYW5kIGJhY2sgYSBwb2ludGVyIHRvIGZyZWVkIG1lbW9yeSEgSSBzdXNwZWN0IHRoYXQgdGhlIGNhbGxlciBleHBlY3RzIGBhcmctXHUwMDNlaW92c2AgdG8gYmUgdmFsaWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBhbmQgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBpdCBsYXRlci4gXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHdoZXJlIGBLQlVGX01PREVfRlJFRWAgaXMgYWN0dWFsbHkgc2V0IGFuZCBob3cgdGhlIHJldHVybmVkIGBhcmctXHUwMDNlaW92c2AgaXMgdXNlZC4gVGhhdCdsbCBzb2xpZGlmeSB0aGlzIGV2ZW4gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjE5LjEwMjY4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMwODQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLQlVGX01PREVfRlJFRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTI1Mz1zdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0zMzAtXFxuaW9fdXJpbmcva2J1Zi5jOjMzMTpcXHRpZiAoKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuaW9fdXJpbmcva2J1Zi5jLTMzMi1cXHRcXHRrZnJlZShvcmdfaW92cyk7XFxuLS1cXG5pb191cmluZy9rYnVmLmg9NTM9ZW51bSB7XFxuLS1cXG5pb191cmluZy9rYnVmLmgtNTYtXFx0LyogaWYgYmlnZ2VyIHZlYyBhbGxvY2F0ZWQsIGZyZWUgb2xkIG9uZSAqL1xcbmlvX3VyaW5nL2tidWYuaDo1NzpcXHRLQlVGX01PREVfRlJFRVxcdFxcdD0gMixcXG5pb191cmluZy9rYnVmLmgtNTgtfTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTYwOD1zdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNjIyLVxcdFxcdGFyZy5pb3ZzID0ga21zZy1cXHUwMDNldmVjLmlvdmVjO1xcbmlvX3VyaW5nL25ldC5jOjYyMzpcXHRcXHRhcmcubW9kZSA9IEtCVUZfTU9ERV9GUkVFO1xcbmlvX3VyaW5nL25ldC5jLTYyNC1cXHR9XFxuLS1cXG5pb191cmluZy9uZXQuYz0xMTM3PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTE1OS1cXHRcXHRcXHRhcmcuaW92cyA9IGttc2ctXFx1MDAzZXZlYy5pb3ZlYztcXG5pb191cmluZy9uZXQuYzoxMTYwOlxcdFxcdFxcdGFyZy5tb2RlIHw9IEtCVUZfTU9ERV9GUkVFO1xcbmlvX3VyaW5nL25ldC5jLTExNjEtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MToxOS4xNjE5OTkxNzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDcyNjY3OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpeGluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiBpb191cmluZyBOZXR3b3JrIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBLQlVGX01PREVfRlJFRWAgZmxhZyBpbiB0aGUgY29udGV4dCBvZiBgaW9fdXJpbmdgIGFuZCBJIHRoaW5rIEkndmUgc3BvdHRlZCBhIGNydWNpYWwgYnVnIGZpeC4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIGBLQlVGX01PREVfRlJFRWAgbWVhbnMgdGhhdCBpZiBhIGxhcmdlciB2ZWN0b3IgKGB2ZWNgKSBpcyBhbGxvY2F0ZWQsIHRoZW4gdGhlICpvbGQqIG9uZSBuZWVkcyB0byBiZSBmcmVlZC4gTG9va2luZyBhdCB0aGUgb3JpZ2luYWwgY29kZTpcblxuYGBgY1xuXHRpZiAoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxuXHRcdGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKTtcbmBgYFxuXG4uLi5pdCdzIHByZXR0eSBjbGVhciB0aGlzIHdhcyBmcmVlaW5nIGBhcmctXHUwMDNlaW92c2AsIHdoaWNoIGlzIHRoZSAqbmV3KiBidWZmZXIgKG9yIHBvdGVudGlhbGx5IHRoZSBvbGQgb25lIGlmIG5vdGhpbmcgd2FzIHJlYWxsb2NhdGVkKS4gVGhhdCdzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIHVwZGF0ZWQgY29kZSwgaG93ZXZlciwgaXMgbXVjaCBiZXR0ZXI6XG5cbmBgYGNcblx0aWYgKChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92cylcblx0XHRrZnJlZShvcmdfaW92cyk7XG5gYGBcblxuTm93LCBpdCBjb3JyZWN0bHkgZnJlZXMgdGhlICpvbGQqIGJ1ZmZlciAoYG9yZ19pb3ZzYCkgb25seSBpZiBhIG5ldyBvbmUgd2FzIGFsbG9jYXRlZC4gVGhpcyBkZWZpbml0aXZlbHkgc29sdmVzIHRoZSBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHRoYXQgd2FzIHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSByZWFsIGJ1ZyBmaXguXG5cblRoaXMgZml4IGxpa2VseSB0YXJnZXRzIG5ldHdvcmsgb3BlcmF0aW9ucyB3aXRoaW4gYGlvX3VyaW5nYCwgc3BlY2lmaWNhbGx5IGluIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YCB3aGVyZSB0aGlzIGBLQlVGX01PREVfRlJFRWAgZmxhZyBjb21lcyBpbnRvIHBsYXkuIEl0IG1ha2VzIHNlbnNlIHRvIGZ1enogdGhlc2UgYXJlYXMgcGFydGljdWxhcmx5LCBhbG9uZyB3aXRoIHBvdGVudGlhbGx5IHJlbGF0ZWQgc3ltYm9sczogYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCwgYW5kIGBpb19idWZmZXJzX3BlZWtgLlxuXG5JIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciB0aGlzIHRvIGJlIHJlbGV2YW50LiBgaW9fdXJpbmdgIGl0c2VsZiBpcyBlbmFibGVkIGJ5IGBDT05GSUdfSU9fVVJJTkdgLCBzbyB0aGF0J3MgdGhlIGJhc2UgcmVxdWlyZW1lbnQuIE5ldHdvcmsgb3BlcmF0aW9ucyB3aXRoaW4gYGlvX3VyaW5nYCBzaG91bGQgYmUgcHJldHR5IHN0YW5kYXJkIG90aGVyd2lzZS4gTm93LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGlvX3VyaW5nL25ldC5jYCB0byBpZGVudGlmeSB0aGUgZXhhY3QgZnVuY3Rpb25zIHRoYXQgdXNlIHRoaXMgbmV3IGxvZ2ljLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIG1vcmUgY29kZSBpbXBhY3RlZCwgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzcwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjI1LjIzNDY2OTMzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzMTEyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF9zZWxlY3RfYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTU1OT1pbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNjA3LVxcbmlvX3VyaW5nL25ldC5jOjYwODpzdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxcbmlvX3VyaW5nL25ldC5jLTYwOS1cXHRcXHRcXHRcXHQgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NjU2PWludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy02ODktXFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xcbmlvX3VyaW5nL25ldC5jOjY5MDpcXHRcXHRyZXQgPSBpb19zZW5kX3NlbGVjdF9idWZmZXIocmVxLCBpc3N1ZV9mbGFncywgXFx1MDAyNnNlbCwga21zZyk7XFxuaW9fdXJpbmcvbmV0LmMtNjkxLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjI1LjI5Mjk5Njc5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUxMjk4MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSBub2QgdG8gdGhlIGZhY3QgdGhhdCBJJ20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6XG5cbioqRGVsdmluZyBpbnRvIGlvX3VyaW5nJ3MgQ29yZSBJTyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgaW9fc2VuZGAgYW5kIGBpb19yZWN2YCwgYW5kIHBvdGVudGlhbGx5IHRoZWlyIG1lc3NhZ2UtcGFzc2luZyBjb3VudGVycGFydHMgYGlvX3NlbmRtc2dgIGFuZCBgaW9fcmVjdm1zZ2AsIGFyZSBmdW5kYW1lbnRhbGx5IHRpZWQgdG8gdGhpcyB1bmRlcmx5aW5nIG1lY2hhbmlzbS4gVGhpcyBpcyAqY29yZSogYGlvX3VyaW5nYCBzdHVmZiwgdGhlIGJyZWFkIGFuZCBidXR0ZXIuIEl04oCZcyB3aGF0IG1ha2VzIHRoZSBhc3luY2hyb25vdXMsIHplcm8tY29weSBvcGVyYXRpb25zIHBvc3NpYmxlLiBJIG5lZWQgdG8ga2VlcCB0aGlzIHJlbGF0aW9uc2hpcCBmcm9udCBvZiBtaW5kIHdoZW4gSeKAmW0gZGlnZ2luZyBpbnRvIHRoZSBhcmNoaXRlY3R1cmUgb3Igb3B0aW1pemluZyB0aGVzZSBmdW5jdGlvbnMuXG5cbkFuZCB3aGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIHByb2JhYmx5IGdsYW5jZSBhdCBgaW9fcmVjdl9idWZfc2VsZWN0YCB0b28uIEp1c3QgdG8gbWFrZSBzdXJlIGl0J3MgY29uc2lzdGVudCB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEl0IHdvdWxkbid0IGh1cnQgdG8gaGF2ZSB0aGF0IGNvbnRleHQgZnJlc2guIEl0IGNvdWxkIHJldmVhbCBzb21lIGludGVyZXN0aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MToyOC43NDQyOTc2OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzU2MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz0xMDUwPWludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTM2LVxcbmlvX3VyaW5nL25ldC5jOjExMzc6c3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuaW9fdXJpbmcvbmV0LmMtMTEzOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEyMDk9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyNDctXFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuaW9fdXJpbmcvbmV0LmM6MTI0ODpcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTI0OS1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMjA6NDE6MjguODAyNjYyNTE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjk4MTEwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBpb191cmluZyBhbmQgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBpb191cmluZ2AgYW5kIGl0cyByb2xlIGluIG5ldHdvcmsgb3BlcmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB5ZXMsIHRoZSBgaW9fcmVjdmAgZnVuY3Rpb24gZGVmaW5pdGVseSBsZXZlcmFnZXMgaXQuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIHNwZWNpZmljcy4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgcGVydGFpbiB0byB1c2luZyBgaW9fdXJpbmdgIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkuIEJleW9uZCB0aGUgb2J2aW91cywgd2hpY2ggSSBzdXNwZWN0IGlzIHRoZSBgQ09ORklHX0lPX1VSSU5HYCBvcHRpb24sIEkga25vdyBgQ09ORklHX05FVGAgaXMgZnVuZGFtZW50YWwgZm9yIGFueXRoaW5nIG5ldHdvcmtpbmcgcmVsYXRlZCwgYnV0IGlzIHRoZXJlIGFueXRoaW5nIG1vcmUgZ3JhbnVsYXI/XG5cbk15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGRlZmluaXRpdmUgYW5zd2VycyBhYm91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIG51YW5jZXMuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MTozMi4xNzI0NzU2ODNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgaW9fdXJpbmcgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgSU9fVVJJTkdfWkNSWFxcbiAgIDc6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcXG4gIDEwOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBORVRfUlhfQlVTWV9QT0xMXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBJT19VUklOR19CUEZcXG4gIDE0OlxcdFxcdGRlZl9ib29sIHlcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbiAgMTk6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjMyLjE3MjU0NTUwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQzNTY2MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElPX1VSSU5HIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbkhtbSwgc28gaXQgbG9va3MgbGlrZSBgaW9fdXJpbmdgJ3MgZnVuY3Rpb25hbGl0eSBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbiBgQ09ORklHX0lPX1VSSU5HYC4gUmlnaHQsIHRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLiBNeSBuZXh0IHN0ZXAgc2hvdWxkIGJlIHRvIGRlbHZlIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGBJT19VUklOR2AgaXMgZGVmaW5lZCwgaXRzIGRlcGVuZGVuY2llcyAoaWYgYW55KSwgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gSXQncyBjcnVjaWFsIHRvIGtub3cgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpZiBJJ20gZ29pbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgYmVoYXZlcyBpbiBwcmFjdGljZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHdob2xlIHBpY3R1cmUgdG8gYW5zd2VyIHRoZSBxdWVzdGlvbiBhdCBoYW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTUxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MTozNS4wMTYxMTMyMjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjU0MDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MDc9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTQtXFxuaW5pdC9LY29uZmlnOjE5MTU6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTYtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzYtXFxuaW5pdC9LY29uZmlnOjE5Mzc6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTM4LVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjM1LjA3Mzc3MjM0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODc1NDk4NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJT19VUklORyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgYElPX1VSSU5HYCBwYXRjaCBpbiBmcm9udCBvZiBtZS4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGEgYnVnIGZpeCBpbiB0aGUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyB3aGVuIGBLQlVGX01PREVfRlJFRWAgd2FzIHNldCwgYmVjYXVzZSBpdCB3YXMgZnJlZWluZyB0aGUgd3JvbmcgaW92ZWMgYXJyYXkgKGBhcmctXHUwMDNlaW92c2AgaW5zdGVhZCBvZiBgb3JnX2lvdnNgKS4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLlxuXG5NeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMsIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgd2VyZSBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCwgYGlvX3JlY3ZfYnVmX3NlbGVjdGAsIGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgLiBCdXQsIGxldCBtZSBkb3VibGUgY2hlY2sgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYW5kIGFoIHllcywgaXQgaXMgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrbm93LiBBbmQgbG9va2luZyBhdCB0aGUgY2FsbCBzaXRlcywgSSBzZWUgaXQncyBjYWxsZWQgYnkgYm90aCBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCwgc28gdGhlc2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgaW5jbHVkZWQgaW4gdGhlIGZvY3VzIHN5bWJvbCBsaXN0IGFzIHdlbGwuXG5cbkkgY2FuJ3Qgc2VlIGFueXRoaW5nIG9kZCB3aXRoIHRoZSBjb25maWcgZW5hYmxpbmcsIGBJT19VUklOR2AgYW5kIGBORVRgIHNlZW0gYXBwcm9wcmlhdGUuIEFsdGhvdWdoIGBORVRgIGlzIHN0YW5kYXJkLCBgSU9fVVJJTkdgIGlzIGEgZ29vZCBjb25maWcgdG8gY2hlY2suXG5cblRoZSBpc3N1ZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IHdoZW4gZGVhbGluZyB3aXRoIGlvX3VyaW5nIG5ldHdvcmsgb3BlcmF0aW9ucyAobGlrZSBzZW5kcyBhbmQgcmVjZWl2ZXMpIGFuZCB1c2luZyBidWZmZXIgc2VsZWN0aW9uLCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGUgY29ycmVjdCBpb3ZlYyBhcnJheSAoYG9yZ19pb3ZzYCkgaXMgZnJlZWQgd2hlbiBhIG5ldyBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBgS0JVRl9NT0RFX0ZSRUVgIGZsYWcgaXMgc2V0LiBUaGF0J3MgYSBnb29kIGZpeCwgcHJldmVudGluZyBhIGxpa2VseSBtZW1vcnkgaXNzdWUuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoaXMgc2V0IHRvIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTQzLCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MTo0MS45NDkyNzI1MDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDUxMTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19zZW5kX3NlbGVjdF9idWZmZXJcIixcbiAgICBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfcGVla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cXHUwMDNlaW92c2Agd2hlbiBhIG5ldyBpb3ZlYyBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LiBUaGlzIGFmZmVjdHMgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zIGxpa2Ugc2VuZCBhbmQgcmVjdiB3aGVuIHVzaW5nIGJ1ZmZlciBzZWxlY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19zZW5kX3NlbGVjdF9idWZmZXJcIixcbiAgICBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfcGVla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cXHUwMDNlaW92c2Agd2hlbiBhIG5ldyBpb3ZlYyBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LiBUaGlzIGFmZmVjdHMgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zIGxpa2Ugc2VuZCBhbmQgcmVjdiB3aGVuIHVzaW5nIGJ1ZmZlciBzZWxlY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow75dn7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-12 20:25:52 +0000 UTC FinishedAt: 2026-07-12 20:41:44 +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": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "NET" ], "series_id": "b9b6c7bf-5eaa-4121-98fd-b42ccd846b60" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_ring_buffers_peek", "io_send_select_buffer", "io_recv_buf_select", "io_buffers_select", "io_buffers_peek" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX3NlbmRfc2VsZWN0X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtpb19yZWN2X2J1Zl9zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cdTAwM2Vpb3ZzYCB3aGVuIGEgbmV3IGlvdmVjIGFycmF5IGlzIGFsbG9jYXRlZCBhbmQgYEtCVUZfTU9ERV9GUkVFYCBpcyBzZXQuIFRoaXMgYWZmZWN0cyBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMgbGlrZSBzZW5kIGFuZCByZWN2IHdoZW4gdXNpbmcgYnVmZmVyIHNlbGVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAyMDo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUxNGI4NWQ5ODYzOWFkNGJlMGM1MDNiZGI5YjVhZjQwNmUyYjRmNjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAyMDo0MTowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9rYnVmLmMgYi9pb191cmluZy9rYnVmLmNcbmluZGV4IGI2Yjk2OWI1NWUxMjI0Li4wN2Q4MWRjN2NiZTI5NiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2tidWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcva2J1Zi5jXG5AQCAtMzI4LDggJiM0MzszMjgsOCBAQCBzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbiBcdFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgJiM0MzsmIzQzO2hlYWQsIGJsLVx1MDAzZW1hc2spO1xuIFx0fSB3aGlsZSAoLS1ucl9pb3ZzKTtcbiBcbi1cdGlmIChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpXG4tXHRcdGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKTtcbiYjNDM7XHRpZiAoKGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRlJFRSkgXHUwMDI2XHUwMDI2IGFyZy1cdTAwM2Vpb3ZzICE9IG9yZ19pb3ZzKVxuJiM0MztcdFx0a2ZyZWUob3JnX2lvdnMpO1xuIFxuIFx0aWYgKGhlYWQgPT0gdGFpbClcbiBcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX0VNUFRZO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX3NlbmRfc2VsZWN0X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtpb19yZWN2X2J1Zl9zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cdTAwM2Vpb3ZzYCB3aGVuIGEgbmV3IGlvdmVjIGFycmF5IGlzIGFsbG9jYXRlZCBhbmQgYEtCVUZfTU9ERV9GUkVFYCBpcyBzZXQuIFRoaXMgYWZmZWN0cyBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMgbGlrZSBzZW5kIGFuZCByZWN2IHdoZW4gdXNpbmcgYnVmZmVyIHNlbGVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTE0Yjg1ZDk4NjM5YWQ0YmUwYzUwM2JkYjliNWFmNDA2ZTJiNGY2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDIwOjQxOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jCmluZGV4IGI2Yjk2OWI1NWUxMjI0Li4wN2Q4MWRjN2NiZTI5NiAxMDA2NDQKLS0tIGEvaW9fdXJpbmcva2J1Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2tidWYuYwpAQCAtMzI4LDggJiM0MzszMjgsOCBAQCBzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZywKIAkJYnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgJiM0MzsmIzQzO2hlYWQsIGJsLSZndDttYXNrKTsKIAl9IHdoaWxlICgtLW5yX2lvdnMpOwogCi0JaWYgKGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRlJFRSkKLQkJa2ZyZWUoYXJnLSZndDtpb3ZzKTsKJiM0MzsJaWYgKChhcmctJmd0O21vZGUgJmFtcDsgS0JVRl9NT0RFX0ZSRUUpICZhbXA7JmFtcDsgYXJnLSZndDtpb3ZzICE9IG9yZ19pb3ZzKQomIzQzOwkJa2ZyZWUob3JnX2lvdnMpOwogCiAJaWYgKGhlYWQgPT0gdGFpbCkKIAkJcmVxLSZndDtmbGFncyB8PSBSRVFfRl9CTF9FTVBUWTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBpb191cmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlvX3VyaW5nL2tidWYuY2AuIEl0JiMzOTtzIGEgZmFpcmx5IHNwZWNpZmljIGNoYW5nZSB3aXRoaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNhdGNoaW5nIG15IGV5ZS4gVGhleSYjMzk7dmUgbW9kaWZpZWQgdGhlIGNvbmRpdGlvbiBmb3IgZnJlZWluZyBgYXJnLSZndDtpb3ZzYC4gSG1tLCBpbnN0ZWFkIG9mIHRoZSBzdHJhaWdodGZvcndhcmQgYGtmcmVlKGFyZy0mZ3Q7aW92cylgIHdoZW4gYEtCVUZfTU9ERV9GUkVFYCBpcyBzZXQsIHdlIG5vdyBoYXZlIHRoaXMgY2hlY2s6IGBrZnJlZShvcmdfaW92cylgIGJ1dCBvbmx5IGlmIGBhcmctJmd0O2lvdnNgIGlzICpub3QqIGVxdWFsIHRvIGBvcmdfaW92c2AuCgpUaGF0IGNoYW5nZSBmcm9tIGBhcmctJmd0O2lvdnNgIHRvIGBvcmdfaW92c2AgaXMgdGhlIGNydXggb2YgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5JiMzOTtyZSBmcmVlaW5nIGBvcmdfaW92c2AgYW5kIHdoYXQgYG9yZ19pb3ZzYCByZXByZXNlbnRzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbiBkZWZpbml0aW9uIHdpdGhpbiBgaW9fdXJpbmcva2J1Zi5jYCB0byBzZWUgaG93IHRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCBhbmQgaG93IGBvcmdfaW92c2AgaXMgYXNzaWduZWQuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgYWxpYXNpbmcgb3IgY29weS1vbi13cml0ZSBvcHRpbWl6YXRpb24sIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IHRvIGJlIGNlcnRhaW4uIE15IGd1ZXNzIGlzIHRoZXJlIGlzIGFuIG9yaWdpbmFsIHNldCBvZiBpb3ZzIHVzZWQgYXQgc29tZSBwb2ludCBhbmQgdGhhdCBpcyB0aGUgb25lIHRoYXQgbmVlZHMgdG8gYmUgZnJlZWQgdW5kZXIgdGhlIHVwZGF0ZWQgY29uZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2tidWYuYz0yMzA9c3RydWN0IGlvX2JyX3NlbCBpb19idWZmZXJfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzaXplX3QgKmxlbixcbi0tXG5pb191cmluZy9rYnVmLmMtMjUyLVxuaW9fdXJpbmcva2J1Zi5jOjI1MzpzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbmlvX3VyaW5nL2tidWYuYy0yNTQtXHRcdFx0XHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxuLS1cbmlvX3VyaW5nL2tidWYuYz0zNDE9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzUyLVx0aWYgKHNlbC1cdTAwM2VidWZfbGlzdC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuaW9fdXJpbmcva2J1Zi5jOjM1MzpcdFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIHNlbC1cdTAwM2VidWZfbGlzdCk7XG5pb191cmluZy9rYnVmLmMtMzU0LVx0XHQvKlxuLS1cbmlvX3VyaW5nL2tidWYuYz0zNzc9aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTM5MC1cdGlmIChibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuaW9fdXJpbmcva2J1Zi5jOjM5MTpcdFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIGJsKTtcbmlvX3VyaW5nL2tidWYuYy0zOTItXHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbiwgYXMgYW4gZXhwZXJ0IHdobyYjMzk7cyB3b3JrZWQgd2l0aCBJL08gYW5kIGtlcm5lbCBpbnRlcm5hbHMgYmVmb3JlOgoKKipQZWVraW5nIGludG8gaW9fcmluZ19idWZmZXJzKioKCkFscmlnaHQsIEkgc2VlIHdlJiMzOTtyZSBoZWFkaW5nIGludG8gYGlvX3VyaW5nL2tidWYuY2AgdG8gbG9vayBhdCBgaW9fcmluZ19idWZmZXJzX3BlZWtgLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZGVzaWduZWQgZm9yIGEgbm9uLWRlc3RydWN0aXZlIHJlYWQsIGEgJiMzNDtsb29rLWJ1dC1kb24mIzM5O3QtdG91Y2gmIzM0OyBraW5kIG9mIG9wZXJhdGlvbi4gSXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGV4YW1pbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciByaW5nIHdpdGhvdXQgYWN0dWFsbHkgY29uc3VtaW5nIG9yIG1vZGlmeWluZyB0aGUgZGF0YSB3aXRoaW4gaXQuIFRoYXQgbWFrZXMgc2Vuc2U7IGluIHRoZSB3b3JsZCBvZiBlZmZpY2llbnQgYXN5bmNocm9ub3VzIEkvTywgeW91IG9mdGVuIG5lZWQgdG8gcXVpY2tseSBjaGVjayB3aGF0JiMzOTtzIHRoZXJlIGJlZm9yZSBjb21taXR0aW5nIHRvIHByb2Nlc3NpbmcgaXQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgcHJvYmFibHkgY3J1Y2lhbCBpbiBhbnkgc2NoZW1lIHRoYXQgaW52b2x2ZXMgc2hhcmVkIG1lbW9yeS4gSSYjMzk7bGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gZm9yIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucy4gVGhpcyB3b3VsZCBtZWFuIGxvb2tpbmcgZm9yIGxvY2tzLCBhdG9taWMgb3BlcmF0aW9ucywgb3IgY2FyZWZ1bCBtZW1vcnkgb3JkZXJpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBhcnRpYWwgcmVhZHMuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTtkIGFudGljaXBhdGUgaXQmIzM5O3MgZGVzaWduZWQgdG8gZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGF0JiMzOTtzIHdhaXRpbmcgaW4gdGhlIHJpbmcgYnVmZmVyLCB3aXRob3V0IHRoZSBvdmVyaGVhZCBvZiBhIGZ1bGwgcmVhZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGRldGVybWluZXMgdmFsaWQgZGF0YSByZWdpb25zLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN1Ym1pc3Npb24gYW5kIGNvbXBsZXRpb24gcXVldWVzLCBhbmQgaWYgaXQgcHJvdmlkZXMgYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZSBkYXRhJiMzOTtzIG1ldGFkYXRhLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUzOlx0c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXG4gMjU0Olx0XHRcdFx0XHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxuIDI1NTpcdHtcbiAyNTY6XHRcdHN0cnVjdCBpb191cmluZ19idWZfcmluZyAqYnIgPSBibC1cdTAwM2VidWZfcmluZztcbiAyNTc6XHRcdHN0cnVjdCBpb3ZlYyAqb3JnX2lvdnMgPSBhcmctXHUwMDNlaW92cztcbiAyNTg6XHRcdHN0cnVjdCBpb3ZlYyAqaW92ID0gYXJnLVx1MDAzZWlvdnM7XG4gMjU5Olx0XHRpbnQgbnJfaW92cyA9IGFyZy1cdTAwM2Vucl9pb3ZzO1xuIDI2MDpcdFx0X191MTYgbnJfYXZhaWwsIHRhaWwsIGhlYWQ7XG4gMjYxOlx0XHRzdHJ1Y3QgaW9fdXJpbmdfYnVmICpidWY7XG4gMjYyOlx0XG4gMjYzOlx0XHR0YWlsID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZici1cdTAwM2V0YWlsKTtcbiAyNjQ6XHRcdGhlYWQgPSBibC1cdTAwM2VoZWFkO1xuIDI2NTpcdFx0bnJfYXZhaWwgPSBtaW5fdChfX3UxNiwgdGFpbCAtIGhlYWQsIFVJT19NQVhJT1YpO1xuIDI2NjpcdFx0aWYgKHVubGlrZWx5KCFucl9hdmFpbCkpXG4gMjY3Olx0XHRcdHJldHVybiAtRU5PQlVGUztcbiAyNjg6XHRcbiAyNjk6XHRcdGJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsIGhlYWQsIGJsLVx1MDAzZW1hc2spO1xuIDI3MDpcdFx0aWYgKGFyZy1cdTAwM2VtYXhfbGVuKSB7XG4gMjcxOlx0XHRcdHUzMiBsZW4gPSBSRUFEX09OQ0UoYnVmLVx1MDAzZWxlbik7XG4gMjcyOlx0XHRcdHNpemVfdCBuZWVkZWQ7XG4gMjczOlx0XG4gMjc0Olx0XHRcdGlmICh1bmxpa2VseSghbGVuKSlcbiAyNzU6XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gMjc2Olx0XHRcdG5lZWRlZCA9IChhcmctXHUwMDNlbWF4X2xlbiAmIzQzOyBsZW4gLSAxKSAvIGxlbjtcbiAyNzc6XHRcdFx0bmVlZGVkID0gbWluX25vdF96ZXJvKG5lZWRlZCwgKHNpemVfdCkgUEVFS19NQVhfSU1QT1JUKTtcbiAyNzg6XHRcdFx0aWYgKG5yX2F2YWlsIFx1MDAzZSBuZWVkZWQpXG4gMjc5Olx0XHRcdFx0bnJfYXZhaWwgPSBuZWVkZWQ7XG4gMjgwOlx0XHR9XG4gMjgxOlx0XG4gMjgyOlx0XHQvKlxuIDI4MzpcdFx0ICogb25seSBhbGxvYyBhIGJpZ2dlciBhcnJheSBpZiB3ZSBrbm93IHdlIGhhdmUgZGF0YSB0byBtYXAsIGVnIG5vdFxuIDI4NDpcdFx0ICogYSBzcGVjdWxhdGl2ZSBwZWVrIG9wZXJhdGlvbi5cbiAyODU6XHRcdCAqL1xuIDI4NjpcdFx0aWYgKGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRVhQQU5EIFx1MDAyNlx1MDAyNiBucl9hdmFpbCBcdTAwM2UgbnJfaW92cyBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZW1heF9sZW4pIHtcbiAyODc6XHRcdFx0aW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgbnJfYXZhaWwpO1xuIDI4ODpcdFx0XHRpZiAodW5saWtlbHkoIWlvdikpXG4gMjg5Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjkwOlx0XHRcdGFyZy1cdTAwM2Vpb3ZzID0gaW92O1xuIDI5MTpcdFx0XHRucl9pb3ZzID0gbnJfYXZhaWw7XG4gMjkyOlx0XHR9IGVsc2UgaWYgKG5yX2F2YWlsIFx1MDAzYyBucl9pb3ZzKSB7XG4gMjkzOlx0XHRcdG5yX2lvdnMgPSBucl9hdmFpbDtcbiAyOTQ6XHRcdH1cbiAyOTU6XHRcbiAyOTY6XHRcdC8qIHNldCBpdCB0byBtYXgsIGlmIG5vdCBzZXQsIHNvIHdlIGNhbiB1c2UgaXQgdW5jb25kaXRpb25hbGx5ICovXG4gMjk3Olx0XHRpZiAoIWFyZy1cdTAwM2VtYXhfbGVuKVxuIDI5ODpcdFx0XHRhcmctXHUwMDNlbWF4X2xlbiA9IElOVF9NQVg7XG4gMjk5Olx0XG4gMzAwOlx0XHRyZXEtXHUwMDNlYnVmX2luZGV4ID0gUkVBRF9PTkNFKGJ1Zi1cdTAwM2ViaWQpO1xuIDMwMTpcdFx0ZG8ge1xuIDMwMjpcdFx0XHR1MzIgbGVuID0gUkVBRF9PTkNFKGJ1Zi1cdTAwM2VsZW4pO1xuIDMwMzpcdFxuIDMwNDpcdFx0XHQvKiB0cnVuY2F0ZSBlbmQgcGllY2UsIGlmIG5lZWRlZCwgZm9yIG5vbiBwYXJ0aWFsIGJ1ZmZlcnMgKi9cbiAzMDU6XHRcdFx0aWYgKGxlbiBcdTAwM2UgYXJnLVx1MDAzZW1heF9sZW4pIHtcbiAzMDY6XHRcdFx0XHRsZW4gPSBhcmctXHUwMDNlbWF4X2xlbjtcbiAzMDc6XHRcdFx0XHRpZiAoIShibC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9JTkMpKSB7XG4gMzA4Olx0XHRcdFx0XHRhcmctXHUwMDNlcGFydGlhbF9tYXAgPSAxO1xuIDMwOTpcdFx0XHRcdFx0aWYgKGlvdiAhPSBhcmctXHUwMDNlaW92cylcbiAzMTA6XHRcdFx0XHRcdFx0YnJlYWs7XG4gMzExOlx0XHRcdFx0fVxuIDMxMjpcdFx0XHR9XG4gMzEzOlx0XG4gMzE0Olx0XHRcdGlvdi1cdTAwM2Vpb3ZfYmFzZSA9IHU2NF90b191c2VyX3B0cihSRUFEX09OQ0UoYnVmLVx1MDAzZWFkZHIpKTtcbiAzMTU6XHRcdFx0aW92LVx1MDAzZWlvdl9sZW4gPSBsZW47XG4gMzE2Olx0XHRcdGlmICh1bmxpa2VseSghYWNjZXNzX29rKGlvdi1cdTAwM2Vpb3ZfYmFzZSwgbGVuKSkpIHtcbiAzMTc6XHRcdFx0XHRpZiAoYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG4gMzE4Olx0XHRcdFx0XHRrZnJlZShhcmctXHUwMDNlaW92cyk7XG4gMzE5Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzIwOlx0XHRcdH1cbiAzMjE6XHRcdFx0aW92JiM0MzsmIzQzOztcbiAzMjI6XHRcbiAzMjM6XHRcdFx0YXJnLVx1MDAzZW91dF9sZW4gJiM0Mzs9IGxlbjtcbiAzMjQ6XHRcdFx0YXJnLVx1MDAzZW1heF9sZW4gLT0gbGVuO1xuIDMyNTpcdFx0XHRpZiAoIWFyZy1cdTAwM2VtYXhfbGVuKVxuIDMyNjpcdFx0XHRcdGJyZWFrO1xuIDMyNzpcdFxuIDMyODpcdFx0XHRidWYgPSBpb19yaW5nX2hlYWRfdG9fYnVmKGJyLCAmIzQzOyYjNDM7aGVhZCwgYmwtXHUwMDNlbWFzayk7XG4gMzI5Olx0XHR9IHdoaWxlICgtLW5yX2lvdnMpO1xuIDMzMDpcdFxuIDMzMTpcdFx0aWYgKChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92cylcbiAzMzI6XHRcdFx0a2ZyZWUob3JnX2lvdnMpO1xuIDMzMzpcdFxuIDMzNDpcdFx0aWYgKGhlYWQgPT0gdGFpbClcbiAzMzU6XHRcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX0VNUFRZO1xuIDMzNjpcdFxuIDMzNzpcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRkZFUl9SSU5HO1xuIDMzODpcdFx0cmV0dXJuIGlvdiAtIGFyZy1cdTAwM2Vpb3ZzO1xuIDMzOTpcdH1cbiAzNDA6XHRcbiAzNDE6XHRpbnQgaW9fYnVmZmVyc19zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxuIDM0MjpcdFx0XHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiAzNDM6XHR7XG4gMzQ0Olx0XHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IHJlcS1cdTAwM2VjdHg7XG4gMzQ1Olx0XHRpbnQgcmV0ID0gLUVOT0VOVDtcbiAzNDY6XHRcbiAzNDc6XHRcdGlvX3Jpbmdfc3VibWl0X2xvY2soY3R4LCBpc3N1ZV9mbGFncyk7XG4gMzQ4Olx0XHRzZWwtXHUwMDNlYnVmX2xpc3QgPSBpb19idWZmZXJfZ2V0X2xpc3QoY3R4LCBhcmctXHUwMDNlYnVmX2dyb3VwKTtcbiAzNDk6XHRcdGlmICh1bmxpa2VseSghc2VsLVx1MDAzZWJ1Zl9saXN0KSlcbiAzNTA6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIDM1MTpcdFxuIDM1MjpcdFx0aWYgKHNlbC1cdTAwM2VidWZfbGlzdC1cdTAwM2VmbGFncyBcdTAwMjYgSU9CTF9CVUZfUklORykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBrYnVmLmMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb19yaW5nX2J1ZmZlcnNfcGVla2Agd2l0aGluIGBpb191cmluZy9rYnVmLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBgYXJnLSZndDtpb3ZzYCBpcyBoYW5kbGVkIHdoZW4gdGhlIGBLQlVGX01PREVfRlJFRWAgZmxhZyBpcyBzZXQuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdhcyBzaW1wbHk6CgpgYGBjCglpZiAoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKQoJCWtmcmVlKGFyZy0mZ3Q7aW92cyk7CmBgYAoKRXNzZW50aWFsbHksIGBhcmctJmd0O2lvdnNgIHdhcyBiZWluZyB1bmNvbmRpdGlvbmFsbHkgZnJlZWQgaWYgYEtCVUZfTU9ERV9GUkVFYCB3YXMgYWN0aXZlLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IGBhcmctJmd0O2lvdnNgIGNhbiBiZSB1cGRhdGVkIGlmIHRoZSBgS0JVRl9NT0RFX0VYUEFORGAgZmxhZyBpcyBzZXQgYW5kIGBucl9hdmFpbCAmZ3Q7IG5yX2lvdnNgLgoKYGBgYwoJaWYgKGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRVhQQU5EICZhbXA7JmFtcDsgbnJfYXZhaWwgJmd0OyBucl9pb3ZzICZhbXA7JmFtcDsgYXJnLSZndDttYXhfbGVuKSB7CgkJaW92ID0ga21hbGxvY19vYmpzKHN0cnVjdCBpb3ZlYywgbnJfYXZhaWwpOwoJCWlmICh1bmxpa2VseSghaW92KSkKCQkJcmV0dXJuIC1FTk9NRU07CgkJYXJnLSZndDtpb3ZzID0gaW92OwoJCW5yX2lvdnMgPSBucl9hdmFpbDsKCX0KYGBgCgpTbywgaWYgYW4gZXhwYW5zaW9uIGhhcHBlbmVkLCBgYXJnLSZndDtpb3ZzYCB3b3VsZCBiZSBwb2ludGluZyB0byBhIG5ld2x5IGFsbG9jYXRlZCBhcnJheSwgd2hpbGUgdGhlIG9yaWdpbmFsIGFycmF5IG1pZ2h0IHN0aWxsIGJlIGluIHVzZS4gVGhlIHBhdGNoIG5vdyBpbnRyb2R1Y2VzIGEgY2hlY2s6CgpgYGBjCglpZiAoKGFyZy0mZ3Q7bW9kZSAmYW1wOyBLQlVGX01PREVfRlJFRSkgJmFtcDsmYW1wOyBhcmctJmd0O2lvdnMgIT0gb3JnX2lvdnMpCgkJa2ZyZWUob3JnX2lvdnMpOwpgYGAKCkFoLCBJIHNlZSBpdCBub3cuIFRoZSBwYXRjaCBpcyBub3cgZnJlZWluZyB0aGUgKm9sZCogYXJyYXkgKGBvcmdfaW92c2ApIGlmIGEgbmV3IGFycmF5IHdhcyBhbGxvY2F0ZWQuIE1ha2VzIHNlbnNlLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcHJvYmFibHkgbGVha2luZyBtZW1vcnkgb3IsIHdvcnNlLCBwb3RlbnRpYWxseSBjYXVzaW5nIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uISBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBmcmVlIGBhcmctJmd0O2lvdnNgIGFuZCB0aGVuIGhhbmQgYmFjayBhIHBvaW50ZXIgdG8gZnJlZWQgbWVtb3J5ISBJIHN1c3BlY3QgdGhhdCB0aGUgY2FsbGVyIGV4cGVjdHMgYGFyZy0mZ3Q7aW92c2AgdG8gYmUgdmFsaWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBhbmQgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBpdCBsYXRlci4gCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgd2hlcmUgYEtCVUZfTU9ERV9GUkVFYCBpcyBhY3R1YWxseSBzZXQgYW5kIGhvdyB0aGUgcmV0dXJuZWQgYGFyZy0mZ3Q7aW92c2AgaXMgdXNlZC4gVGhhdCYjMzk7bGwgc29saWRpZnkgdGhpcyBldmVuIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S0JVRl9NT0RFX0ZSRUUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jPTI1Mz1zdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbi0tXG5pb191cmluZy9rYnVmLmMtMzMwLVxuaW9fdXJpbmcva2J1Zi5jOjMzMTpcdGlmICgoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXG5pb191cmluZy9rYnVmLmMtMzMyLVx0XHRrZnJlZShvcmdfaW92cyk7XG4tLVxuaW9fdXJpbmcva2J1Zi5oPTUzPWVudW0ge1xuLS1cbmlvX3VyaW5nL2tidWYuaC01Ni1cdC8qIGlmIGJpZ2dlciB2ZWMgYWxsb2NhdGVkLCBmcmVlIG9sZCBvbmUgKi9cbmlvX3VyaW5nL2tidWYuaDo1NzpcdEtCVUZfTU9ERV9GUkVFXHRcdD0gMixcbmlvX3VyaW5nL2tidWYuaC01OC19O1xuLS1cbmlvX3VyaW5nL25ldC5jPTYwOD1zdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuLS1cbmlvX3VyaW5nL25ldC5jLTYyMi1cdFx0YXJnLmlvdnMgPSBrbXNnLVx1MDAzZXZlYy5pb3ZlYztcbmlvX3VyaW5nL25ldC5jOjYyMzpcdFx0YXJnLm1vZGUgPSBLQlVGX01PREVfRlJFRTtcbmlvX3VyaW5nL25ldC5jLTYyNC1cdH1cbi0tXG5pb191cmluZy9uZXQuYz0xMTM3PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxuLS1cbmlvX3VyaW5nL25ldC5jLTExNTktXHRcdFx0YXJnLmlvdnMgPSBrbXNnLVx1MDAzZXZlYy5pb3ZlYztcbmlvX3VyaW5nL25ldC5jOjExNjA6XHRcdFx0YXJnLm1vZGUgfD0gS0JVRl9NT0RFX0ZSRUU7XG5pb191cmluZy9uZXQuYy0xMTYxLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgYSBQb3RlbnRpYWwgTWVtb3J5IExlYWsgaW4gaW9fdXJpbmcgTmV0d29yayBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBLQlVGX01PREVfRlJFRWAgZmxhZyBpbiB0aGUgY29udGV4dCBvZiBgaW9fdXJpbmdgIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIHNwb3R0ZWQgYSBjcnVjaWFsIGJ1ZyBmaXguIEZyb20gdGhlIGxvb2tzIG9mIGl0LCBgS0JVRl9NT0RFX0ZSRUVgIG1lYW5zIHRoYXQgaWYgYSBsYXJnZXIgdmVjdG9yIChgdmVjYCkgaXMgYWxsb2NhdGVkLCB0aGVuIHRoZSAqb2xkKiBvbmUgbmVlZHMgdG8gYmUgZnJlZWQuIExvb2tpbmcgYXQgdGhlIG9yaWdpbmFsIGNvZGU6CgpgYGBjCglpZiAoYXJnLSZndDttb2RlICZhbXA7IEtCVUZfTU9ERV9GUkVFKQoJCWtmcmVlKGFyZy0mZ3Q7aW92cyk7CmBgYAoKLi4uaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgd2FzIGZyZWVpbmcgYGFyZy0mZ3Q7aW92c2AsIHdoaWNoIGlzIHRoZSAqbmV3KiBidWZmZXIgKG9yIHBvdGVudGlhbGx5IHRoZSBvbGQgb25lIGlmIG5vdGhpbmcgd2FzIHJlYWxsb2NhdGVkKS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSB1cGRhdGVkIGNvZGUsIGhvd2V2ZXIsIGlzIG11Y2ggYmV0dGVyOgoKYGBgYwoJaWYgKChhcmctJmd0O21vZGUgJmFtcDsgS0JVRl9NT0RFX0ZSRUUpICZhbXA7JmFtcDsgYXJnLSZndDtpb3ZzICE9IG9yZ19pb3ZzKQoJCWtmcmVlKG9yZ19pb3ZzKTsKYGBgCgpOb3csIGl0IGNvcnJlY3RseSBmcmVlcyB0aGUgKm9sZCogYnVmZmVyIChgb3JnX2lvdnNgKSBvbmx5IGlmIGEgbmV3IG9uZSB3YXMgYWxsb2NhdGVkLiBUaGlzIGRlZmluaXRpdmVseSBzb2x2ZXMgdGhlIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgdGhhdCB3YXMgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHJlYWwgYnVnIGZpeC4KClRoaXMgZml4IGxpa2VseSB0YXJnZXRzIG5ldHdvcmsgb3BlcmF0aW9ucyB3aXRoaW4gYGlvX3VyaW5nYCwgc3BlY2lmaWNhbGx5IGluIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YCB3aGVyZSB0aGlzIGBLQlVGX01PREVfRlJFRWAgZmxhZyBjb21lcyBpbnRvIHBsYXkuIEl0IG1ha2VzIHNlbnNlIHRvIGZ1enogdGhlc2UgYXJlYXMgcGFydGljdWxhcmx5LCBhbG9uZyB3aXRoIHBvdGVudGlhbGx5IHJlbGF0ZWQgc3ltYm9sczogYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCwgYW5kIGBpb19idWZmZXJzX3BlZWtgLgoKSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyB0byBiZSByZWxldmFudC4gYGlvX3VyaW5nYCBpdHNlbGYgaXMgZW5hYmxlZCBieSBgQ09ORklHX0lPX1VSSU5HYCwgc28gdGhhdCYjMzk7cyB0aGUgYmFzZSByZXF1aXJlbWVudC4gTmV0d29yayBvcGVyYXRpb25zIHdpdGhpbiBgaW9fdXJpbmdgIHNob3VsZCBiZSBwcmV0dHkgc3RhbmRhcmQgb3RoZXJ3aXNlLiBOb3csIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgaW9fdXJpbmcvbmV0LmNgIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBmdW5jdGlvbnMgdGhhdCB1c2UgdGhpcyBuZXcgbG9naWMuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgbW9yZSBjb2RlIGltcGFjdGVkLCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3NlbmRfc2VsZWN0X2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTU1OT1pbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTYwNy1cbmlvX3VyaW5nL25ldC5jOjYwODpzdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxuaW9fdXJpbmcvbmV0LmMtNjA5LVx0XHRcdFx0IHN0cnVjdCBpb19icl9zZWwgKnNlbCwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZylcbi0tXG5pb191cmluZy9uZXQuYz02NTY9aW50IGlvX3NlbmQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy02ODktXHRpZiAoaW9fZG9fYnVmZmVyX3NlbGVjdChyZXEpKSB7XG5pb191cmluZy9uZXQuYzo2OTA6XHRcdHJldCA9IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihyZXEsIGlzc3VlX2ZsYWdzLCBcdTAwMjZzZWwsIGttc2cpO1xuaW9fdXJpbmcvbmV0LmMtNjkxLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSBub2QgdG8gdGhlIGZhY3QgdGhhdCBJJiMzOTttIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOgoKKipEZWx2aW5nIGludG8gaW9fdXJpbmcmIzM5O3MgQ29yZSBJTyBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBpb19zZW5kYCBhbmQgYGlvX3JlY3ZgLCBhbmQgcG90ZW50aWFsbHkgdGhlaXIgbWVzc2FnZS1wYXNzaW5nIGNvdW50ZXJwYXJ0cyBgaW9fc2VuZG1zZ2AgYW5kIGBpb19yZWN2bXNnYCwgYXJlIGZ1bmRhbWVudGFsbHkgdGllZCB0byB0aGlzIHVuZGVybHlpbmcgbWVjaGFuaXNtLiBUaGlzIGlzICpjb3JlKiBgaW9fdXJpbmdgIHN0dWZmLCB0aGUgYnJlYWQgYW5kIGJ1dHRlci4gSXTigJlzIHdoYXQgbWFrZXMgdGhlIGFzeW5jaHJvbm91cywgemVyby1jb3B5IG9wZXJhdGlvbnMgcG9zc2libGUuIEkgbmVlZCB0byBrZWVwIHRoaXMgcmVsYXRpb25zaGlwIGZyb250IG9mIG1pbmQgd2hlbiBJ4oCZbSBkaWdnaW5nIGludG8gdGhlIGFyY2hpdGVjdHVyZSBvciBvcHRpbWl6aW5nIHRoZXNlIGZ1bmN0aW9ucy4KCkFuZCB3aGlsZSBJJiMzOTttIGF0IGl0LCBJIHNob3VsZCBwcm9iYWJseSBnbGFuY2UgYXQgYGlvX3JlY3ZfYnVmX3NlbGVjdGAgdG9vLiBKdXN0IHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBjb25zaXN0ZW50IHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgd291bGRuJiMzOTt0IGh1cnQgdG8gaGF2ZSB0aGF0IGNvbnRleHQgZnJlc2guIEl0IGNvdWxkIHJldmVhbCBzb21lIGludGVyZXN0aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlY3ZfYnVmX3NlbGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTEwNTA9aW50IGlvX3JlY3Ztc2coc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9uZXQuYy0xMTM2LVxuaW9fdXJpbmcvbmV0LmM6MTEzNzpzdGF0aWMgaW50IGlvX3JlY3ZfYnVmX3NlbGVjdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX2FzeW5jX21zZ2hkciAqa21zZyxcbmlvX3VyaW5nL25ldC5jLTExMzgtXHRcdFx0ICAgICAgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvbmV0LmM9MTIwOT1pbnQgaW9fcmVjdihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTEyNDctXHRcdHNlbC52YWwgPSBzci1cdTAwM2VsZW47XG5pb191cmluZy9uZXQuYzoxMjQ4Olx0XHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcdTAwMjZzZWwsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTEyNDktXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIGlvX3VyaW5nIGFuZCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaW9fdXJpbmdgIGFuZCBpdHMgcm9sZSBpbiBuZXR3b3JrIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgeWVzLCB0aGUgYGlvX3JlY3ZgIGZ1bmN0aW9uIGRlZmluaXRlbHkgbGV2ZXJhZ2VzIGl0LiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgc3BlY2lmaWNzLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgcGVydGFpbiB0byB1c2luZyBgaW9fdXJpbmdgIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkuIEJleW9uZCB0aGUgb2J2aW91cywgd2hpY2ggSSBzdXNwZWN0IGlzIHRoZSBgQ09ORklHX0lPX1VSSU5HYCBvcHRpb24sIEkga25vdyBgQ09ORklHX05FVGAgaXMgZnVuZGFtZW50YWwgZm9yIGFueXRoaW5nIG5ldHdvcmtpbmcgcmVsYXRlZCwgYnV0IGlzIHRoZXJlIGFueXRoaW5nIG1vcmUgZ3JhbnVsYXI/CgpNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBpb191cmluZy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRlZmluaXRpdmUgYW5zd2VycyBhYm91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIG51YW5jZXMuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBpb191cmluZyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBJT19VUklOR19aQ1JYXG4gICA3Olx0XHRkZWZfYm9vbCB5XG4gICA4Olx0XHRkZXBlbmRzIG9uIElPX1VSSU5HXG4gICA5Olx0XHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxuICAxMDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDExOlx0XHRkZXBlbmRzIG9uIE5FVF9SWF9CVVNZX1BPTExcbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgSU9fVVJJTkdfQlBGXG4gIDE0Olx0XHRkZWZfYm9vbCB5XG4gIDE1Olx0XHRkZXBlbmRzIG9uIEJQRlxuICAxNjpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuICAxOTpcdFx0ZGVmX2Jvb2wgeVxuICAyMDpcdFx0ZGVwZW5kcyBvbiBJT19VUklOR1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU1MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgSU9fVVJJTkcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKCkhtbSwgc28gaXQgbG9va3MgbGlrZSBgaW9fdXJpbmdgJiMzOTtzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgdGllZCB0byB0aGUga2VybmVsIGNvbmZpZyBvcHRpb24gYENPTkZJR19JT19VUklOR2AuIFJpZ2h0LCB0aGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLiBNeSBuZXh0IHN0ZXAgc2hvdWxkIGJlIHRvIGRlbHZlIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGBJT19VUklOR2AgaXMgZGVmaW5lZCwgaXRzIGRlcGVuZGVuY2llcyAoaWYgYW55KSwgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gSXQmIzM5O3MgY3J1Y2lhbCB0byBrbm93IHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGNvbnRleHQgaWYgSSYjMzk7bSBnb2luZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBiZWhhdmVzIGluIHByYWN0aWNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgd2hvbGUgcGljdHVyZSB0byBhbnN3ZXIgdGhlIHF1ZXN0aW9uIGF0IGhhbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTQtXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzYtXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTkzOC1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTQzCgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSU9fVVJJTkcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgYElPX1VSSU5HYCBwYXRjaCBpbiBmcm9udCBvZiBtZS4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGEgYnVnIGZpeCBpbiB0aGUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyB3aGVuIGBLQlVGX01PREVfRlJFRWAgd2FzIHNldCwgYmVjYXVzZSBpdCB3YXMgZnJlZWluZyB0aGUgd3JvbmcgaW92ZWMgYXJyYXkgKGBhcmctJmd0O2lvdnNgIGluc3RlYWQgb2YgYG9yZ19pb3ZzYCkuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KCk15IGluaXRpYWwgZm9jdXMgc3ltYm9scywgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCB3ZXJlIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AsIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgLCBgaW9fcmVjdl9idWZfc2VsZWN0YCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AuIEJ1dCwgbGV0IG1lIGRvdWJsZSBjaGVjayBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBhbmQgYWggeWVzLCBpdCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBBbmQgbG9va2luZyBhdCB0aGUgY2FsbCBzaXRlcywgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGJ5IGJvdGggYGlvX2J1ZmZlcnNfc2VsZWN0YCBhbmQgYGlvX2J1ZmZlcnNfcGVla2AsIHNvIHRoZXNlIHNob3VsZCBkZWZpbml0ZWx5IGJlIGluY2x1ZGVkIGluIHRoZSBmb2N1cyBzeW1ib2wgbGlzdCBhcyB3ZWxsLgoKSSBjYW4mIzM5O3Qgc2VlIGFueXRoaW5nIG9kZCB3aXRoIHRoZSBjb25maWcgZW5hYmxpbmcsIGBJT19VUklOR2AgYW5kIGBORVRgIHNlZW0gYXBwcm9wcmlhdGUuIEFsdGhvdWdoIGBORVRgIGlzIHN0YW5kYXJkLCBgSU9fVVJJTkdgIGlzIGEgZ29vZCBjb25maWcgdG8gY2hlY2suCgpUaGUgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCB3aGVuIGRlYWxpbmcgd2l0aCBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMgKGxpa2Ugc2VuZHMgYW5kIHJlY2VpdmVzKSBhbmQgdXNpbmcgYnVmZmVyIHNlbGVjdGlvbiwgdGhlIHBhdGNoIGVuc3VyZXMgdGhlIGNvcnJlY3QgaW92ZWMgYXJyYXkgKGBvcmdfaW92c2ApIGlzIGZyZWVkIHdoZW4gYSBuZXcgYXJyYXkgaXMgYWxsb2NhdGVkIGFuZCB0aGUgYEtCVUZfTU9ERV9GUkVFYCBmbGFnIGlzIHNldC4gVGhhdCYjMzk7cyBhIGdvb2QgZml4LCBwcmV2ZW50aW5nIGEgbGlrZWx5IG1lbW9yeSBpc3N1ZS4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhpcyBzZXQgdG8gcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19yaW5nX2J1ZmZlcnNfcGVlayYjMzQ7LAogICAgJiMzNDtpb19zZW5kX3NlbGVjdF9idWZmZXImIzM0OywKICAgICYjMzQ7aW9fcmVjdl9idWZfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfc2VsZWN0JiMzNDssCiAgICAmIzM0O2lvX2J1ZmZlcnNfcGVlayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlL21lbW9yeSBsZWFrIGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgYnkgY29ycmVjdGx5IGZyZWVpbmcgYG9yZ19pb3ZzYCBpbnN0ZWFkIG9mIGBhcmctXHUwMDNlaW92c2Agd2hlbiBhIG5ldyBpb3ZlYyBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LiBUaGlzIGFmZmVjdHMgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zIGxpa2Ugc2VuZCBhbmQgcmVjdiB3aGVuIHVzaW5nIGJ1ZmZlciBzZWxlY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3JpbmdfYnVmZmVyc19wZWVrJiMzNDssCiAgICAmIzM0O2lvX3NlbmRfc2VsZWN0X2J1ZmZlciYjMzQ7LAogICAgJiMzNDtpb19yZWN2X2J1Zl9zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19zZWxlY3QmIzM0OywKICAgICYjMzQ7aW9fYnVmZmVyc19wZWVrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cdTAwM2Vpb3ZzYCB3aGVuIGEgbmV3IGlvdmVjIGFycmF5IGlzIGFsbG9jYXRlZCBhbmQgYEtCVUZfTU9ERV9GUkVFYCBpcyBzZXQuIFRoaXMgYWZmZWN0cyBpb191cmluZyBuZXR3b3JrIG9wZXJhdGlvbnMgbGlrZSBzZW5kIGFuZCByZWN2IHdoZW4gdXNpbmcgYnVmZmVyIHNlbGVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjAyLjI2MjI2NzcxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5Nzc3NTMyOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19yaW5nX2J1ZmZlcnNfcGVla1wiLFxuICAgIFwiaW9fc2VuZF9zZWxlY3RfYnVmZmVyXCIsXG4gICAgXCJpb19yZWN2X2J1Zl9zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfc2VsZWN0XCIsXG4gICAgXCJpb19idWZmZXJzX3BlZWtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlL21lbW9yeSBsZWFrIGluIGBpb19yaW5nX2J1ZmZlcnNfcGVla2AgYnkgY29ycmVjdGx5IGZyZWVpbmcgYG9yZ19pb3ZzYCBpbnN0ZWFkIG9mIGBhcmctXFx1MDAzZWlvdnNgIHdoZW4gYSBuZXcgaW92ZWMgYXJyYXkgaXMgYWxsb2NhdGVkIGFuZCBgS0JVRl9NT0RFX0ZSRUVgIGlzIHNldC4gVGhpcyBhZmZlY3RzIGlvX3VyaW5nIG5ldHdvcmsgb3BlcmF0aW9ucyBsaWtlIHNlbmQgYW5kIHJlY3Ygd2hlbiB1c2luZyBidWZmZXIgc2VsZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MTowMi4yNjIyNzMzOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjQ0MzYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUxNGI4NWQ5ODYzOWFkNGJlMGM1MDNiZGI5YjVhZjQwNmUyYjRmNjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMTIgMjA6NDE6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jXFxuaW5kZXggYjZiOTY5YjU1ZTEyMjQuLjA3ZDgxZGM3Y2JlMjk2IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL2tidWYuY1xcbisrKyBiL2lvX3VyaW5nL2tidWYuY1xcbkBAIC0zMjgsOCArMzI4LDggQEAgc3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuIFxcdFxcdGJ1ZiA9IGlvX3JpbmdfaGVhZF90b19idWYoYnIsICsraGVhZCwgYmwtXFx1MDAzZW1hc2spO1xcbiBcXHR9IHdoaWxlICgtLW5yX2lvdnMpO1xcbiBcXG4tXFx0aWYgKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxcbi1cXHRcXHRrZnJlZShhcmctXFx1MDAzZWlvdnMpO1xcbitcXHRpZiAoKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuK1xcdFxcdGtmcmVlKG9yZ19pb3ZzKTtcXG4gXFxuIFxcdGlmIChoZWFkID09IHRhaWwpXFxuIFxcdFxcdHJlcS1cXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQkxfRU1QVFk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjAyLjY2OTY2MDE1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzNzAxMzA4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19zZW5kX3NlbGVjdF9idWZmZXJcIixcbiAgICBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfcGVla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cXHUwMDNlaW92c2Agd2hlbiBhIG5ldyBpb3ZlYyBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LiBUaGlzIGFmZmVjdHMgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zIGxpa2Ugc2VuZCBhbmQgcmVjdiB3aGVuIHVzaW5nIGJ1ZmZlciBzZWxlY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTE0Yjg1ZDk4NjM5YWQ0YmUwYzUwM2JkYjliNWFmNDA2ZTJiNGY2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDIwOjQxOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcva2J1Zi5jIGIvaW9fdXJpbmcva2J1Zi5jXG5pbmRleCBiNmI5NjliNTVlMTIyNC4uMDdkODFkYzdjYmUyOTYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9rYnVmLmNcbisrKyBiL2lvX3VyaW5nL2tidWYuY1xuQEAgLTMyOCw4ICszMjgsOCBAQCBzdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcbiBcdFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgKytoZWFkLCBibC1cdTAwM2VtYXNrKTtcbiBcdH0gd2hpbGUgKC0tbnJfaW92cyk7XG4gXG4tXHRpZiAoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxuLVx0XHRrZnJlZShhcmctXHUwMDNlaW92cyk7XG4rXHRpZiAoKGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRlJFRSkgXHUwMDI2XHUwMDI2IGFyZy1cdTAwM2Vpb3ZzICE9IG9yZ19pb3ZzKVxuK1x0XHRrZnJlZShvcmdfaW92cyk7XG4gXG4gXHRpZiAoaGVhZCA9PSB0YWlsKVxuIFx0XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfQkxfRU1QVFk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MTowMi42Njk2NjE2NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5MzA3NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGlvX3VyaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlvX3VyaW5nL2tidWYuY2AuIEl0J3MgYSBmYWlybHkgc3BlY2lmaWMgY2hhbmdlIHdpdGhpbiBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjYXRjaGluZyBteSBleWUuIFRoZXkndmUgbW9kaWZpZWQgdGhlIGNvbmRpdGlvbiBmb3IgZnJlZWluZyBgYXJnLVx1MDAzZWlvdnNgLiBIbW0sIGluc3RlYWQgb2YgdGhlIHN0cmFpZ2h0Zm9yd2FyZCBga2ZyZWUoYXJnLVx1MDAzZWlvdnMpYCB3aGVuIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LCB3ZSBub3cgaGF2ZSB0aGlzIGNoZWNrOiBga2ZyZWUob3JnX2lvdnMpYCBidXQgb25seSBpZiBgYXJnLVx1MDAzZWlvdnNgIGlzICpub3QqIGVxdWFsIHRvIGBvcmdfaW92c2AuXG5cblRoYXQgY2hhbmdlIGZyb20gYGFyZy1cdTAwM2Vpb3ZzYCB0byBgb3JnX2lvdnNgIGlzIHRoZSBjcnV4IG9mIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSdyZSBmcmVlaW5nIGBvcmdfaW92c2AgYW5kIHdoYXQgYG9yZ19pb3ZzYCByZXByZXNlbnRzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgaW9fcmluZ19idWZmZXJzX3BlZWtgIGZ1bmN0aW9uIGRlZmluaXRpb24gd2l0aGluIGBpb191cmluZy9rYnVmLmNgIHRvIHNlZSBob3cgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGFuZCBob3cgYG9yZ19pb3ZzYCBpcyBhc3NpZ25lZC4gSXQncyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIGFsaWFzaW5nIG9yIGNvcHktb24td3JpdGUgb3B0aW1pemF0aW9uLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB0byBiZSBjZXJ0YWluLiBNeSBndWVzcyBpcyB0aGVyZSBpcyBhbiBvcmlnaW5hbCBzZXQgb2YgaW92cyB1c2VkIGF0IHNvbWUgcG9pbnQgYW5kIHRoYXQgaXMgdGhlIG9uZSB0aGF0IG5lZWRzIHRvIGJlIGZyZWVkIHVuZGVyIHRoZSB1cGRhdGVkIGNvbmRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjA2LjcxODk3MTA2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY2NTI2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yaW5nX2J1ZmZlcnNfcGVla1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9rYnVmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTIzMD1zdHJ1Y3QgaW9fYnJfc2VsIGlvX2J1ZmZlcl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHNpemVfdCAqbGVuLFxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTI1Mi1cXG5pb191cmluZy9rYnVmLmM6MjUzOnN0YXRpYyBpbnQgaW9fcmluZ19idWZmZXJzX3BlZWsoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBidWZfc2VsX2FyZyAqYXJnLFxcbmlvX3VyaW5nL2tidWYuYy0yNTQtXFx0XFx0XFx0XFx0c3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz0zNDE9aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0zNTItXFx0aWYgKHNlbC1cXHUwMDNlYnVmX2xpc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORykge1xcbmlvX3VyaW5nL2tidWYuYzozNTM6XFx0XFx0cmV0ID0gaW9fcmluZ19idWZmZXJzX3BlZWsocmVxLCBhcmcsIHNlbC1cXHUwMDNlYnVmX2xpc3QpO1xcbmlvX3VyaW5nL2tidWYuYy0zNTQtXFx0XFx0LypcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz0zNzc9aW50IGlvX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuLS1cXG5pb191cmluZy9rYnVmLmMtMzkwLVxcdGlmIChibC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT0JMX0JVRl9SSU5HKSB7XFxuaW9fdXJpbmcva2J1Zi5jOjM5MTpcXHRcXHRyZXQgPSBpb19yaW5nX2J1ZmZlcnNfcGVlayhyZXEsIGFyZywgYmwpO1xcbmlvX3VyaW5nL2tidWYuYy0zOTItXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjA2Ljc3OTY0MzkzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjcxNjU1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbiwgYXMgYW4gZXhwZXJ0IHdobydzIHdvcmtlZCB3aXRoIEkvTyBhbmQga2VybmVsIGludGVybmFscyBiZWZvcmU6XG5cbioqUGVla2luZyBpbnRvIGlvX3JpbmdfYnVmZmVycyoqXG5cbkFscmlnaHQsIEkgc2VlIHdlJ3JlIGhlYWRpbmcgaW50byBgaW9fdXJpbmcva2J1Zi5jYCB0byBsb29rIGF0IGBpb19yaW5nX2J1ZmZlcnNfcGVla2AuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBkZXNpZ25lZCBmb3IgYSBub24tZGVzdHJ1Y3RpdmUgcmVhZCwgYSBcImxvb2stYnV0LWRvbid0LXRvdWNoXCIga2luZCBvZiBvcGVyYXRpb24uIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGV4YW1pbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciByaW5nIHdpdGhvdXQgYWN0dWFsbHkgY29uc3VtaW5nIG9yIG1vZGlmeWluZyB0aGUgZGF0YSB3aXRoaW4gaXQuIFRoYXQgbWFrZXMgc2Vuc2U7IGluIHRoZSB3b3JsZCBvZiBlZmZpY2llbnQgYXN5bmNocm9ub3VzIEkvTywgeW91IG9mdGVuIG5lZWQgdG8gcXVpY2tseSBjaGVjayB3aGF0J3MgdGhlcmUgYmVmb3JlIGNvbW1pdHRpbmcgdG8gcHJvY2Vzc2luZyBpdC4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHByb2JhYmx5IGNydWNpYWwgaW4gYW55IHNjaGVtZSB0aGF0IGludm9sdmVzIHNoYXJlZCBtZW1vcnkuIEknbGwgYmUgbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gZm9yIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucy4gVGhpcyB3b3VsZCBtZWFuIGxvb2tpbmcgZm9yIGxvY2tzLCBhdG9taWMgb3BlcmF0aW9ucywgb3IgY2FyZWZ1bCBtZW1vcnkgb3JkZXJpbmcuIEknbGwgbmVlZCB0byBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcGFydGlhbCByZWFkcy4gR2l2ZW4gdGhlIG5hbWUsIEknZCBhbnRpY2lwYXRlIGl0J3MgZGVzaWduZWQgdG8gZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGF0J3Mgd2FpdGluZyBpbiB0aGUgcmluZyBidWZmZXIsIHdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mIGEgZnVsbCByZWFkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBkZXRlcm1pbmVzIHZhbGlkIGRhdGEgcmVnaW9ucywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdWJtaXNzaW9uIGFuZCBjb21wbGV0aW9uIHF1ZXVlcywgYW5kIGlmIGl0IHByb3ZpZGVzIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGF0YSdzIG1ldGFkYXRhLiBMZXQncyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MToxMC44NDY4MTE5ODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcva2J1Zi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTM6XFx0c3RhdGljIGludCBpb19yaW5nX2J1ZmZlcnNfcGVlayhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGJ1Zl9zZWxfYXJnICphcmcsXFxuIDI1NDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxcbiAyNTU6XFx0e1xcbiAyNTY6XFx0XFx0c3RydWN0IGlvX3VyaW5nX2J1Zl9yaW5nICpiciA9IGJsLVxcdTAwM2VidWZfcmluZztcXG4gMjU3OlxcdFxcdHN0cnVjdCBpb3ZlYyAqb3JnX2lvdnMgPSBhcmctXFx1MDAzZWlvdnM7XFxuIDI1ODpcXHRcXHRzdHJ1Y3QgaW92ZWMgKmlvdiA9IGFyZy1cXHUwMDNlaW92cztcXG4gMjU5OlxcdFxcdGludCBucl9pb3ZzID0gYXJnLVxcdTAwM2Vucl9pb3ZzO1xcbiAyNjA6XFx0XFx0X191MTYgbnJfYXZhaWwsIHRhaWwsIGhlYWQ7XFxuIDI2MTpcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfYnVmICpidWY7XFxuIDI2MjpcXHRcXG4gMjYzOlxcdFxcdHRhaWwgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZici1cXHUwMDNldGFpbCk7XFxuIDI2NDpcXHRcXHRoZWFkID0gYmwtXFx1MDAzZWhlYWQ7XFxuIDI2NTpcXHRcXHRucl9hdmFpbCA9IG1pbl90KF9fdTE2LCB0YWlsIC0gaGVhZCwgVUlPX01BWElPVik7XFxuIDI2NjpcXHRcXHRpZiAodW5saWtlbHkoIW5yX2F2YWlsKSlcXG4gMjY3OlxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gMjY4OlxcdFxcbiAyNjk6XFx0XFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgaGVhZCwgYmwtXFx1MDAzZW1hc2spO1xcbiAyNzA6XFx0XFx0aWYgKGFyZy1cXHUwMDNlbWF4X2xlbikge1xcbiAyNzE6XFx0XFx0XFx0dTMyIGxlbiA9IFJFQURfT05DRShidWYtXFx1MDAzZWxlbik7XFxuIDI3MjpcXHRcXHRcXHRzaXplX3QgbmVlZGVkO1xcbiAyNzM6XFx0XFxuIDI3NDpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWxlbikpXFxuIDI3NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIDI3NjpcXHRcXHRcXHRuZWVkZWQgPSAoYXJnLVxcdTAwM2VtYXhfbGVuICsgbGVuIC0gMSkgLyBsZW47XFxuIDI3NzpcXHRcXHRcXHRuZWVkZWQgPSBtaW5fbm90X3plcm8obmVlZGVkLCAoc2l6ZV90KSBQRUVLX01BWF9JTVBPUlQpO1xcbiAyNzg6XFx0XFx0XFx0aWYgKG5yX2F2YWlsIFxcdTAwM2UgbmVlZGVkKVxcbiAyNzk6XFx0XFx0XFx0XFx0bnJfYXZhaWwgPSBuZWVkZWQ7XFxuIDI4MDpcXHRcXHR9XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdC8qXFxuIDI4MzpcXHRcXHQgKiBvbmx5IGFsbG9jIGEgYmlnZ2VyIGFycmF5IGlmIHdlIGtub3cgd2UgaGF2ZSBkYXRhIHRvIG1hcCwgZWcgbm90XFxuIDI4NDpcXHRcXHQgKiBhIHNwZWN1bGF0aXZlIHBlZWsgb3BlcmF0aW9uLlxcbiAyODU6XFx0XFx0ICovXFxuIDI4NjpcXHRcXHRpZiAoYXJnLVxcdTAwM2Vtb2RlIFxcdTAwMjYgS0JVRl9NT0RFX0VYUEFORCBcXHUwMDI2XFx1MDAyNiBucl9hdmFpbCBcXHUwMDNlIG5yX2lvdnMgXFx1MDAyNlxcdTAwMjYgYXJnLVxcdTAwM2VtYXhfbGVuKSB7XFxuIDI4NzpcXHRcXHRcXHRpb3YgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvdmVjLCBucl9hdmFpbCk7XFxuIDI4ODpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWlvdikpXFxuIDI4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjkwOlxcdFxcdFxcdGFyZy1cXHUwMDNlaW92cyA9IGlvdjtcXG4gMjkxOlxcdFxcdFxcdG5yX2lvdnMgPSBucl9hdmFpbDtcXG4gMjkyOlxcdFxcdH0gZWxzZSBpZiAobnJfYXZhaWwgXFx1MDAzYyBucl9pb3ZzKSB7XFxuIDI5MzpcXHRcXHRcXHRucl9pb3ZzID0gbnJfYXZhaWw7XFxuIDI5NDpcXHRcXHR9XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdC8qIHNldCBpdCB0byBtYXgsIGlmIG5vdCBzZXQsIHNvIHdlIGNhbiB1c2UgaXQgdW5jb25kaXRpb25hbGx5ICovXFxuIDI5NzpcXHRcXHRpZiAoIWFyZy1cXHUwMDNlbWF4X2xlbilcXG4gMjk4OlxcdFxcdFxcdGFyZy1cXHUwMDNlbWF4X2xlbiA9IElOVF9NQVg7XFxuIDI5OTpcXHRcXG4gMzAwOlxcdFxcdHJlcS1cXHUwMDNlYnVmX2luZGV4ID0gUkVBRF9PTkNFKGJ1Zi1cXHUwMDNlYmlkKTtcXG4gMzAxOlxcdFxcdGRvIHtcXG4gMzAyOlxcdFxcdFxcdHUzMiBsZW4gPSBSRUFEX09OQ0UoYnVmLVxcdTAwM2VsZW4pO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRcXHQvKiB0cnVuY2F0ZSBlbmQgcGllY2UsIGlmIG5lZWRlZCwgZm9yIG5vbiBwYXJ0aWFsIGJ1ZmZlcnMgKi9cXG4gMzA1OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzZSBhcmctXFx1MDAzZW1heF9sZW4pIHtcXG4gMzA2OlxcdFxcdFxcdFxcdGxlbiA9IGFyZy1cXHUwMDNlbWF4X2xlbjtcXG4gMzA3OlxcdFxcdFxcdFxcdGlmICghKGJsLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfSU5DKSkge1xcbiAzMDg6XFx0XFx0XFx0XFx0XFx0YXJnLVxcdTAwM2VwYXJ0aWFsX21hcCA9IDE7XFxuIDMwOTpcXHRcXHRcXHRcXHRcXHRpZiAoaW92ICE9IGFyZy1cXHUwMDNlaW92cylcXG4gMzEwOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMTE6XFx0XFx0XFx0XFx0fVxcbiAzMTI6XFx0XFx0XFx0fVxcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRcXHRpb3YtXFx1MDAzZWlvdl9iYXNlID0gdTY0X3RvX3VzZXJfcHRyKFJFQURfT05DRShidWYtXFx1MDAzZWFkZHIpKTtcXG4gMzE1OlxcdFxcdFxcdGlvdi1cXHUwMDNlaW92X2xlbiA9IGxlbjtcXG4gMzE2OlxcdFxcdFxcdGlmICh1bmxpa2VseSghYWNjZXNzX29rKGlvdi1cXHUwMDNlaW92X2Jhc2UsIGxlbikpKSB7XFxuIDMxNzpcXHRcXHRcXHRcXHRpZiAoYXJnLVxcdTAwM2Vpb3ZzICE9IG9yZ19pb3ZzKVxcbiAzMTg6XFx0XFx0XFx0XFx0XFx0a2ZyZWUoYXJnLVxcdTAwM2Vpb3ZzKTtcXG4gMzE5OlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAzMjA6XFx0XFx0XFx0fVxcbiAzMjE6XFx0XFx0XFx0aW92Kys7XFxuIDMyMjpcXHRcXG4gMzIzOlxcdFxcdFxcdGFyZy1cXHUwMDNlb3V0X2xlbiArPSBsZW47XFxuIDMyNDpcXHRcXHRcXHRhcmctXFx1MDAzZW1heF9sZW4gLT0gbGVuO1xcbiAzMjU6XFx0XFx0XFx0aWYgKCFhcmctXFx1MDAzZW1heF9sZW4pXFxuIDMyNjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0XFx0YnVmID0gaW9fcmluZ19oZWFkX3RvX2J1ZihiciwgKytoZWFkLCBibC1cXHUwMDNlbWFzayk7XFxuIDMyOTpcXHRcXHR9IHdoaWxlICgtLW5yX2lvdnMpO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRpZiAoKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuIDMzMjpcXHRcXHRcXHRrZnJlZShvcmdfaW92cyk7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdGlmIChoZWFkID09IHRhaWwpXFxuIDMzNTpcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JMX0VNUFRZO1xcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0JVRkZFUl9SSU5HO1xcbiAzMzg6XFx0XFx0cmV0dXJuIGlvdiAtIGFyZy1cXHUwMDNlaW92cztcXG4gMzM5OlxcdH1cXG4gMzQwOlxcdFxcbiAzNDE6XFx0aW50IGlvX2J1ZmZlcnNfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4gMzQyOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBpb19icl9zZWwgKnNlbCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiAzNDM6XFx0e1xcbiAzNDQ6XFx0XFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSByZXEtXFx1MDAzZWN0eDtcXG4gMzQ1OlxcdFxcdGludCByZXQgPSAtRU5PRU5UO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRpb19yaW5nX3N1Ym1pdF9sb2NrKGN0eCwgaXNzdWVfZmxhZ3MpO1xcbiAzNDg6XFx0XFx0c2VsLVxcdTAwM2VidWZfbGlzdCA9IGlvX2J1ZmZlcl9nZXRfbGlzdChjdHgsIGFyZy1cXHUwMDNlYnVmX2dyb3VwKTtcXG4gMzQ5OlxcdFxcdGlmICh1bmxpa2VseSghc2VsLVxcdTAwM2VidWZfbGlzdCkpXFxuIDM1MDpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGlmIChzZWwtXFx1MDAzZWJ1Zl9saXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPQkxfQlVGX1JJTkcpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMjA6NDE6MTAuODQ2OTYwOTgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NTcyNDMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIGtidWYuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb19yaW5nX2J1ZmZlcnNfcGVla2Agd2l0aGluIGBpb191cmluZy9rYnVmLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBgYXJnLVx1MDAzZWlvdnNgIGlzIGhhbmRsZWQgd2hlbiB0aGUgYEtCVUZfTU9ERV9GUkVFYCBmbGFnIGlzIHNldC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd2FzIHNpbXBseTpcblxuYGBgY1xuXHRpZiAoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxuXHRcdGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKTtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgYGFyZy1cdTAwM2Vpb3ZzYCB3YXMgYmVpbmcgdW5jb25kaXRpb25hbGx5IGZyZWVkIGlmIGBLQlVGX01PREVfRlJFRWAgd2FzIGFjdGl2ZS4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBgYXJnLVx1MDAzZWlvdnNgIGNhbiBiZSB1cGRhdGVkIGlmIHRoZSBgS0JVRl9NT0RFX0VYUEFORGAgZmxhZyBpcyBzZXQgYW5kIGBucl9hdmFpbCBcdTAwM2UgbnJfaW92c2AuXG5cbmBgYGNcblx0aWYgKGFyZy1cdTAwM2Vtb2RlIFx1MDAyNiBLQlVGX01PREVfRVhQQU5EIFx1MDAyNlx1MDAyNiBucl9hdmFpbCBcdTAwM2UgbnJfaW92cyBcdTAwMjZcdTAwMjYgYXJnLVx1MDAzZW1heF9sZW4pIHtcblx0XHRpb3YgPSBrbWFsbG9jX29ianMoc3RydWN0IGlvdmVjLCBucl9hdmFpbCk7XG5cdFx0aWYgKHVubGlrZWx5KCFpb3YpKVxuXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5cdFx0YXJnLVx1MDAzZWlvdnMgPSBpb3Y7XG5cdFx0bnJfaW92cyA9IG5yX2F2YWlsO1xuXHR9XG5gYGBcblxuU28sIGlmIGFuIGV4cGFuc2lvbiBoYXBwZW5lZCwgYGFyZy1cdTAwM2Vpb3ZzYCB3b3VsZCBiZSBwb2ludGluZyB0byBhIG5ld2x5IGFsbG9jYXRlZCBhcnJheSwgd2hpbGUgdGhlIG9yaWdpbmFsIGFycmF5IG1pZ2h0IHN0aWxsIGJlIGluIHVzZS4gVGhlIHBhdGNoIG5vdyBpbnRyb2R1Y2VzIGEgY2hlY2s6XG5cbmBgYGNcblx0aWYgKChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92cylcblx0XHRrZnJlZShvcmdfaW92cyk7XG5gYGBcblxuQWgsIEkgc2VlIGl0IG5vdy4gVGhlIHBhdGNoIGlzIG5vdyBmcmVlaW5nIHRoZSAqb2xkKiBhcnJheSAoYG9yZ19pb3ZzYCkgaWYgYSBuZXcgYXJyYXkgd2FzIGFsbG9jYXRlZC4gTWFrZXMgc2Vuc2UuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwcm9iYWJseSBsZWFraW5nIG1lbW9yeSBvciwgd29yc2UsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24hIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGZyZWUgYGFyZy1cdTAwM2Vpb3ZzYCBhbmQgdGhlbiBoYW5kIGJhY2sgYSBwb2ludGVyIHRvIGZyZWVkIG1lbW9yeSEgSSBzdXNwZWN0IHRoYXQgdGhlIGNhbGxlciBleHBlY3RzIGBhcmctXHUwMDNlaW92c2AgdG8gYmUgdmFsaWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBhbmQgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBpdCBsYXRlci4gXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHdoZXJlIGBLQlVGX01PREVfRlJFRWAgaXMgYWN0dWFsbHkgc2V0IGFuZCBob3cgdGhlIHJldHVybmVkIGBhcmctXHUwMDNlaW92c2AgaXMgdXNlZC4gVGhhdCdsbCBzb2xpZGlmeSB0aGlzIGV2ZW4gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjE5LjEwMjY4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTMwODQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLQlVGX01PREVfRlJFRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTI1Mz1zdGF0aWMgaW50IGlvX3JpbmdfYnVmZmVyc19wZWVrKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgYnVmX3NlbF9hcmcgKmFyZyxcXG4tLVxcbmlvX3VyaW5nL2tidWYuYy0zMzAtXFxuaW9fdXJpbmcva2J1Zi5jOjMzMTpcXHRpZiAoKGFyZy1cXHUwMDNlbW9kZSBcXHUwMDI2IEtCVUZfTU9ERV9GUkVFKSBcXHUwMDI2XFx1MDAyNiBhcmctXFx1MDAzZWlvdnMgIT0gb3JnX2lvdnMpXFxuaW9fdXJpbmcva2J1Zi5jLTMzMi1cXHRcXHRrZnJlZShvcmdfaW92cyk7XFxuLS1cXG5pb191cmluZy9rYnVmLmg9NTM9ZW51bSB7XFxuLS1cXG5pb191cmluZy9rYnVmLmgtNTYtXFx0LyogaWYgYmlnZ2VyIHZlYyBhbGxvY2F0ZWQsIGZyZWUgb2xkIG9uZSAqL1xcbmlvX3VyaW5nL2tidWYuaDo1NzpcXHRLQlVGX01PREVfRlJFRVxcdFxcdD0gMixcXG5pb191cmluZy9rYnVmLmgtNTgtfTtcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTYwOD1zdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNjIyLVxcdFxcdGFyZy5pb3ZzID0ga21zZy1cXHUwMDNldmVjLmlvdmVjO1xcbmlvX3VyaW5nL25ldC5jOjYyMzpcXHRcXHRhcmcubW9kZSA9IEtCVUZfTU9ERV9GUkVFO1xcbmlvX3VyaW5nL25ldC5jLTYyNC1cXHR9XFxuLS1cXG5pb191cmluZy9uZXQuYz0xMTM3PXN0YXRpYyBpbnQgaW9fcmVjdl9idWZfc2VsZWN0KHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTE1OS1cXHRcXHRcXHRhcmcuaW92cyA9IGttc2ctXFx1MDAzZXZlYy5pb3ZlYztcXG5pb191cmluZy9uZXQuYzoxMTYwOlxcdFxcdFxcdGFyZy5tb2RlIHw9IEtCVUZfTU9ERV9GUkVFO1xcbmlvX3VyaW5nL25ldC5jLTExNjEtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MToxOS4xNjE5OTkxNzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDcyNjY3OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpeGluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiBpb191cmluZyBOZXR3b3JrIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBLQlVGX01PREVfRlJFRWAgZmxhZyBpbiB0aGUgY29udGV4dCBvZiBgaW9fdXJpbmdgIGFuZCBJIHRoaW5rIEkndmUgc3BvdHRlZCBhIGNydWNpYWwgYnVnIGZpeC4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIGBLQlVGX01PREVfRlJFRWAgbWVhbnMgdGhhdCBpZiBhIGxhcmdlciB2ZWN0b3IgKGB2ZWNgKSBpcyBhbGxvY2F0ZWQsIHRoZW4gdGhlICpvbGQqIG9uZSBuZWVkcyB0byBiZSBmcmVlZC4gTG9va2luZyBhdCB0aGUgb3JpZ2luYWwgY29kZTpcblxuYGBgY1xuXHRpZiAoYXJnLVx1MDAzZW1vZGUgXHUwMDI2IEtCVUZfTU9ERV9GUkVFKVxuXHRcdGtmcmVlKGFyZy1cdTAwM2Vpb3ZzKTtcbmBgYFxuXG4uLi5pdCdzIHByZXR0eSBjbGVhciB0aGlzIHdhcyBmcmVlaW5nIGBhcmctXHUwMDNlaW92c2AsIHdoaWNoIGlzIHRoZSAqbmV3KiBidWZmZXIgKG9yIHBvdGVudGlhbGx5IHRoZSBvbGQgb25lIGlmIG5vdGhpbmcgd2FzIHJlYWxsb2NhdGVkKS4gVGhhdCdzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIHVwZGF0ZWQgY29kZSwgaG93ZXZlciwgaXMgbXVjaCBiZXR0ZXI6XG5cbmBgYGNcblx0aWYgKChhcmctXHUwMDNlbW9kZSBcdTAwMjYgS0JVRl9NT0RFX0ZSRUUpIFx1MDAyNlx1MDAyNiBhcmctXHUwMDNlaW92cyAhPSBvcmdfaW92cylcblx0XHRrZnJlZShvcmdfaW92cyk7XG5gYGBcblxuTm93LCBpdCBjb3JyZWN0bHkgZnJlZXMgdGhlICpvbGQqIGJ1ZmZlciAoYG9yZ19pb3ZzYCkgb25seSBpZiBhIG5ldyBvbmUgd2FzIGFsbG9jYXRlZC4gVGhpcyBkZWZpbml0aXZlbHkgc29sdmVzIHRoZSBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHRoYXQgd2FzIHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSByZWFsIGJ1ZyBmaXguXG5cblRoaXMgZml4IGxpa2VseSB0YXJnZXRzIG5ldHdvcmsgb3BlcmF0aW9ucyB3aXRoaW4gYGlvX3VyaW5nYCwgc3BlY2lmaWNhbGx5IGluIGBpb19zZW5kX3NlbGVjdF9idWZmZXJgIGFuZCBgaW9fcmVjdl9idWZfc2VsZWN0YCB3aGVyZSB0aGlzIGBLQlVGX01PREVfRlJFRWAgZmxhZyBjb21lcyBpbnRvIHBsYXkuIEl0IG1ha2VzIHNlbnNlIHRvIGZ1enogdGhlc2UgYXJlYXMgcGFydGljdWxhcmx5LCBhbG9uZyB3aXRoIHBvdGVudGlhbGx5IHJlbGF0ZWQgc3ltYm9sczogYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYGlvX2J1ZmZlcnNfc2VsZWN0YCwgYW5kIGBpb19idWZmZXJzX3BlZWtgLlxuXG5JIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGZvciB0aGlzIHRvIGJlIHJlbGV2YW50LiBgaW9fdXJpbmdgIGl0c2VsZiBpcyBlbmFibGVkIGJ5IGBDT05GSUdfSU9fVVJJTkdgLCBzbyB0aGF0J3MgdGhlIGJhc2UgcmVxdWlyZW1lbnQuIE5ldHdvcmsgb3BlcmF0aW9ucyB3aXRoaW4gYGlvX3VyaW5nYCBzaG91bGQgYmUgcHJldHR5IHN0YW5kYXJkIG90aGVyd2lzZS4gTm93LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGlvX3VyaW5nL25ldC5jYCB0byBpZGVudGlmeSB0aGUgZXhhY3QgZnVuY3Rpb25zIHRoYXQgdXNlIHRoaXMgbmV3IGxvZ2ljLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIG1vcmUgY29kZSBpbXBhY3RlZCwgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzcwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjI1LjIzNDY2OTMzNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzMTEyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF9zZWxlY3RfYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL25ldC5jPTU1OT1pbnQgaW9fc2VuZG1zZyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtNjA3LVxcbmlvX3VyaW5nL25ldC5jOjYwODpzdGF0aWMgaW50IGlvX3NlbmRfc2VsZWN0X2J1ZmZlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzLFxcbmlvX3VyaW5nL25ldC5jLTYwOS1cXHRcXHRcXHRcXHQgc3RydWN0IGlvX2JyX3NlbCAqc2VsLCBzdHJ1Y3QgaW9fYXN5bmNfbXNnaGRyICprbXNnKVxcbi0tXFxuaW9fdXJpbmcvbmV0LmM9NjU2PWludCBpb19zZW5kKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy02ODktXFx0aWYgKGlvX2RvX2J1ZmZlcl9zZWxlY3QocmVxKSkge1xcbmlvX3VyaW5nL25ldC5jOjY5MDpcXHRcXHRyZXQgPSBpb19zZW5kX3NlbGVjdF9idWZmZXIocmVxLCBpc3N1ZV9mbGFncywgXFx1MDAyNnNlbCwga21zZyk7XFxuaW9fdXJpbmcvbmV0LmMtNjkxLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjI1LjI5Mjk5Njc5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUxMjk4MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSBub2QgdG8gdGhlIGZhY3QgdGhhdCBJJ20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6XG5cbioqRGVsdmluZyBpbnRvIGlvX3VyaW5nJ3MgQ29yZSBJTyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBgaW9fc2VuZGAgYW5kIGBpb19yZWN2YCwgYW5kIHBvdGVudGlhbGx5IHRoZWlyIG1lc3NhZ2UtcGFzc2luZyBjb3VudGVycGFydHMgYGlvX3NlbmRtc2dgIGFuZCBgaW9fcmVjdm1zZ2AsIGFyZSBmdW5kYW1lbnRhbGx5IHRpZWQgdG8gdGhpcyB1bmRlcmx5aW5nIG1lY2hhbmlzbS4gVGhpcyBpcyAqY29yZSogYGlvX3VyaW5nYCBzdHVmZiwgdGhlIGJyZWFkIGFuZCBidXR0ZXIuIEl04oCZcyB3aGF0IG1ha2VzIHRoZSBhc3luY2hyb25vdXMsIHplcm8tY29weSBvcGVyYXRpb25zIHBvc3NpYmxlLiBJIG5lZWQgdG8ga2VlcCB0aGlzIHJlbGF0aW9uc2hpcCBmcm9udCBvZiBtaW5kIHdoZW4gSeKAmW0gZGlnZ2luZyBpbnRvIHRoZSBhcmNoaXRlY3R1cmUgb3Igb3B0aW1pemluZyB0aGVzZSBmdW5jdGlvbnMuXG5cbkFuZCB3aGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIHByb2JhYmx5IGdsYW5jZSBhdCBgaW9fcmVjdl9idWZfc2VsZWN0YCB0b28uIEp1c3QgdG8gbWFrZSBzdXJlIGl0J3MgY29uc2lzdGVudCB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEl0IHdvdWxkbid0IGh1cnQgdG8gaGF2ZSB0aGF0IGNvbnRleHQgZnJlc2guIEl0IGNvdWxkIHJldmVhbCBzb21lIGludGVyZXN0aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MToyOC43NDQyOTc2OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzU2MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9uZXQuYz0xMDUwPWludCBpb19yZWN2bXNnKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xMTM2LVxcbmlvX3VyaW5nL25ldC5jOjExMzc6c3RhdGljIGludCBpb19yZWN2X2J1Zl9zZWxlY3Qoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuaW9fdXJpbmcvbmV0LmMtMTEzOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jPTEyMDk9aW50IGlvX3JlY3Yoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL25ldC5jLTEyNDctXFx0XFx0c2VsLnZhbCA9IHNyLVxcdTAwM2VsZW47XFxuaW9fdXJpbmcvbmV0LmM6MTI0ODpcXHRcXHRyZXQgPSBpb19yZWN2X2J1Zl9zZWxlY3QocmVxLCBrbXNnLCBcXHUwMDI2c2VsLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTI0OS1cXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwM2MgMCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMjA6NDE6MjguODAyNjYyNTE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjk4MTEwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBpb191cmluZyBhbmQgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBpb191cmluZ2AgYW5kIGl0cyByb2xlIGluIG5ldHdvcmsgb3BlcmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB5ZXMsIHRoZSBgaW9fcmVjdmAgZnVuY3Rpb24gZGVmaW5pdGVseSBsZXZlcmFnZXMgaXQuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIHNwZWNpZmljcy4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgcGVydGFpbiB0byB1c2luZyBgaW9fdXJpbmdgIGZvciBuZXR3b3JrIGZ1bmN0aW9uYWxpdHkuIEJleW9uZCB0aGUgb2J2aW91cywgd2hpY2ggSSBzdXNwZWN0IGlzIHRoZSBgQ09ORklHX0lPX1VSSU5HYCBvcHRpb24sIEkga25vdyBgQ09ORklHX05FVGAgaXMgZnVuZGFtZW50YWwgZm9yIGFueXRoaW5nIG5ldHdvcmtpbmcgcmVsYXRlZCwgYnV0IGlzIHRoZXJlIGFueXRoaW5nIG1vcmUgZ3JhbnVsYXI/XG5cbk15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYGlvX3VyaW5nL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGRlZmluaXRpdmUgYW5zd2VycyBhYm91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIG51YW5jZXMuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MTozMi4xNzI0NzU2ODNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgaW9fdXJpbmcgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgSU9fVVJJTkdfWkNSWFxcbiAgIDc6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcXG4gIDEwOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBORVRfUlhfQlVTWV9QT0xMXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBJT19VUklOR19CUEZcXG4gIDE0OlxcdFxcdGRlZl9ib29sIHlcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbiAgMTk6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBJT19VUklOR1xcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjMyLjE3MjU0NTUwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQzNTY2MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElPX1VSSU5HIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbkhtbSwgc28gaXQgbG9va3MgbGlrZSBgaW9fdXJpbmdgJ3MgZnVuY3Rpb25hbGl0eSBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbiBgQ09ORklHX0lPX1VSSU5HYC4gUmlnaHQsIHRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLiBNeSBuZXh0IHN0ZXAgc2hvdWxkIGJlIHRvIGRlbHZlIGludG8gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGBJT19VUklOR2AgaXMgZGVmaW5lZCwgaXRzIGRlcGVuZGVuY2llcyAoaWYgYW55KSwgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gSXQncyBjcnVjaWFsIHRvIGtub3cgdGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpZiBJJ20gZ29pbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgYmVoYXZlcyBpbiBwcmFjdGljZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHdob2xlIHBpY3R1cmUgdG8gYW5zd2VyIHRoZSBxdWVzdGlvbiBhdCBoYW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTUxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MTozNS4wMTYxMTMyMjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjU0MDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MDc9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTQtXFxuaW5pdC9LY29uZmlnOjE5MTU6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTYtXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzYtXFxuaW5pdC9LY29uZmlnOjE5Mzc6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTM4LVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDIwOjQxOjM1LjA3Mzc3MjM0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODc1NDk4NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJT19VUklORyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgYElPX1VSSU5HYCBwYXRjaCBpbiBmcm9udCBvZiBtZS4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIGEgYnVnIGZpeCBpbiB0aGUgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyB3aGVuIGBLQlVGX01PREVfRlJFRWAgd2FzIHNldCwgYmVjYXVzZSBpdCB3YXMgZnJlZWluZyB0aGUgd3JvbmcgaW92ZWMgYXJyYXkgKGBhcmctXHUwMDNlaW92c2AgaW5zdGVhZCBvZiBgb3JnX2lvdnNgKS4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLlxuXG5NeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMsIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgd2VyZSBgaW9fcmluZ19idWZmZXJzX3BlZWtgLCBgaW9fc2VuZF9zZWxlY3RfYnVmZmVyYCwgYGlvX3JlY3ZfYnVmX3NlbGVjdGAsIGBpb19idWZmZXJzX3NlbGVjdGAgYW5kIGBpb19idWZmZXJzX3BlZWtgLiBCdXQsIGxldCBtZSBkb3VibGUgY2hlY2sgYGlvX3JpbmdfYnVmZmVyc19wZWVrYCwgYW5kIGFoIHllcywgaXQgaXMgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrbm93LiBBbmQgbG9va2luZyBhdCB0aGUgY2FsbCBzaXRlcywgSSBzZWUgaXQncyBjYWxsZWQgYnkgYm90aCBgaW9fYnVmZmVyc19zZWxlY3RgIGFuZCBgaW9fYnVmZmVyc19wZWVrYCwgc28gdGhlc2Ugc2hvdWxkIGRlZmluaXRlbHkgYmUgaW5jbHVkZWQgaW4gdGhlIGZvY3VzIHN5bWJvbCBsaXN0IGFzIHdlbGwuXG5cbkkgY2FuJ3Qgc2VlIGFueXRoaW5nIG9kZCB3aXRoIHRoZSBjb25maWcgZW5hYmxpbmcsIGBJT19VUklOR2AgYW5kIGBORVRgIHNlZW0gYXBwcm9wcmlhdGUuIEFsdGhvdWdoIGBORVRgIGlzIHN0YW5kYXJkLCBgSU9fVVJJTkdgIGlzIGEgZ29vZCBjb25maWcgdG8gY2hlY2suXG5cblRoZSBpc3N1ZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IHdoZW4gZGVhbGluZyB3aXRoIGlvX3VyaW5nIG5ldHdvcmsgb3BlcmF0aW9ucyAobGlrZSBzZW5kcyBhbmQgcmVjZWl2ZXMpIGFuZCB1c2luZyBidWZmZXIgc2VsZWN0aW9uLCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGUgY29ycmVjdCBpb3ZlYyBhcnJheSAoYG9yZ19pb3ZzYCkgaXMgZnJlZWQgd2hlbiBhIG5ldyBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBgS0JVRl9NT0RFX0ZSRUVgIGZsYWcgaXMgc2V0LiBUaGF0J3MgYSBnb29kIGZpeCwgcHJldmVudGluZyBhIGxpa2VseSBtZW1vcnkgaXNzdWUuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoaXMgc2V0IHRvIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTQzLCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQyMDo0MTo0MS45NDkyNzI1MDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDUxMTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19zZW5kX3NlbGVjdF9idWZmZXJcIixcbiAgICBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfcGVla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cXHUwMDNlaW92c2Agd2hlbiBhIG5ldyBpb3ZlYyBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LiBUaGlzIGFmZmVjdHMgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zIGxpa2Ugc2VuZCBhbmQgcmVjdiB3aGVuIHVzaW5nIGJ1ZmZlciBzZWxlY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3JpbmdfYnVmZmVyc19wZWVrXCIsXG4gICAgXCJpb19zZW5kX3NlbGVjdF9idWZmZXJcIixcbiAgICBcImlvX3JlY3ZfYnVmX3NlbGVjdFwiLFxuICAgIFwiaW9fYnVmZmVyc19zZWxlY3RcIixcbiAgICBcImlvX2J1ZmZlcnNfcGVla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGxlYWsgaW4gYGlvX3JpbmdfYnVmZmVyc19wZWVrYCBieSBjb3JyZWN0bHkgZnJlZWluZyBgb3JnX2lvdnNgIGluc3RlYWQgb2YgYGFyZy1cXHUwMDNlaW92c2Agd2hlbiBhIG5ldyBpb3ZlYyBhcnJheSBpcyBhbGxvY2F0ZWQgYW5kIGBLQlVGX01PREVfRlJFRWAgaXMgc2V0LiBUaGlzIGFmZmVjdHMgaW9fdXJpbmcgbmV0d29yayBvcGVyYXRpb25zIGxpa2Ugc2VuZCBhbmQgcmVjdiB3aGVuIHVzaW5nIGJ1ZmZlciBzZWxlY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow75dn7[1] Phase: Succeeded StartedAt: 2026-07-12 20:41:53 +0000 UTC FinishedAt: 2026-07-12 20:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-12 20:41:53 +0000 UTC FinishedAt: 2026-07-12 20:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2] Phase: Succeeded StartedAt: 2026-07-12 20:41:53 +0000 UTC FinishedAt: 2026-07-13 00:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 20:41:53 +0000 UTC FinishedAt: 2026-07-13 00:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 20:41:53 +0000 UTC FinishedAt: 2026-07-12 20:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 20:41:53 +0000 UTC FinishedAt: 2026-07-12 20:41:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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-workflow75dn7/series-workflow75dn7-convert-artifact-3866208237/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 20:42:03 +0000 UTC FinishedAt: 2026-07-12 21:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 20:42:03 +0000 UTC FinishedAt: 2026-07-12 21:18:09 +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:*a7fe2f1f-93b7-4171-b66e-08044cfd0cb0,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-workflow75dn7/series-workflow75dn7-convert-artifact-3866208237/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": "cb0a7c85-f338-4108-8742-9c3ba1793465", "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-workflow75dn7/series-workflow75dn7-build-action-1559630307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 20:42:03 +0000 UTC FinishedAt: 2026-07-12 21:17:59 +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:*a7fe2f1f-93b7-4171-b66e-08044cfd0cb0,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-workflow75dn7/series-workflow75dn7-convert-artifact-3866208237/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": "cb0a7c85-f338-4108-8742-9c3ba1793465", "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-workflow75dn7/series-workflow75dn7-build-action-1559630307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:18:09 +0000 UTC FinishedAt: 2026-07-12 21:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:18:09 +0000 UTC FinishedAt: 2026-07-12 21:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:18:09 +0000 UTC FinishedAt: 2026-07-12 21:18:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:18:09 +0000 UTC FinishedAt: 2026-07-12 21:18:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-workflow75dn7/series-workflow75dn7-convert-artifact-504155464/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:18:19 +0000 UTC FinishedAt: 2026-07-12 21:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:18:19 +0000 UTC FinishedAt: 2026-07-12 21:20:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cb0a7c85-f338-4108-8742-9c3ba1793465,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-workflow75dn7/series-workflow75dn7-build-action-1559630307/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-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:20:22 +0000 UTC FinishedAt: 2026-07-12 21:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:20:22 +0000 UTC FinishedAt: 2026-07-12 21:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:20:22 +0000 UTC FinishedAt: 2026-07-12 21:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:20:22 +0000 UTC FinishedAt: 2026-07-12 21:47:53 +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:*a7fe2f1f-93b7-4171-b66e-08044cfd0cb0,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-workflow75dn7/series-workflow75dn7-convert-artifact-504155464/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": "747d2ad9-3c2d-44f2-890f-0cc00171317d", "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-workflow75dn7/series-workflow75dn7-build-action-2717254132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:20:22 +0000 UTC FinishedAt: 2026-07-12 21:47:43 +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:*a7fe2f1f-93b7-4171-b66e-08044cfd0cb0,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-workflow75dn7/series-workflow75dn7-convert-artifact-504155464/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": "747d2ad9-3c2d-44f2-890f-0cc00171317d", "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-workflow75dn7/series-workflow75dn7-build-action-2717254132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:47:53 +0000 UTC FinishedAt: 2026-07-12 21:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:47:53 +0000 UTC FinishedAt: 2026-07-12 21:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:47:53 +0000 UTC FinishedAt: 2026-07-12 21:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:47:53 +0000 UTC FinishedAt: 2026-07-12 21:49:49 +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:*747d2ad9-3c2d-44f2-890f-0cc00171317d,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-workflow75dn7/series-workflow75dn7-build-action-2717254132/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-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:49:59 +0000 UTC FinishedAt: 2026-07-13 00:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:49:59 +0000 UTC FinishedAt: 2026-07-13 00:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"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:*cb0a7c85-f338-4108-8742-9c3ba1793465,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*747d2ad9-3c2d-44f2-890f-0cc00171317d,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-workflow75dn7/series-workflow75dn7-build-action-1559630307/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-workflow75dn7/series-workflow75dn7-build-action-2717254132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:49:59 +0000 UTC FinishedAt: 2026-07-12 21:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:49:59 +0000 UTC FinishedAt: 2026-07-12 21:50:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"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-workflow75dn7/series-workflow75dn7-convert-artifact-2855659521/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:49:59 +0000 UTC FinishedAt: 2026-07-12 21:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:49:59 +0000 UTC FinishedAt: 2026-07-12 21:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:49:59 +0000 UTC FinishedAt: 2026-07-12 21:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:50:09 +0000 UTC FinishedAt: 2026-07-13 00:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow75dn7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_ring_buffers_peek","io_send_select_buffer","io_recv_buf_select","io_buffers_select","io_buffers_peek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","NET"],"series_id":"b9b6c7bf-5eaa-4121-98fd-b42ccd846b60","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-12 21:50:09 +0000 UTC FinishedAt: 2026-07-13 00:51:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cb0a7c85-f338-4108-8742-9c3ba1793465,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*747d2ad9-3c2d-44f2-890f-0cc00171317d,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-workflow75dn7/series-workflow75dn7-build-action-1559630307/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-workflow75dn7/series-workflow75dn7-build-action-2717254132/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-workflow75dn7/series-workflow75dn7-convert-artifact-2855659521/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,}