Name: series-workflowvdlns Phase: Succeeded StartedAt: 2026-09-06 11:32:55 +0000 UTC FinishedAt: 2026-09-06 15:46:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[0] Phase: Succeeded StartedAt: 2026-09-06 11:32:55 +0000 UTC FinishedAt: 2026-09-06 12:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 11:32:55 +0000 UTC FinishedAt: 2026-09-06 12:01:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET" ], "series_id": "9b57bc5e-a9a5-4d06-804d-8931902269d7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rxrpc_encap_rcv", "rxrpc_io_thread", "rxrpc_destroy_local" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19lbmNhcF9yY3YmIzM0OywKICAgICYjMzQ7cnhycGNfaW9fdGhyZWFkJiMzNDssCiAgICAmIzM0O3J4cnBjX2Rlc3Ryb3lfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByeHJwYyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBzb2NrZXQgdGVhcmRvd24gbG9naWM6XG4xLiBJbiBgcnhycGNfZW5jYXBfcmN2KClgIGFuZCBgcnhycGNfaW9fdGhyZWFkKClgLCBpdCBhZGRzIHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcgY2hlY2tzIChgc2tfcm1lbV9zY2hlZHVsZWAsIGBza19ybWVtX2FsbG9jYCksIHNldHMgc2tiIG93bmVyc2hpcCBvbiB0aGUgVURQIHNvY2tldCAoYHNrYl9zZXRfb3duZXJfcmApLCBmb3JjZXMgRFNUIHJldGVudGlvbiAoYHNrYl9kc3RfZm9yY2VgKSwgYW5kIG9ycGhhbnMgc2ticyAoYHNrYl9vcnBoYW5gKSB1cG9uIGRlcXVldWVpbmcuXG4yLiBJbiBgcnhycGNfZGVzdHJveV9sb2NhbCgpYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgcG9pbnRlciBjbGVhcmFuY2Ugd2l0aCBgcmN1X2Fzc2lnbl9za191c2VyX2RhdGFgIGZvbGxvd2VkIGJ5IGBzeW5jaHJvbml6ZV9yY3UoKWAsIGRlZmVycmluZyBgc29ja19yZWxlYXNlKClgIHVudGlsIGFmdGVyIHRoZSBxdWV1ZXMgYXJlIHB1cmdlZCB0byBhdm9pZCB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMgb24gc29ja2V0IGRlc3RydWN0aW9uLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgbW9kaWZ5IGNvcHktdG8tdXNlciBwYXRocywgb3IgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFBvdGVudGlhbCBidWdzIGluIHRoZXNlIGFyZWFzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHNrYiBhY2NvdW50aW5nIGxlYWtzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiwgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcsIHNrYiBvd25lcnNoaXAgYW5kIG9ycGhhbmluZywgYW5kIGxvY2FsIHNvY2tldCB0ZWFyZG93biBSQ1Ugc3luY2hyb25pemF0aW9uIGluIHRoZSBBRl9SWFJQQyBuZXR3b3JrIHByb3RvY29sIHN1YnN5c3RlbS4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBSeFJQQyBzb2NrZXRzIGFuZCBuZXR3b3JrIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0Y2FiMGM4MGUzNWIxN2NmM2E0NWM0MThjMGFkNDg5NzMyODFhMjZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxMjowMDoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbmluZGV4IGRjNTE4NGEyZmE5ZDEuLjhiNzdkMTM3ODg4ZWEgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xuQEAgLTQxLDggJiM0Mzs0MSw2IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNldHN0YW1wID09IDApXG4gXHRcdHNrYi1cdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xuIFxuLVx0c2tiLVx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XG4tXHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuIFx0cnhfcXVldWUgPSBcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZTtcbiAjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxuIFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxuQEAgLTUyLDYgJiM0Mzs1MCwxOSBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gI2VuZGlmXG4gXG4mIzQzO1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNnVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2U9IFJFQURfT05DRSh1ZHBfc2stXHUwMDNlc2tfcmN2YnVmKSB8fFxuJiM0MztcdCAgICAhc2tfcm1lbV9zY2hlZHVsZSh1ZHBfc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuJiM0MztcdFx0c2tfZHJvcHNfaW5jKHVkcF9zayk7XG4mIzQzO1x0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4mIzQzO1x0c2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTtcbiYjNDM7XHRza2JfZHN0X2ZvcmNlKHNrYik7XG4mIzQzO1xuJiM0MztcdHNrYi1cdTAwM2VtYXJrID0gUlhSUENfU0tCX01BUktfUEFDS0VUO1xuJiM0MztcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gXHRza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTtcbiBcdHdha2VfdXBfcHJvY2Vzcyhpb190aHJlYWQpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDcxLDYgJiM0Mzs0ODIsOCBAQCBpbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXG4gXHRcdC8qIERpc3RyaWJ1dGUgcGFja2V0cyBhbmQgZXJyb3JzLiAqL1xuIFx0XHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2cnhfcXVldWUpKSkge1xuIFx0XHRcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbiBcdFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2VtYXJrKSB7XG4gXHRcdFx0Y2FzZSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ6XG4gXHRcdFx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSAwO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuaW5kZXggMTY5ZjlkZmRhYTc3Zi4uNjYwNGY5Zjk1MjY2MCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXG5AQCAtNDM3LDggJiM0Mzs0MzcsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdGlmIChzb2NrZXQpIHtcbiBcdFx0bG9jYWwtXHUwMDNlc29ja2V0ID0gTlVMTDtcbiBcdFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xuLVx0XHRzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbi1cdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtXHUwMDNlc2ssIE5VTEwpO1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHR9XG4gXG4gXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcbkBAIC00NDgsNiAmIzQzOzQ0OCwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiAjZW5kaWZcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNvY2tldClcbiYjNDM7XHRcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xuJiM0MztcbiBcdHJ4cnBjX3B1cmdlX2NsaWVudF9jb25uZWN0aW9ucyhsb2NhbCk7XG4gXHRwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oXHUwMDI2bG9jYWwtXHUwMDNldHhfYWxsb2MpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnhycGNfZW5jYXBfcmN2JiMzNDssCiAgICAmIzM0O3J4cnBjX2lvX3RocmVhZCYjMzQ7LAogICAgJiMzNDtyeHJwY19kZXN0cm95X2xvY2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCByZWNlcHRpb24sIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBhY2NvdW50aW5nLCBza2Igb3duZXJzaGlwIGFuZCBvcnBoYW5pbmcsIGFuZCBsb2NhbCBzb2NrZXQgdGVhcmRvd24gUkNVIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgQUZfUlhSUEMgbmV0d29yayBwcm90b2NvbCBzdWJzeXN0ZW0uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUnhSUEMgc29ja2V0cyBhbmQgbmV0d29yayBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGNhYjBjODBlMzViMTdjZjNhNDVjNDE4YzBhZDQ4OTczMjgxYTI2ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTI6MDA6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmMKaW5kZXggZGM1MTg0YTJmYTlkMS4uOGI3N2QxMzc4ODhlYSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9pb190aHJlYWQuYwpAQCAtNDEsOCAmIzQzOzQxLDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChza2ItJmd0O3RzdGFtcCA9PSAwKQogCQlza2ItJmd0O3RzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CiAKLQlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7Ci0JcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlyeF9xdWV1ZSA9ICZhbXA7bG9jYWwtJmd0O3J4X3F1ZXVlOwogI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVkKIAlpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8CkBAIC01Miw2ICYjNDM7NTAsMTkgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KICNlbmRpZgogCiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO3VkcF9zay0mZ3Q7c2tfcm1lbV9hbGxvYykgJmd0Oz0gUkVBRF9PTkNFKHVkcF9zay0mZ3Q7c2tfcmN2YnVmKSB8fAomIzQzOwkgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi0mZ3Q7dHJ1ZXNpemUpKSB7CiYjNDM7CQlza19kcm9wc19pbmModWRwX3NrKTsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiLSZndDtkZXYgPSBOVUxMOwomIzQzOwlza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spOwomIzQzOwlza2JfZHN0X2ZvcmNlKHNrYik7CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7bWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDsKJiM0MzsJcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTsKIAl3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTsKIAlyZXR1cm4gMDsKQEAgLTQ3MSw2ICYjNDM7NDgyLDggQEAgaW50IHJ4cnBjX2lvX3RocmVhZCh2b2lkICpkYXRhKQogCQkvKiBEaXN0cmlidXRlIHBhY2tldHMgYW5kIGVycm9ycy4gKi8KIAkJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7cnhfcXVldWUpKSkgewogCQkJc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpOwomIzQzOwomIzQzOwkJCXNrYl9vcnBoYW4oc2tiKTsKIAkJCXN3aXRjaCAoc2tiLSZndDttYXJrKSB7CiAJCQljYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDoKIAkJCQlza2ItJmd0O3ByaW9yaXR5ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYwppbmRleCAxNjlmOWRmZGFhNzdmLi42NjA0ZjlmOTUyNjYwIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jCkBAIC00MzcsOCAmIzQzOzQzNyw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKQogCWlmIChzb2NrZXQpIHsKIAkJbG9jYWwtJmd0O3NvY2tldCA9IE5VTEw7CiAJCWtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKLQkJc29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKLQkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CQlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtJmd0O3NrLCBOVUxMKTsKJiM0MzsJCXN5bmNocm9uaXplX3JjdSgpOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIHBhY2tldHMgY29taW5nIGluIHRvIHRoZQpAQCAtNDQ4LDYgJiM0Mzs0NDgsMTAgQEAgdm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfZGVsYXlfcXVldWUpOwogI2VuZGlmCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfcXVldWUpOwomIzQzOwomIzQzOwlpZiAoc29ja2V0KQomIzQzOwkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CiAJcnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTsKIAlwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oJmFtcDtsb2NhbC0mZ3Q7dHhfYWxsb2MpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjc0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUlhSUEMgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQuIEkgc2VlIGNoYW5nZXMgaW4gYG5ldC9yeHJwYy9pb190aHJlYWQuY2AgYW5kIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjoKCiogICAqKmByeHJwY19lbmNhcF9yY3ZgIGluIGBpb190aHJlYWQuY2A6KiogTG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0d2Vha2luZyB0aGUgcGFja2V0IHJlY2VpdmUgcGF0aC4gSSBzZWUgbWVtb3J5IGFsbG9jYXRpb24gY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIHJlY2VpdmUgYnVmZmVyIChgc2tfcm1lbV9zY2hlZHVsZWAsIGBza2Jfc2V0X293bmVyX3JgLCBgc2tiX2RzdF9mb3JjZWApLCB3aGljaCBpcyBzdGFuZGFyZC4gQW5kLCBpbnRlcmVzdGluZywgdGhleSYjMzk7dmUgbW92ZWQgYHNrYi0mZ3Q7bWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtgIGRvd24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHk7IHRoaXMgY291bGQgYmUgYWJvdXQgdGltaW5nIG9yIG9yZGVyaW5nIG9mIHBhY2tldCBwcm9jZXNzaW5nLgoqICAgKipgcnhycGNfaW9fdGhyZWFkYCBpbiBgaW9fdGhyZWFkLmNgOioqIEFoLCB0aGV5JiMzOTt2ZSBhZGRlZCBgc2tiX29ycGhhbihza2IpYCB3aGVuIGRlcXVldWluZyB0aGUgU0tCLiBUaGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgbWFuYWdpbmcgdGhlIFNLQiBsaWZlY3ljbGUgd2hlbiBpdCYjMzk7cyBiZWluZyBwdWxsZWQgb2ZmIHRoZSBxdWV1ZS4gVGhpcyBpcyBnb29kIHRvIHNlZTsgZXhwbGljaXQgbWVtb3J5IG1hbmFnZW1lbnQgaXMga2V5IGluIGtlcm5lbCBjb2RlLgoqICAgKipgcnhycGNfZGVzdHJveV9sb2NhbGAgaW4gYGxvY2FsX29iamVjdC5jYDoqKiBIZXJlLCB0aGV5JiMzOTtyZSBjbGVhbmluZyB1cCBsb2NhbCBSWFJQQyBvYmplY3RzLCBzcGVjaWZpY2FsbHkgdGhlIHNvY2tldC4gSSBzZWUgYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC0mZ3Q7c2ssIE5VTEwpOyBzeW5jaHJvbml6ZV9yY3UoKTtgLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBwcm9wZXJseSB1bmxpbmtpbmcgdGhlIHNvY2tldCYjMzk7cyB1c2VyIGRhdGEgYW5kIHVzaW5nIFJDVSB0byBlbnN1cmUgc2FmZSBtZW1vcnkgcmVjbGFtYXRpb24uIFRoZSByZWxlYXNlIGFmdGVyIHB1cmdpbmcgcXVldWVzIGlzIHR5cGljYWwuCgpJJiMzOTtsbCBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBBRlxfUlhSUEMgY29uZmlndXJhdGlvbiBpcyBzdGlsbCBjb3JyZWN0LiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUsIHNvIEkgY2FuIGVuc3VyZSB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRl9SWFJQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL0tjb25maWctNS1cbm5ldC9yeHJwYy9LY29uZmlnOjY6Y29uZmlnIEFGX1JYUlBDXG5uZXQvcnhycGMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UnhSUEMgc2Vzc2lvbiBzb2NrZXRzXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWc9MjU9aWYgQUZfUlhSUENcbm5ldC9yeHJwYy9LY29uZmlnLTI2LVxubmV0L3J4cnBjL0tjb25maWc6Mjc6Y29uZmlnIEFGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctMzMtXG5uZXQvcnhycGMvS2NvbmZpZzozNDpjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1Ncbm5ldC9yeHJwYy9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtJbmplY3QgcGFja2V0IGxvc3MgaW50byBSeFJQQyBwYWNrZXQgc3RyZWFtXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctMzktXG5uZXQvcnhycGMvS2NvbmZpZzo0MDpjb25maWcgQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG5uZXQvcnhycGMvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7SW5qZWN0IGRlbGF5IGludG8gcGFja2V0IHJlY2VwdGlvblwmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTQ5LVxubmV0L3J4cnBjL0tjb25maWc6NTA6Y29uZmlnIEFGX1JYUlBDX0RFQlVHXG5uZXQvcnhycGMvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7UnhSUEMgZHluYW1pYyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZz04OT1jb25maWcgUlhQRVJGXG4tLVxubmV0L3J4cnBjL0tjb25maWctOTUtXG5uZXQvcnhycGMvS2NvbmZpZzo5Njpjb25maWcgQUZfUlhSUENfS1VOSVRfVEVTVFxubmV0L3J4cnBjL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtSeFJQQyBjcnlwdG8gS1VuaXQgdGVzdFwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIEFGX1JYUlBDIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBBRl9SWFJQQ2AuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgS2NvbmZpZyBmaWxlIHdpdGhpbiB0aGUgbmV0L3J4cnBjIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgd2F5IHRoZXNlIHRoaW5ncyBhcmUgY29uZmlndXJlZCwgc28gaXQgc2hvdWxkIGxheSBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgcHJldHR5IGNsZWFybHkuIExldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQgYW5kIGNoZWNrIGBuZXQvcnhycGMvS2NvbmZpZ2AgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZCBhbmQgZWFzeSB0byBwYXJzZS4gU2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBwcmUtcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBBRl9SWFJQQ1xuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UnhSUEMgc2Vzc2lvbiBzb2NrZXRzXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9cbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fTElCX0RFUyBpZiBSWEtBRFxuICAxMTpcdFx0c2VsZWN0IEtFWVNcbiAgMTI6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBTYXkgWSBvciBNIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBSeFJQQyBzZXNzaW9uIHNvY2tldHMgKGp1c3RcbiAgMTU6XHRcdCAgdGhlIHRyYW5zcG9ydCBwYXJ0LCBub3QgdGhlIHByZXNlbnRhdGlvbiBwYXJ0OiAodW4pbWFyc2hhbGxpbmcgaXNcbiAgMTY6XHRcdCAgbGVmdCB0byB0aGUgYXBwbGljYXRpb24pLlxuICAxNzpcdFxuICAxODpcdFx0ICBUaGVzZSBhcmUgdXNlZCBmb3IgQUZTIGtlcm5lbCBmaWxlc3lzdGVtIGFuZCB1c2Vyc3BhY2UgdXRpbGl0aWVzLlxuICAxOTpcdFxuICAyMDpcdFx0ICBUaGlzIG1vZHVsZSBhdCB0aGUgbW9tZW50IG9ubHkgc3VwcG9ydHMgY2xpZW50IG9wZXJhdGlvbnMgYW5kIGlzXG4gIDIxOlx0XHQgIGN1cnJlbnRseSBpbmNvbXBsZXRlLlxuICAyMjpcdFxuICAyMzpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cbiAgMjQ6XHRcbiAgMjU6XHRpZiBBRl9SWFJQQ1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBBRl9SWFJQQ19JUFY2XG4gIDI4Olx0XHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgUnhSUENcJiMzNDtcbiAgMjk6XHRcdGRlcGVuZHMgb24gSVBWNlxuICAzMDpcdFx0aGVscFxuICAzMTpcdFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IEFGX1JYUlBDIHRvIHVzZSBJUFY2IFVEUCBhcyB3ZWxsIGFzIElQVjQgVURQIGFzXG4gIDMyOlx0XHQgIGl0cyBuZXR3b3JrIHRyYW5zcG9ydC5cbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1NcbiAgMzU6XHRcdGJvb2wgXCYjMzQ7SW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVwmIzM0O1xuICAzNjpcdFx0aGVscFxuICAzNzpcdFx0ICBTYXkgWSBoZXJlIHRvIGluamVjdCBwYWNrZXQgbG9zcyBieSBkaXNjYXJkaW5nIHNvbWUgcmVjZWl2ZWQgYW5kIHNvbWVcbiAgMzg6XHRcdCAgdHJhbnNtaXR0ZWQgcGFja2V0cy5cbiAgMzk6XHRcbiAgNDA6XHRjb25maWcgQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ5MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgUmVjZW50IFJ4UlBDIENoYW5nZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlc2UgUnhSUEMgY2hhbmdlcy4gVG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb24gbW9kaWZpY2F0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC9yeHJwYy9pb190aHJlYWQuY2AgYW5kIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBhbHRlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYnJvYWRlciBjb2RlLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSB0aGUgZXhhY3QgaW1wYWN0IG9mIHRoZXNlIHVwZGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvaW9fdGhyZWFkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlvX3RocmVhZDtcbiAgMzE6XHRcbiAgMzI6XHRcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XG4gIDMzOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuICAzNDpcdFx0XHRyZXR1cm4gMDtcbiAgMzU6XHRcdH1cbiAgMzY6XHRcdGlvX3RocmVhZCA9IFJFQURfT05DRShsb2NhbC1cdTAwM2Vpb190aHJlYWQpO1xuICAzNzpcdFx0aWYgKCFpb190aHJlYWQpIHtcbiAgMzg6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDM5Olx0XHRcdHJldHVybiAwO1xuICA0MDpcdFx0fVxuICA0MTpcdFx0aWYgKHNrYi1cdTAwM2V0c3RhbXAgPT0gMClcbiAgNDI6XHRcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7XG4gIDQzOlx0XG4gIDQ0Olx0XHRyeF9xdWV1ZSA9IFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlO1xuICA0NTpcdCNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4gIDQ2Olx0XHRpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8XG4gIDQ3Olx0XHQgICAgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZsb2NhbC1cdTAwM2VyeF9kZWxheV9xdWV1ZSkpIHtcbiAgNDg6XHRcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IGt0aW1lX2FkZF9tcyhza2ItXHUwMDNldHN0YW1wLCByeHJwY19pbmplY3RfcnhfZGVsYXkpO1xuICA0OTpcdFx0XHRyeF9xdWV1ZSA9IFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlO1xuICA1MDpcdFx0fVxuICA1MTpcdCNlbmRpZlxuICA1MjpcdFxuICA1MzpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2U9IFJFQURfT05DRSh1ZHBfc2stXHUwMDNlc2tfcmN2YnVmKSB8fFxuICA1NDpcdFx0ICAgICFza19ybWVtX3NjaGVkdWxlKHVkcF9zaywgc2tiLCBza2ItXHUwMDNldHJ1ZXNpemUpKSB7XG4gIDU1Olx0XHRcdHNrX2Ryb3BzX2luYyh1ZHBfc2spO1xuICA1NjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNTc6XHRcdFx0cmV0dXJuIDA7XG4gIDU4Olx0XHR9XG4gIDU5Olx0XG4gIDYwOlx0XHRza2ItXHUwMDNlZGV2ID0gTlVMTDtcbiAgNjE6XHRcdHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zayk7XG4gIDYyOlx0XHRza2JfZHN0X2ZvcmNlKHNrYik7XG4gIDYzOlx0XG4gIDY0Olx0XHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbiAgNjU6XHRcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gIDY2Olx0XHRza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTtcbiAgNjc6XHRcdHdha2VfdXBfcHJvY2Vzcyhpb190aHJlYWQpO1xuICA2ODpcdFx0cmV0dXJuIDA7XG4gIDY5Olx0fVxuICA3MDpcdFxuICA3MTpcdC8qXG4gIDcyOlx0ICogSGFuZGxlIGFuIGVycm9yIHJlY2VpdmVkIG9uIHRoZSBsb2NhbCBlbmRwb2ludC5cbiAgNzM6XHQgKi9cbiAgNzQ6XHR2b2lkIHJ4cnBjX2Vycm9yX3JlcG9ydChzdHJ1Y3Qgc29jayAqc2spXG4gIDc1Olx0e1xuICA3NjpcdFx0c3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbDtcbiAgNzc6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDc4Olx0XG4gIDc5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgcGFydCBvZiB0aGUgUnhSUEMgc3lzdGVtIHdvcmtzLiBUaGUgY29yZSBvZiB0aGlzLCBhcyBJIHJlY2FsbCwgbXVzdCBpbnZvbHZlIHRoZSBkZXN0cnVjdGlvbiBvZiBhIGxvY2FsIG9iamVjdCwgc28gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgcnhycGNfZGVzdHJveV9sb2NhbGAuIFRoZSBmdW5jdGlvbiBpdHNlbGYgc2hvdWxkIGJlIGluIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgLiBMZXQmIzM5O3MgbmF2aWdhdGUgdGhlcmUgYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0XHRfZW50ZXIoXCYjMzQ7JWRcJiMzNDssIGxvY2FsLVx1MDAzZWRlYnVnX2lkKTtcbiA0MjY6XHRcbiA0Mjc6XHRcdGxvY2FsLVx1MDAzZWRlYWQgPSB0cnVlO1xuIDQyODpcdFxuIDQyOTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZyeG5ldC1cdTAwM2Vsb2NhbF9tdXRleCk7XG4gNDMwOlx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2bG9jYWwtXHUwMDNlbGluayk7XG4gNDMxOlx0XHRtdXRleF91bmxvY2soXHUwMDI2cnhuZXQtXHUwMDNlbG9jYWxfbXV0ZXgpO1xuIDQzMjpcdFxuIDQzMzpcdFx0cnhycGNfY2xlYW5fdXBfbG9jYWxfY29ubnMobG9jYWwpO1xuIDQzNDpcdFx0cnhycGNfc2VydmljZV9jb25uZWN0aW9uX3JlYXBlcihcdTAwMjZyeG5ldC1cdTAwM2VzZXJ2aWNlX2Nvbm5fcmVhcGVyKTtcbiA0MzU6XHRcdEFTU0VSVCghbG9jYWwtXHUwMDNlc2VydmljZSk7XG4gNDM2Olx0XG4gNDM3Olx0XHRpZiAoc29ja2V0KSB7XG4gNDM4Olx0XHRcdGxvY2FsLVx1MDAzZXNvY2tldCA9IE5VTEw7XG4gNDM5Olx0XHRcdGtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTtcbiA0NDA6XHRcdFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVx1MDAzZXNrLCBOVUxMKTtcbiA0NDE6XHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gNDQyOlx0XHR9XG4gNDQzOlx0XG4gNDQ0Olx0XHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcbiA0NDU6XHRcdCAqIGxvY2FsIGVuZHBvaW50LlxuIDQ0NjpcdFx0ICovXG4gNDQ3Olx0I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbiA0NDg6XHRcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiA0NDk6XHQjZW5kaWZcbiA0NTA6XHRcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlKTtcbiA0NTE6XHRcbiA0NTI6XHRcdGlmIChzb2NrZXQpXG4gNDUzOlx0XHRcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xuIDQ1NDpcdFxuIDQ1NTpcdFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcbiA0NTY6XHRcdHBhZ2VfZnJhZ19jYWNoZV9kcmFpbihcdTAwMjZsb2NhbC1cdTAwM2V0eF9hbGxvYyk7XG4gNDU3Olx0fVxuIDQ1ODpcdFxuIDQ1OTpcdC8qXG4gNDYwOlx0ICogRGVzdHJveSBhIGxvY2FsIGVuZHBvaW50IGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIGV4cGlyZXMuXG4gNDYxOlx0ICovXG4gNDYyOlx0c3RhdGljIHZvaWQgcnhycGNfbG9jYWxfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIDQ2MzpcdHtcbiA0NjQ6XHRcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgcnhycGNfbG9jYWwsIHJjdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJTyBUaHJlYWQgQm90dGxlbmVjayoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc2VlaW5nIHNvbWUgcGVyZm9ybWFuY2UgZGlwcywgYW5kIHRoZSBzdXNwaWNpb24gaXMgc3RhcnRpbmcgdG8gbGVhbiB0b3dhcmRzIGFuIEkvTyB0aHJlYWQgYm90dGxlbmVjayB3aXRoaW4gdGhlIGByeHJwY19pb190aHJlYWRgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcmVjZW50IGNoYW5nZXMgYXJvdW5kIGxpbmUgNDgwIOKAkyBJIHJlbWVtYmVyIHRoZSBtb2RpZmljYXRpb25zIHdlIG1hZGUgdG8gdGhlIGRhdGEgaGFuZGxpbmcgdGhlcmUuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBzcGVjaWZpYyBhcmVhIGFuZCBzZWUgaWYgd2UmIzM5O3ZlIGludHJvZHVjZWQgYW55IHVuZXhwZWN0ZWQgbGF0ZW5jeSBvciBjb250ZW50aW9uLiBJdCYjMzk7cyB0aW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBkaWcgaW50byB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGF0IGxpbmUgYW5kIHNlZSB3aGF0IHRoZSBkYXRhIGZsb3cgYW5kIGFueSBibG9ja2luZyBjYWxscyBsb29rIGxpa2UuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgc3RhbGxzIG9yIGluZWZmaWNpZW5jaWVzIGFuZCBkZXRlcm1pbmUgaWYgdGhleSYjMzk7cmUgY29udHJpYnV0aW5nIHRvIHRoZSBwZXJmb3JtYW5jZSBpc3N1ZXMgd2UmIzM5O3JlIHNlZWluZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmcmVzaCBtZW50YWwgbW9kZWwgb2YgdGhhdCB0aHJlYWQgYW5kIGhvdyB0aGF0IGFyZWEgb2YgY29kZSBleGVjdXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvaW9fdGhyZWFkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2NTpcdCNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4gNDY2Olx0XHRcdG5vdyA9IGt0aW1lX2dldF9yZWFsKCk7XG4gNDY3Olx0XHRcdHdoaWxlICgoc2tiID0gc2tiX3BlZWsoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpKSkge1xuIDQ2ODpcdFx0XHRcdGlmIChrdGltZV9iZWZvcmUobm93LCBza2ItXHUwMDNldHN0YW1wKSlcbiA0Njk6XHRcdFx0XHRcdGJyZWFrO1xuIDQ3MDpcdFx0XHRcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiA0NzE6XHRcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZSwgc2tiKTtcbiA0NzI6XHRcdFx0fVxuIDQ3MzpcdCNlbmRpZlxuIDQ3NDpcdFxuIDQ3NTpcdFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZSkpIHtcbiA0NzY6XHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlLmxvY2spO1xuIDQ3NzpcdFx0XHRcdHNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlLCBcdTAwMjZyeF9xdWV1ZSk7XG4gNDc4Olx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlLmxvY2spO1xuIDQ3OTpcdFx0XHRcdHRyYWNlX3J4cnBjX2lvdGhyZWFkX3J4KGxvY2FsLCBza2JfcXVldWVfbGVuKFx1MDAyNnJ4X3F1ZXVlKSk7XG4gNDgwOlx0XHRcdH1cbiA0ODE6XHRcbiA0ODI6XHRcdFx0LyogRGlzdHJpYnV0ZSBwYWNrZXRzIGFuZCBlcnJvcnMuICovXG4gNDgzOlx0XHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZyeF9xdWV1ZSkpKSB7XG4gNDg0Olx0XHRcdFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xuIDQ4NTpcdFxuIDQ4NjpcdFx0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbiA0ODc6XHRcdFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2VtYXJrKSB7XG4gNDg4Olx0XHRcdFx0Y2FzZSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ6XG4gNDg5Olx0XHRcdFx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSAwO1xuIDQ5MDpcdFx0XHRcdFx0aWYgKCFyeHJwY19pbnB1dF9wYWNrZXQobG9jYWwsIHNrYikpXG4gNDkxOlx0XHRcdFx0XHRcdHJ4cnBjX3JlamVjdF9wYWNrZXQobG9jYWwsIHNrYik7XG4gNDkyOlx0XHRcdFx0XHR0cmFjZV9yeHJwY19yeF9kb25lKHNrYi1cdTAwM2VtYXJrLCBza2ItXHUwMDNlcHJpb3JpdHkpO1xuIDQ5MzpcdFx0XHRcdFx0cnhycGNfZnJlZV9za2Ioc2tiLCByeHJwY19za2JfcHV0X2lucHV0KTtcbiA0OTQ6XHRcdFx0XHRcdGJyZWFrO1xuIDQ5NTpcdFx0XHRcdGNhc2UgUlhSUENfU0tCX01BUktfRVJST1I6XG4gNDk2Olx0XHRcdFx0XHRyeHJwY19pbnB1dF9lcnJvcihsb2NhbCwgc2tiKTtcbiA0OTc6XHRcdFx0XHRcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9lcnJvcl9yZXBvcnQpO1xuIDQ5ODpcdFx0XHRcdFx0YnJlYWs7XG4gNDk5Olx0XHRcdFx0Y2FzZSBSWFJQQ19TS0JfTUFSS19TRVJWSUNFX0NPTk5fU0VDVVJFRDpcbiA1MDA6XHRcdFx0XHRcdHJ4cnBjX2lucHV0X2Nvbm5fZXZlbnQoc3AtXHUwMDNlcG9rZV9jb25uLCBza2IpO1xuIDUwMTpcdFx0XHRcdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXHUwMDNlcG9rZV9jb25uLCByeHJwY19jb25uX3B1dF9wb2tlKTtcbiA1MDI6XHRcdFx0XHRcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9jb25uX3NlY3VyZWQpO1xuIDUwMzpcdFx0XHRcdFx0YnJlYWs7XG4gNTA0Olx0XHRcdFx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIyMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSeFJQQyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgUnhSUEMgc29ja2V0IHByb3RvY29sLCBzcGVjaWZpY2FsbHkgdGhlIG5ldHdvcmsgbGF5ZXIgKEFGX1JYUlBDKS4gVGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYCBhbmQgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AuIEludGVyZXN0aW5nLiBBbmQgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzIGFyZSBgcnhycGNfZW5jYXBfcmN2YCwgYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbGAuCgpSaWdodCwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBldmFsdWF0ZSBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEFGX1JYUlBDIHNvY2tldHMgYXJlIGRpcmVjdGx5IGNyZWF0YWJsZSwgc28gd2UgY2FuIGNvbnRyb2wgaW5wdXQgYW5kIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zLiBUaGV5IHVzZSBVRFAgZW5jYXBzdWxhdGlvbiwgaGFuZGxlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHF1ZXVlcywgbWFuYWdlIHNvY2tldCBidWZmZXJzIChTS0JzKSwgYW5kIGhhdmUgdGhlaXIgb3duIEkvTyB3b3JrZXIgdGhyZWFkcyBhbmQgbG9jYWwgZW5kcG9pbnQgbGlmZWN5Y2xlLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIG1vZGlmeWluZyBjcml0aWNhbCBhcmVhcyBvZiBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcg4oCTIGBza19ybWVtX3NjaGVkdWxlYCwgYHNrYl9zZXRfb3duZXJfcmAsIGBza2Jfb3JwaGFuYCDigJMgYXMgd2VsbCBhcyBkcm9wIHRyYWNraW5nLCBkZXN0aW5hdGlvbiAoZHN0KSBmb3JjaW5nLCBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgc29ja2V0IGRlc3RydWN0aW9uLiBUaGlzIG1lYW5zIGl0IGludm9sdmVzIG1lbW9yeSBtYW5hZ2VtZW50LCBuZXR3b3JrIHByb2Nlc3NpbmcsIGFuZCBjb25jdXJyZW5jeSDigJMgYWxsIHBvdGVudGlhbCBhcmVhcyBmb3IgdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcHJlcmVxdWlzaXRlcy4gV2UgbmVlZCBgQUZfUlhSUENgICh3aGljaCBkZXBlbmRzIG9uIGBJTkVUYCkgYW5kLCBvcHRpb25hbGx5LCBgQUZfUlhSUENfSVBWNmAuIE1ha2VzIHNlbnNlLgoKSSYjMzk7bGwgZm9jdXMgb24gdGhvc2UgaWRlbnRpZmllZCBzeW1ib2xzOiBgcnhycGNfZW5jYXBfcmN2YCwgYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbGAuIFRoZXkgYXJlIHRoZSBtYWluIHRhcmdldCBmb3IgaW5pdGlhbCBhbmFseXNpcy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgY3JpdGljYWwgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIEFGX1JYUlBDIHRoYXQgY291bGQgYmUgaW5kaXJlY3RseSBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIEFuZCwgYXMgYSBzYW5pdHkgY2hlY2ssIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGVyZSBgcnhycGNfZW5jYXBfcmN2YCBpcyBiZWluZyB1c2VkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTI2OD1zdGF0aWMgaW5saW5lIHZvaWQgcnhycGNfdGxwX2luaXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTI3Ny0gKi9cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjEyNzg6aW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzktdm9pZCByeHJwY19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKik7XG4tLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTEyPXN0YXRpYyBpbnQgcnhycGNfaW5wdXRfcGFja2V0X29uX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTI1LSAqL1xubmV0L3J4cnBjL2lvX3RocmVhZC5jOjI2OmludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNy17XG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTE2Mj1zdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTkzLVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSBVRFBfRU5DQVBfUlhSUEM7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTk0Olx0dHVuY2ZnLmVuY2FwX3JjdiA9IHJ4cnBjX2VuY2FwX3Jjdjtcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0xOTUtXHR0dW5jZmcuZW5jYXBfZXJyX3JjdiA9IHJ4cnBjX2VuY2FwX2Vycl9yY3Y7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MDMKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoaXMgaXMgc2ltcGxlIGVub3VnaC4gVGhlIHNldHVwIGlzIHF1aXRlIGNsZWFyLWN1dC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGJhc2VsaW5lLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZXkmIzM5O3ZlIGlkZW50aWZpZWQgYHJ4cnBjX2VuY2FwX3JjdmAsIGByeHJwY19pb190aHJlYWRgLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGFzIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gR29vZCBjaG9pY2VzLCB0aG9zZSBhcmUgZGVmaW5pdGVseSBwb3RlbnRpYWwgYXJlYXMgZm9yIGlucHV0IHZhbGlkYXRpb24gb3Igc3RhdGUgY29ycnVwdGlvbiBidWdzIHdpdGhpbiB0aGUgUnhSUEMgaW1wbGVtZW50YXRpb24uIEZpbmFsbHksIHRoZSBlbmFibGVkIGNvbmZpZ3MsIGBBRl9SWFJQQ2AgYW5kIGBJTkVUYCwgYXJlIHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgbmV0d29yay1mb2N1c2VkIGZ1enppbmcgY2FtcGFpZ24uIE1ha2VzIHNlbnNlIHdlJiMzOTtyZSBnb2luZyBhZnRlciB0aGUgUnhSUEMgbmV0d29yayBzdGFjay4gTm93LCBsZXQmIzM5O3MgZXhlY3V0ZSBgc2V0LXJlc3VsdHNgIGFuZCBzZWUgaG93IGl0IHBlcmZvcm1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZfUlhSUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uLCBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZywgc2tiIG93bmVyc2hpcCBhbmQgb3JwaGFuaW5nLCBhbmQgbG9jYWwgc29ja2V0IHRlYXJkb3duIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gdGhlIEFGX1JYUlBDIG5ldHdvcmsgcHJvdG9jb2wgc3Vic3lzdGVtLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFJ4UlBDIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZfUlhSUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uLCBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZywgc2tiIG93bmVyc2hpcCBhbmQgb3JwaGFuaW5nLCBhbmQgbG9jYWwgc29ja2V0IHRlYXJkb3duIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gdGhlIEFGX1JYUlBDIG5ldHdvcmsgcHJvdG9jb2wgc3Vic3lzdGVtLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFJ4UlBDIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJ4cnBjIHBhY2tldCByZWNlcHRpb24gYW5kIHNvY2tldCB0ZWFyZG93biBsb2dpYzpcbjEuIEluIGByeHJwY19lbmNhcF9yY3YoKWAgYW5kIGByeHJwY19pb190aHJlYWQoKWAsIGl0IGFkZHMgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZyBjaGVja3MgKGBza19ybWVtX3NjaGVkdWxlYCwgYHNrX3JtZW1fYWxsb2NgKSwgc2V0cyBza2Igb3duZXJzaGlwIG9uIHRoZSBVRFAgc29ja2V0IChgc2tiX3NldF9vd25lcl9yYCksIGZvcmNlcyBEU1QgcmV0ZW50aW9uIChgc2tiX2RzdF9mb3JjZWApLCBhbmQgb3JwaGFucyBza2JzIChgc2tiX29ycGhhbmApIHVwb24gZGVxdWV1ZWluZy5cbjIuIEluIGByeHJwY19kZXN0cm95X2xvY2FsKClgLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBwb2ludGVyIGNsZWFyYW5jZSB3aXRoIGByY3VfYXNzaWduX3NrX3VzZXJfZGF0YWAgZm9sbG93ZWQgYnkgYHN5bmNocm9uaXplX3JjdSgpYCwgZGVmZXJyaW5nIGBzb2NrX3JlbGVhc2UoKWAgdW50aWwgYWZ0ZXIgdGhlIHF1ZXVlcyBhcmUgcHVyZ2VkIHRvIGF2b2lkIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucyBvbiBzb2NrZXQgZGVzdHJ1Y3Rpb24uXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBtb2RpZnkgY29weS10by11c2VyIHBhdGhzLCBvciBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgYXJlYXMgKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igc2tiIGFjY291bnRpbmcgbGVha3MpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmVyZW5jZSB0cmFja2luZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGNhYjBjODBlMzViMTdjZjNhNDVjNDE4YzBhZDQ4OTczMjgxYTI2ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTI6MDA6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmMKaW5kZXggZGM1MTg0YTJmYTlkMS4uOGI3N2QxMzc4ODhlYSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9pb190aHJlYWQuYwpAQCAtNDEsOCAmIzQzOzQxLDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChza2ItJmd0O3RzdGFtcCA9PSAwKQogCQlza2ItJmd0O3RzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CiAKLQlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7Ci0JcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlyeF9xdWV1ZSA9ICZhbXA7bG9jYWwtJmd0O3J4X3F1ZXVlOwogI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVkKIAlpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8CkBAIC01Miw2ICYjNDM7NTAsMTkgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KICNlbmRpZgogCiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO3VkcF9zay0mZ3Q7c2tfcm1lbV9hbGxvYykgJmd0Oz0gUkVBRF9PTkNFKHVkcF9zay0mZ3Q7c2tfcmN2YnVmKSB8fAomIzQzOwkgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi0mZ3Q7dHJ1ZXNpemUpKSB7CiYjNDM7CQlza19kcm9wc19pbmModWRwX3NrKTsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiLSZndDtkZXYgPSBOVUxMOwomIzQzOwlza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spOwomIzQzOwlza2JfZHN0X2ZvcmNlKHNrYik7CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7bWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDsKJiM0MzsJcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTsKIAl3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTsKIAlyZXR1cm4gMDsKQEAgLTQ3MSw2ICYjNDM7NDgyLDggQEAgaW50IHJ4cnBjX2lvX3RocmVhZCh2b2lkICpkYXRhKQogCQkvKiBEaXN0cmlidXRlIHBhY2tldHMgYW5kIGVycm9ycy4gKi8KIAkJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7cnhfcXVldWUpKSkgewogCQkJc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpOwomIzQzOwomIzQzOwkJCXNrYl9vcnBoYW4oc2tiKTsKIAkJCXN3aXRjaCAoc2tiLSZndDttYXJrKSB7CiAJCQljYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDoKIAkJCQlza2ItJmd0O3ByaW9yaXR5ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYwppbmRleCAxNjlmOWRmZGFhNzdmLi42NjA0ZjlmOTUyNjYwIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jCkBAIC00MzcsOCAmIzQzOzQzNyw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKQogCWlmIChzb2NrZXQpIHsKIAkJbG9jYWwtJmd0O3NvY2tldCA9IE5VTEw7CiAJCWtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKLQkJc29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKLQkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CQlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtJmd0O3NrLCBOVUxMKTsKJiM0MzsJCXN5bmNocm9uaXplX3JjdSgpOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIHBhY2tldHMgY29taW5nIGluIHRvIHRoZQpAQCAtNDQ4LDYgJiM0Mzs0NDgsMTAgQEAgdm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfZGVsYXlfcXVldWUpOwogI2VuZGlmCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfcXVldWUpOwomIzQzOwomIzQzOwlpZiAoc29ja2V0KQomIzQzOwkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CiAJcnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTsKIAlwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oJmFtcDtsb2NhbC0mZ3Q7dHhfYWxsb2MpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3BlY2lmaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggc29ja2V0IG1lbW9yeSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IHJlcXVpcmVzIEtNU0FOIHNjcnV0aW55IG9yIGlmIHRoZSBjb25jZXJucyBhcmUgbW9yZSByZWxhdGVkIHRvIHNvY2tldCBidWZmZXIgYWNjb3VudGluZywgUkNVIGxpZmV0aW1lLCBhbmQgcmVsYXRlZCBuZXR3b3JraW5nIGVsZW1lbnRzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYG5ldC9yeHJwYy9pb190aHJlYWQuY2AsIHNwZWNpZmljYWxseSBgcnhycGNfZW5jYXBfcmN2KClgLCBJIHNlZSBzb21lIGludGVyZXN0aW5nIG9wZXJhdGlvbnMuIEl0IGFwcGVhcnMgdG8gYmUgaGFuZGxpbmcgVURQIHNvY2tldCBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoIGNoZWNrcyBhZ2FpbnN0IGB1ZHBfc2stJmd0O3NrX3JtZW1fYWxsb2NgIGFuZCBgdWRwX3NrLSZndDtza19yY3ZidWZgLCB1c2luZyBgc2tfcm1lbV9zY2hlZHVsZSgpYCBhbmQgdGhlbiBtYW5hZ2luZyB0aGUgb3duZXJzaGlwIG9mIHRoZSBgc2tiYC4gVGhlIHNldHRpbmcgb2YgYHNrYi0mZ3Q7ZGV2ID0gTlVMTDtgLCBmb2xsb3dlZCBieSBgc2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTtgLCBgc2tiX2RzdF9mb3JjZShza2IpO2AsIGFuZCBmaW5hbGx5IGBza2Jfb3JwaGFuKHNrYilgIGluIGByeHJwY19pb190aHJlYWRgIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIHRyeWluZyB0byBlbnN1cmUgcHJvcGVyIGJ1ZmZlciBvd25lcnNoaXAgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJdCBmZWVscyBsaWtlIHRoZSB1c3VhbCB0cmlja2VyeSB0byBrZWVwIHRyYWNrIG9mIG5ldHdvcmsgYnVmZmVycy4KClRoZW4sIG1vdmluZyB0byBgbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jYCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoKWAsIEkgbm90aWNlIHRoZSB1c2Ugb2YgYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC0mZ3Q7c2ssIE5VTEwpO2AgYW5kIGBzeW5jaHJvbml6ZV9yY3UoKWAsIHdoaWNoIGlzIGEgY2xhc3NpYyBSQ1UgcGF0dGVybiB0byBoYW5kbGUgc29ja2V0IHRlYXJkb3duIGFuZCBlbnN1cmUgZGF0YSB2aXNpYmlsaXR5IGR1cmluZyB0aGUgZGVzdHJ1Y3Rpb24gb2YgYHJ4cnBjX2xvY2FsYCBvYmplY3RzLiBEZWxheWluZyBgc29ja19yZWxlYXNlKHNvY2tldClgIGFmdGVyIHF1ZXVlIHB1cmdpbmcgaXMgYWxzbyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4KClRoZSBvdmVyYWxsIGdvYWwgc2VlbXMgdG8gYmUgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSByeHJwYyBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcHJvY2VzcyBpbnZvbHZpbmcgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nLCBidWZmZXJpbmcsIGFuZCB0ZWFyZG93bi4gSXQgYXBwZWFycyB0byBiZSBhZGRyZXNzaW5nOgoKMS4gIFVEUCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgdXNpbmcgYHNrX3JtZW1fc2NoZWR1bGVgLCBgc2tiX3NldF9vd25lcl9yYCwgYW5kIGBza2Jfb3JwaGFuYC4KMi4gIFNhZmUgdGVhcmRvd24gb2YgYHJ4cnBjX2xvY2FsYCBzb2NrZXRzIHdpdGggUkNVIHN5bmNocm9uaXphdGlvbiwgdGh1cyBlbnN1cmluZyBubyB1c2UgYWZ0ZXIgZnJlZSwgYW5kIHByb3BlciBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuCgpTbywgdGhlIGZvY3VzIGhlcmUsIGZvciBtZSwgaXMgZW5zdXJpbmcgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBvciBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgb3IgZXZlbiBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBCYXNlZCBvbiB0aGVzZSBvcGVyYXRpb25zLCBhbmQgYSBxdWljayBzY2FuIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHJ4cnBjLCBJJiMzOTttIGdvaW5nIHRvIGxlYW4gdG93YXJkcyB0aGlzIG5vdCByZXF1aXJpbmcgS01TQU4gYW5hbHlzaXMuIFRoZSBSQ1UgdXNhZ2UgYW5kIGJ1ZmZlciBvd25lcnNoaXAgcGF0dGVybnMgc2VlbSBzb3VuZC4gSG93ZXZlciwgSSYjMzk7bGwgc3RpbGwgZG8gYSB0aG9yb3VnaCBjb2RlIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhycGNfZW5jYXBfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEyNjg9c3RhdGljIGlubGluZSB2b2lkIHJ4cnBjX3RscF9pbml0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzctICovXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMjc4OmludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xMjc5LXZvaWQgcnhycGNfZXJyb3JfcmVwb3J0KHN0cnVjdCBzb2NrICopO1xuLS1cbm5ldC9yeHJwYy9pb190aHJlYWQuYz0xMj1zdGF0aWMgaW50IHJ4cnBjX2lucHV0X3BhY2tldF9vbl9jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNS0gKi9cbm5ldC9yeHJwYy9pb190aHJlYWQuYzoyNjppbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtMjcte1xuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0xNjI9c3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5My1cdHR1bmNmZy5lbmNhcF90eXBlID0gVURQX0VOQ0FQX1JYUlBDO1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjE5NDpcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTk1LVx0dHVuY2ZnLmVuY2FwX2Vycl9yY3YgPSByeHJwY19lbmNhcF9lcnJfcmN2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzA4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcHJvY2Vzc2luZyB0aG9zZSBsaW5lcyBpbiBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYDoKCioqQW5hbHl6aW5nIHJ4cnBjIElPIFRocmVhZCBDb2RlOiBJbml0aWFsIFNjYW4gJmFtcDsgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldC9yeHJwYy9pb190aHJlYWQuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIElPIHRocmVhZCBvcGVyYXRlcyB3aXRoaW4gdGhlIHJ4cnBjIGNvbnRleHQsIHNvIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uIGxpbmVzIDI1LTcwLCBhbmQgdGhlbiBJJiMzOTtsbCBqdW1wIGZ1cnRoZXIgZG93biB0byA0NjAtNTAwLiBGaXJzdCwgbGV0IG1lIGdldCBhIGdlbmVyYWwgaWRlYSBvZiB0aGUgc2V0IHVwIGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIElPIHRocmVhZCwgdGhlIGluaXRpYWwgc2V0dXAgb2YgbG9ja3MsIGFueSB0aHJlYWQgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBtYW5hZ2VtZW50IG9mIHRoZSBldmVudCBsb29wLgoKTm93IEkmIzM5O2xsIHplcm8gaW4gb24gbGluZXMgNDYwLTUwMC4gVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIHdvcmsgaXMgYmVpbmcgcGVyZm9ybWVkLCB3aXRoaW4gdGhlIElPIHRocmVhZC4gR2l2ZW4gdGhhdCYjMzk7cyB3aGVyZSBJIGVuZGVkIHVwLCBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIGNvZGUgaGFuZGxpbmcgaW5ib3VuZCBhbmQgb3V0Ym91bmQgZGF0YSwgaGFuZGxpbmcgYW55IGludGVycnVwdHMsIGNoZWNraW5nIGZvciB0aW1lb3V0cywgYW5kIG1hbmFnaW5nIHRoZSBjb25uZWN0aW9uIHN0YXRlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjcml0aWNhbCBwYXRoIHdoZXJlIHRoZSBJTyBpcyBhY3R1YWxseSBoYXBwZW5pbmcuIEkgZXhwZWN0IHRoZSBjb2RlIHRvIGJlIHJlbGF0aXZlbHkgZWZmaWNpZW50IGFuZCBvcHRpbWl6ZWQsIGdpdmVuIHRoZSBwZXJmb3JtYW5jZSByZXF1aXJlbWVudHMgb2YgYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IHNvY2tldCBzdGF0ZXMsIGVycm9ycywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gaXQgdXNlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSByeHJwYyBzdGFjay4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGlzIGhhbmRsZXMgYWxsIHRoZSBleHBlY3RlZCBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgdGhlIGBpb190aHJlYWRfd29ya2AgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIHJ4cnBjIHN1YnN5c3RlbSBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdGF0ZSBjaGFuZ2VzIGFyZS4gSG9wZWZ1bGx5LCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGNyaXRpY2FsIHBpZWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9pb190aHJlYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHQgKi9cbiAgMjY6XHRpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gIDI3Olx0e1xuICAyODpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcnhfcXVldWU7XG4gIDI5Olx0XHRzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YSh1ZHBfc2spO1xuICAzMDpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7XG4gIDMxOlx0XG4gIDMyOlx0XHRpZiAodW5saWtlbHkoIWxvY2FsKSkge1xuICAzMzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgMzQ6XHRcdFx0cmV0dXJuIDA7XG4gIDM1Olx0XHR9XG4gIDM2Olx0XHRpb190aHJlYWQgPSBSRUFEX09OQ0UobG9jYWwtXHUwMDNlaW9fdGhyZWFkKTtcbiAgMzc6XHRcdGlmICghaW9fdGhyZWFkKSB7XG4gIDM4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICAzOTpcdFx0XHRyZXR1cm4gMDtcbiAgNDA6XHRcdH1cbiAgNDE6XHRcdGlmIChza2ItXHUwMDNldHN0YW1wID09IDApXG4gIDQyOlx0XHRcdHNrYi1cdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xuICA0MzpcdFxuICA0NDpcdFx0cnhfcXVldWUgPSBcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZTtcbiAgNDU6XHQjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxuICA0NjpcdFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxuICA0NzpcdFx0ICAgICFza2JfcXVldWVfZW1wdHkoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpKSB7XG4gIDQ4Olx0XHRcdHNrYi1cdTAwM2V0c3RhbXAgPSBrdGltZV9hZGRfbXMoc2tiLVx1MDAzZXRzdGFtcCwgcnhycGNfaW5qZWN0X3J4X2RlbGF5KTtcbiAgNDk6XHRcdFx0cnhfcXVldWUgPSBcdTAwMjZsb2NhbC1cdTAwM2VyeF9kZWxheV9xdWV1ZTtcbiAgNTA6XHRcdH1cbiAgNTE6XHQjZW5kaWZcbiAgNTI6XHRcbiAgNTM6XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZ1ZHBfc2stXHUwMDNlc2tfcm1lbV9hbGxvYykgXHUwMDNlPSBSRUFEX09OQ0UodWRwX3NrLVx1MDAzZXNrX3JjdmJ1ZikgfHxcbiAgNTQ6XHRcdCAgICAhc2tfcm1lbV9zY2hlZHVsZSh1ZHBfc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuICA1NTpcdFx0XHRza19kcm9wc19pbmModWRwX3NrKTtcbiAgNTY6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDU3Olx0XHRcdHJldHVybiAwO1xuICA1ODpcdFx0fVxuICA1OTpcdFxuICA2MDpcdFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4gIDYxOlx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xuICA2MjpcdFx0c2tiX2RzdF9mb3JjZShza2IpO1xuICA2MzpcdFxuICA2NDpcdFx0c2tiLVx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XG4gIDY1Olx0XHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuICA2NjpcdFx0c2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7XG4gIDY3Olx0XHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcbiAgNjg6XHRcdHJldHVybiAwO1xuICA2OTpcdH1cbiAgNzA6XHRcbiAgNzE6XHQvKlxuICA3MjpcdCAqIEhhbmRsZSBhbiBlcnJvciByZWNlaXZlZCBvbiB0aGUgbG9jYWwgZW5kcG9pbnQuXG4gIDczOlx0ICovXG4gIDc0Olx0dm9pZCByeHJwY19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKnNrKVxuICA3NTpcdHtcbiAgNzY6XHRcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWw7XG4gIDc3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuICA3ODpcdFxuICA3OTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuICA4MDpcdFx0bG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcbiAgODE6XHRcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XG4gIDgyOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuICA4MzpcdFx0XHRyZXR1cm47XG4gIDg0Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGxvY2FsIG9iamVjdCBjb2RlIGluIHRoZSBSeFJQQyBpbXBsZW1lbnRhdGlvbi4gVGhlIGZhY3QgdGhhdCBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2Agc3VnZ2VzdHMgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBsb2NhbGx5LWJvdW5kIFJQQyBzZXJ2aWNlcywgYW5kIHRoZSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIG1hbmFnaW5nIHRoZW0uIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gaG93IHJlcXVlc3RzIGFyZSBkaXJlY3RlZCB0byB0aG9zZSBsb2NhbCBzZXJ2aWNlcywgaG93IHRoZWlyIHJlc3BvbnNlcyBhcmUgaGFuZGxlZCwgb3IgcGVyaGFwcyBzb21ldGhpbmcgYWJvdXQgcmVzb3VyY2UgbWFuYWdlbWVudCBvciBzZWN1cml0eSBjb250ZXh0IHdpdGhpbiB0aGUgbG9jYWwgb2JqZWN0IGFyY2hpdGVjdHVyZS4gSSB3b25kZXIgaWYgSSYjMzk7bSBsb29raW5nIGludG8gcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3Igc29tZSBvYnNjdXJlIGVkZ2UgY2FzZT8gS25vd2luZyB0aGUgZXhhY3QgcmVhc29uIGZvciB0aGUgaW52ZXN0aWdhdGlvbiB3b3VsZCBhbGxvdyBtZSB0byBiZXR0ZXIgdGFyZ2V0IG15IHNlYXJjaCB3aXRoaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBiYXNpY3MuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzMDpcdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNmxvY2FsLVx1MDAzZWxpbmspO1xuIDQzMTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ4bmV0LVx1MDAzZWxvY2FsX211dGV4KTtcbiA0MzI6XHRcbiA0MzM6XHRcdHJ4cnBjX2NsZWFuX3VwX2xvY2FsX2Nvbm5zKGxvY2FsKTtcbiA0MzQ6XHRcdHJ4cnBjX3NlcnZpY2VfY29ubmVjdGlvbl9yZWFwZXIoXHUwMDI2cnhuZXQtXHUwMDNlc2VydmljZV9jb25uX3JlYXBlcik7XG4gNDM1Olx0XHRBU1NFUlQoIWxvY2FsLVx1MDAzZXNlcnZpY2UpO1xuIDQzNjpcdFxuIDQzNzpcdFx0aWYgKHNvY2tldCkge1xuIDQzODpcdFx0XHRsb2NhbC1cdTAwM2Vzb2NrZXQgPSBOVUxMO1xuIDQzOTpcdFx0XHRrZXJuZWxfc29ja19zaHV0ZG93bihzb2NrZXQsIFNIVVRfUkRXUik7XG4gNDQwOlx0XHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cdTAwM2VzaywgTlVMTCk7XG4gNDQxOlx0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDQ0MjpcdFx0fVxuIDQ0MzpcdFxuIDQ0NDpcdFx0LyogQXQgdGhpcyBwb2ludCwgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgcGFja2V0cyBjb21pbmcgaW4gdG8gdGhlXG4gNDQ1Olx0XHQgKiBsb2NhbCBlbmRwb2ludC5cbiA0NDY6XHRcdCAqL1xuIDQ0NzpcdCNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4gNDQ4Olx0XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZsb2NhbC1cdTAwM2VyeF9kZWxheV9xdWV1ZSk7XG4gNDQ5Olx0I2VuZGlmXG4gNDUwOlx0XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZSk7XG4gNDUxOlx0XG4gNDUyOlx0XHRpZiAoc29ja2V0KVxuIDQ1MzpcdFx0XHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcbiA0NTQ6XHRcbiA0NTU6XHRcdHJ4cnBjX3B1cmdlX2NsaWVudF9jb25uZWN0aW9ucyhsb2NhbCk7XG4gNDU2Olx0XHRwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oXHUwMDI2bG9jYWwtXHUwMDNldHhfYWxsb2MpO1xuIDQ1NzpcdH1cbiA0NTg6XHRcbiA0NTk6XHQvKlxuIDQ2MDpcdCAqIERlc3Ryb3kgYSBsb2NhbCBlbmRwb2ludCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBleHBpcmVzLlxuIDQ2MTpcdCAqL1xuIDQ2MjpcdHN0YXRpYyB2b2lkIHJ4cnBjX2xvY2FsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbiA0NjM6XHR7XG4gNDY0Olx0XHRzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHJ4cnBjX2xvY2FsLCByY3UpO1xuIDQ2NTpcdFxuIDQ2NjpcdFx0cnhycGNfc2VlX2xvY2FsKGxvY2FsLCByeHJwY19sb2NhbF9mcmVlKTtcbiA0Njc6XHRcdGtmcmVlKGxvY2FsKTtcbiA0Njg6XHR9XG4gNDY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzMKCQkJCQkJCW91dHB1dDogMjgyCgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIG9mIHRoaXMgcGF0Y2ggaGluZ2VzIG9uIGEga2V5IHNldCBvZiBjcml0ZXJpYSwgYW5kIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHJlcXVpcmVzIEtNU0FOIGF0dGVudGlvbi4KCkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBVRFAgZW5jYXBzdWxhdGlvbiwgcXVldWVpbmcsIGFuZCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgZGF0YSBsZWFrYWdlIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNoZWNraW5nIGZvciBwbGFjZXMgd2hlcmUga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBsYXRlciBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgcmVhZHMsIGFuZCBmaW5hbGx5LCBhbnl0aGluZyB0aGF0IGNvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIHJlYWRzLgoKQWZ0ZXIgYSBjbG9zZSBpbnNwZWN0aW9uIG9mIHRoaXMgcGF0Y2gsIEkmIzM5O3ZlIGNvbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCBub25lIG9mIHRoZXNlIHBvdGVudGlhbCBpc3N1ZXMgYXJlIHByZXNlbnQuIFRoZXJlJiMzOTtzIG5vIGRpcmVjdCBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCBhcmUgcHJvYmxlbWF0aWMsIGFuZCBubyBpc3N1ZXMgd2l0aCBleGlzdGluZyBidWZmZXIgcmVhZHMuCgpNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYW5kL29yIGZpeGVzIHByaW1hcmlseSBjb25jdXJyZW5jeSBpc3N1ZXMsIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgZHVyaW5nIHNvY2tldCBzaHV0ZG93biBhbmQgcGFja2V0IHJlY2VwdGlvbiwgYW5kIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyBwcm9ibGVtcyAoZXNwZWNpYWxseSBhcm91bmQgYnVmZmVyIGxpbWl0cykuIEkgY2FuIHNlZSB0aGUgaXNzdWVzIHRoYXQgYXJlIGZpeGVkIHdpdGggYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC0mZ3Q7c2ssIE5VTEwpYCAmIzQzOyBgc3luY2hyb25pemVfcmN1KClgLCBhbmQgc29ja2V0IG93bmVyc2hpcC9TS0IgY2xlYW51cCAoYHNrYl9vcnBoYW4oc2tiKWAgd2hlbiBkZXF1ZXVpbmcpLgoKVGhlc2UgYXJlIGFsbCBpc3N1ZXMgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHJlbWl0IG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIHJlZ2ltZS4gVGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UuIFRoaXMgbWVhbnMgdGhhdCwgYmFzZWQgb24gbXkgZXhwZXJ0IG9waW5pb24sIGEgJiMzNDtOZWVkc0tNU0FOJiMzNDsgZGVzaWduYXRpb24gaXMgbm90IG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcnhycGMgcGFja2V0IHJlY2VwdGlvbiBhbmQgc29ja2V0IHRlYXJkb3duIGxvZ2ljOlxuMS4gSW4gYHJ4cnBjX2VuY2FwX3JjdigpYCBhbmQgYHJ4cnBjX2lvX3RocmVhZCgpYCwgaXQgYWRkcyByZWNlaXZlIGJ1ZmZlciBhY2NvdW50aW5nIGNoZWNrcyAoYHNrX3JtZW1fc2NoZWR1bGVgLCBgc2tfcm1lbV9hbGxvY2ApLCBzZXRzIHNrYiBvd25lcnNoaXAgb24gdGhlIFVEUCBzb2NrZXQgKGBza2Jfc2V0X293bmVyX3JgKSwgZm9yY2VzIERTVCByZXRlbnRpb24gKGBza2JfZHN0X2ZvcmNlYCksIGFuZCBvcnBoYW5zIHNrYnMgKGBza2Jfb3JwaGFuYCkgdXBvbiBkZXF1ZXVlaW5nLlxuMi4gSW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoKWAsIGl0IHJlcGxhY2VzIGEgZGlyZWN0IHBvaW50ZXIgY2xlYXJhbmNlIHdpdGggYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhYCBmb2xsb3dlZCBieSBgc3luY2hyb25pemVfcmN1KClgLCBkZWZlcnJpbmcgYHNvY2tfcmVsZWFzZSgpYCB1bnRpbCBhZnRlciB0aGUgcXVldWVzIGFyZSBwdXJnZWQgdG8gYXZvaWQgdXNlLWFmdGVyLWZyZWUvcmFjZSBjb25kaXRpb25zIG9uIHNvY2tldCBkZXN0cnVjdGlvbi5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIG1vZGlmeSBjb3B5LXRvLXVzZXIgcGF0aHMsIG9yIGludHJvZHVjZSB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBhcmVhcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBza2IgYWNjb3VudGluZyBsZWFrcykgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByeHJwYyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBzb2NrZXQgdGVhcmRvd24gbG9naWM6XG4xLiBJbiBgcnhycGNfZW5jYXBfcmN2KClgIGFuZCBgcnhycGNfaW9fdGhyZWFkKClgLCBpdCBhZGRzIHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcgY2hlY2tzIChgc2tfcm1lbV9zY2hlZHVsZWAsIGBza19ybWVtX2FsbG9jYCksIHNldHMgc2tiIG93bmVyc2hpcCBvbiB0aGUgVURQIHNvY2tldCAoYHNrYl9zZXRfb3duZXJfcmApLCBmb3JjZXMgRFNUIHJldGVudGlvbiAoYHNrYl9kc3RfZm9yY2VgKSwgYW5kIG9ycGhhbnMgc2ticyAoYHNrYl9vcnBoYW5gKSB1cG9uIGRlcXVldWVpbmcuXG4yLiBJbiBgcnhycGNfZGVzdHJveV9sb2NhbCgpYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgcG9pbnRlciBjbGVhcmFuY2Ugd2l0aCBgcmN1X2Fzc2lnbl9za191c2VyX2RhdGFgIGZvbGxvd2VkIGJ5IGBzeW5jaHJvbml6ZV9yY3UoKWAsIGRlZmVycmluZyBgc29ja19yZWxlYXNlKClgIHVudGlsIGFmdGVyIHRoZSBxdWV1ZXMgYXJlIHB1cmdlZCB0byBhdm9pZCB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMgb24gc29ja2V0IGRlc3RydWN0aW9uLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgbW9kaWZ5IGNvcHktdG8tdXNlciBwYXRocywgb3IgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFBvdGVudGlhbCBidWdzIGluIHRoZXNlIGFyZWFzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHNrYiBhY2NvdW50aW5nIGxlYWtzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6MjIuMTQ2MjE4ODQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcyMzMwMTIxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19lbmNhcF9yY3ZcIixcbiAgICBcInJ4cnBjX2lvX3RocmVhZFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9sb2NhbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcnhycGMgcGFja2V0IHJlY2VwdGlvbiBhbmQgc29ja2V0IHRlYXJkb3duIGxvZ2ljOlxcbjEuIEluIGByeHJwY19lbmNhcF9yY3YoKWAgYW5kIGByeHJwY19pb190aHJlYWQoKWAsIGl0IGFkZHMgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZyBjaGVja3MgKGBza19ybWVtX3NjaGVkdWxlYCwgYHNrX3JtZW1fYWxsb2NgKSwgc2V0cyBza2Igb3duZXJzaGlwIG9uIHRoZSBVRFAgc29ja2V0IChgc2tiX3NldF9vd25lcl9yYCksIGZvcmNlcyBEU1QgcmV0ZW50aW9uIChgc2tiX2RzdF9mb3JjZWApLCBhbmQgb3JwaGFucyBza2JzIChgc2tiX29ycGhhbmApIHVwb24gZGVxdWV1ZWluZy5cXG4yLiBJbiBgcnhycGNfZGVzdHJveV9sb2NhbCgpYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgcG9pbnRlciBjbGVhcmFuY2Ugd2l0aCBgcmN1X2Fzc2lnbl9za191c2VyX2RhdGFgIGZvbGxvd2VkIGJ5IGBzeW5jaHJvbml6ZV9yY3UoKWAsIGRlZmVycmluZyBgc29ja19yZWxlYXNlKClgIHVudGlsIGFmdGVyIHRoZSBxdWV1ZXMgYXJlIHB1cmdlZCB0byBhdm9pZCB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMgb24gc29ja2V0IGRlc3RydWN0aW9uLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBtb2RpZnkgY29weS10by11c2VyIHBhdGhzLCBvciBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgYXJlYXMgKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igc2tiIGFjY291bnRpbmcgbGVha3MpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmVyZW5jZSB0cmFja2luZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCByZWNlcHRpb24sIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBhY2NvdW50aW5nLCBza2Igb3duZXJzaGlwIGFuZCBvcnBoYW5pbmcsIGFuZCBsb2NhbCBzb2NrZXQgdGVhcmRvd24gUkNVIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgQUZfUlhSUEMgbmV0d29yayBwcm90b2NvbCBzdWJzeXN0ZW0uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUnhSUEMgc29ja2V0cyBhbmQgbmV0d29yayBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDoyMi4xNDYyMjQ1NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDY3NjgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRjYWIwYzgwZTM1YjE3Y2YzYTQ1YzQxOGMwYWQ0ODk3MzI4MWEyNmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAxMjowMDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcXG5pbmRleCBkYzUxODRhMmZhOWQxLi44Yjc3ZDEzNzg4OGVhIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9pb190aHJlYWQuY1xcbisrKyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xcbkBAIC00MSw4ICs0MSw2IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0aWYgKHNrYi1cXHUwMDNldHN0YW1wID09IDApXFxuIFxcdFxcdHNrYi1cXHUwMDNldHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTtcXG4gXFxuLVxcdHNrYi1cXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcXG4tXFx0cnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTtcXG4gXFx0cnhfcXVldWUgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3F1ZXVlO1xcbiAjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbiBcXHRpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8XFxuQEAgLTUyLDYgKzUwLDE5IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0fVxcbiAjZW5kaWZcXG4gXFxuK1xcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2dWRwX3NrLVxcdTAwM2Vza19ybWVtX2FsbG9jKSBcXHUwMDNlPSBSRUFEX09OQ0UodWRwX3NrLVxcdTAwM2Vza19yY3ZidWYpIHx8XFxuK1xcdCAgICAhc2tfcm1lbV9zY2hlZHVsZSh1ZHBfc2ssIHNrYiwgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpIHtcXG4rXFx0XFx0c2tfZHJvcHNfaW5jKHVkcF9zayk7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0c2tiLVxcdTAwM2VkZXYgPSBOVUxMO1xcbitcXHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xcbitcXHRza2JfZHN0X2ZvcmNlKHNrYik7XFxuK1xcbitcXHRza2ItXFx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XFxuK1xcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XFxuIFxcdHNrYl9xdWV1ZV90YWlsKHJ4X3F1ZXVlLCBza2IpO1xcbiBcXHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQ3MSw2ICs0ODIsOCBAQCBpbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXFxuIFxcdFxcdC8qIERpc3RyaWJ1dGUgcGFja2V0cyBhbmQgZXJyb3JzLiAqL1xcbiBcXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnJ4X3F1ZXVlKSkpIHtcXG4gXFx0XFx0XFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xcbitcXG4rXFx0XFx0XFx0c2tiX29ycGhhbihza2IpO1xcbiBcXHRcXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlbWFyaykge1xcbiBcXHRcXHRcXHRjYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDpcXG4gXFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcmlvcml0eSA9IDA7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xcbmluZGV4IDE2OWY5ZGZkYWE3N2YuLjY2MDRmOWY5NTI2NjAgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXFxuKysrIGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXFxuQEAgLTQzNyw4ICs0MzcsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcXG4gXFx0aWYgKHNvY2tldCkge1xcbiBcXHRcXHRsb2NhbC1cXHUwMDNlc29ja2V0ID0gTlVMTDtcXG4gXFx0XFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xcbi1cXHRcXHRzb2NrZXQtXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xcbi1cXHRcXHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcXG4rXFx0XFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVxcdTAwM2VzaywgTlVMTCk7XFxuK1xcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcXG5AQCAtNDQ4LDYgKzQ0OCwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcXG4gXFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSk7XFxuICNlbmRpZlxcbiBcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4rXFxuK1xcdGlmIChzb2NrZXQpXFxuK1xcdFxcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xcbitcXG4gXFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcXG4gXFx0cGFnZV9mcmFnX2NhY2hlX2RyYWluKFxcdTAwMjZsb2NhbC1cXHUwMDNldHhfYWxsb2MpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjIyLjc1Nzg1MzMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMDAyMDU0NzA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2VuY2FwX3JjdlwiLFxuICAgIFwicnhycGNfaW9fdGhyZWFkXCIsXG4gICAgXCJyeHJwY19kZXN0cm95X2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiwgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcsIHNrYiBvd25lcnNoaXAgYW5kIG9ycGhhbmluZywgYW5kIGxvY2FsIHNvY2tldCB0ZWFyZG93biBSQ1Ugc3luY2hyb25pemF0aW9uIGluIHRoZSBBRl9SWFJQQyBuZXR3b3JrIHByb3RvY29sIHN1YnN5c3RlbS4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBSeFJQQyBzb2NrZXRzIGFuZCBuZXR3b3JrIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGNhYjBjODBlMzViMTdjZjNhNDVjNDE4YzBhZDQ4OTczMjgxYTI2ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTI6MDA6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbmluZGV4IGRjNTE4NGEyZmE5ZDEuLjhiNzdkMTM3ODg4ZWEgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbisrKyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xuQEAgLTQxLDggKzQxLDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHNrYi1cdTAwM2V0c3RhbXAgPT0gMClcbiBcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7XG4gXG4tXHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbi1cdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gXHRyeF9xdWV1ZSA9IFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlO1xuICNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4gXHRpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8XG5AQCAtNTIsNiArNTAsMTkgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuICNlbmRpZlxuIFxuK1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNnVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2U9IFJFQURfT05DRSh1ZHBfc2stXHUwMDNlc2tfcmN2YnVmKSB8fFxuK1x0ICAgICFza19ybWVtX3NjaGVkdWxlKHVkcF9zaywgc2tiLCBza2ItXHUwMDNldHJ1ZXNpemUpKSB7XG4rXHRcdHNrX2Ryb3BzX2luYyh1ZHBfc2spO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRza2ItXHUwMDNlZGV2ID0gTlVMTDtcbitcdHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zayk7XG4rXHRza2JfZHN0X2ZvcmNlKHNrYik7XG4rXG4rXHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbitcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gXHRza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTtcbiBcdHdha2VfdXBfcHJvY2Vzcyhpb190aHJlYWQpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDcxLDYgKzQ4Miw4IEBAIGludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSlcbiBcdFx0LyogRGlzdHJpYnV0ZSBwYWNrZXRzIGFuZCBlcnJvcnMuICovXG4gXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZyeF9xdWV1ZSkpKSB7XG4gXHRcdFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xuK1xuK1x0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbiBcdFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2VtYXJrKSB7XG4gXHRcdFx0Y2FzZSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ6XG4gXHRcdFx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSAwO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuaW5kZXggMTY5ZjlkZmRhYTc3Zi4uNjYwNGY5Zjk1MjY2MCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuKysrIGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXG5AQCAtNDM3LDggKzQzNyw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKVxuIFx0aWYgKHNvY2tldCkge1xuIFx0XHRsb2NhbC1cdTAwM2Vzb2NrZXQgPSBOVUxMO1xuIFx0XHRrZXJuZWxfc29ja19zaHV0ZG93bihzb2NrZXQsIFNIVVRfUkRXUik7XG4tXHRcdHNvY2tldC1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xuLVx0XHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcbitcdFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVx1MDAzZXNrLCBOVUxMKTtcbitcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHR9XG4gXG4gXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcbkBAIC00NDgsNiArNDQ4LDEwIEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKVxuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xuICNlbmRpZlxuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2bG9jYWwtXHUwMDNlcnhfcXVldWUpO1xuK1xuK1x0aWYgKHNvY2tldClcbitcdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4rXG4gXHRyeHJwY19wdXJnZV9jbGllbnRfY29ubmVjdGlvbnMobG9jYWwpO1xuIFx0cGFnZV9mcmFnX2NhY2hlX2RyYWluKFx1MDAyNmxvY2FsLVx1MDAzZXR4X2FsbG9jKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDoyMi43NTc4NTU3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4OTEzOTQxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSWFJQQyBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBtb2RpZmllZC4gSSBzZWUgY2hhbmdlcyBpbiBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYCBhbmQgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AuIExldCdzIGJyZWFrIGl0IGRvd246XG5cbiogICAqKmByeHJwY19lbmNhcF9yY3ZgIGluIGBpb190aHJlYWQuY2A6KiogTG9va3MgbGlrZSB0aGV5J3JlIHR3ZWFraW5nIHRoZSBwYWNrZXQgcmVjZWl2ZSBwYXRoLiBJIHNlZSBtZW1vcnkgYWxsb2NhdGlvbiBjaGVja3MgcmVsYXRlZCB0byB0aGUgcmVjZWl2ZSBidWZmZXIgKGBza19ybWVtX3NjaGVkdWxlYCwgYHNrYl9zZXRfb3duZXJfcmAsIGBza2JfZHN0X2ZvcmNlYCksIHdoaWNoIGlzIHN0YW5kYXJkLiBBbmQsIGludGVyZXN0aW5nLCB0aGV5J3ZlIG1vdmVkIGBza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtgIGRvd24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoeTsgdGhpcyBjb3VsZCBiZSBhYm91dCB0aW1pbmcgb3Igb3JkZXJpbmcgb2YgcGFja2V0IHByb2Nlc3NpbmcuXG4qICAgKipgcnhycGNfaW9fdGhyZWFkYCBpbiBgaW9fdGhyZWFkLmNgOioqIEFoLCB0aGV5J3ZlIGFkZGVkIGBza2Jfb3JwaGFuKHNrYilgIHdoZW4gZGVxdWV1aW5nIHRoZSBTS0IuIFRoaXMgc3VnZ2VzdHMgdGhleSdyZSBleHBsaWNpdGx5IG1hbmFnaW5nIHRoZSBTS0IgbGlmZWN5Y2xlIHdoZW4gaXQncyBiZWluZyBwdWxsZWQgb2ZmIHRoZSBxdWV1ZS4gVGhpcyBpcyBnb29kIHRvIHNlZTsgZXhwbGljaXQgbWVtb3J5IG1hbmFnZW1lbnQgaXMga2V5IGluIGtlcm5lbCBjb2RlLlxuKiAgICoqYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGluIGBsb2NhbF9vYmplY3QuY2A6KiogSGVyZSwgdGhleSdyZSBjbGVhbmluZyB1cCBsb2NhbCBSWFJQQyBvYmplY3RzLCBzcGVjaWZpY2FsbHkgdGhlIHNvY2tldC4gSSBzZWUgYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cdTAwM2VzaywgTlVMTCk7IHN5bmNocm9uaXplX3JjdSgpO2AsIHdoaWNoIG1lYW5zIHRoZXkncmUgcHJvcGVybHkgdW5saW5raW5nIHRoZSBzb2NrZXQncyB1c2VyIGRhdGEgYW5kIHVzaW5nIFJDVSB0byBlbnN1cmUgc2FmZSBtZW1vcnkgcmVjbGFtYXRpb24uIFRoZSByZWxlYXNlIGFmdGVyIHB1cmdpbmcgcXVldWVzIGlzIHR5cGljYWwuXG5cbkknbGwgYWxzbyB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgQUZcXF9SWFJQQyBjb25maWd1cmF0aW9uIGlzIHN0aWxsIGNvcnJlY3QuIEknbGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBzbyBJIGNhbiBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjI5LjY0OTI1MjYxM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjIxNTc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZfUlhSUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvS2NvbmZpZy01LVxcbm5ldC9yeHJwYy9LY29uZmlnOjY6Y29uZmlnIEFGX1JYUlBDXFxubmV0L3J4cnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWc9MjU9aWYgQUZfUlhSUENcXG5uZXQvcnhycGMvS2NvbmZpZy0yNi1cXG5uZXQvcnhycGMvS2NvbmZpZzoyNzpjb25maWcgQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgUnhSUENcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy0zMy1cXG5uZXQvcnhycGMvS2NvbmZpZzozNDpjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1NcXG5uZXQvcnhycGMvS2NvbmZpZy0zNS1cXHRib29sIFxcXCJJbmplY3QgcGFja2V0IGxvc3MgaW50byBSeFJQQyBwYWNrZXQgc3RyZWFtXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctMzktXFxubmV0L3J4cnBjL0tjb25maWc6NDA6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbm5ldC9yeHJwYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIkluamVjdCBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb25cXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy00OS1cXG5uZXQvcnhycGMvS2NvbmZpZzo1MDpjb25maWcgQUZfUlhSUENfREVCVUdcXG5uZXQvcnhycGMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJSeFJQQyBkeW5hbWljIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnPTg5PWNvbmZpZyBSWFBFUkZcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTk1LVxcbm5ldC9yeHJwYy9LY29uZmlnOjk2OmNvbmZpZyBBRl9SWFJQQ19LVU5JVF9URVNUXFxubmV0L3J4cnBjL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIlJ4UlBDIGNyeXB0byBLVW5pdCB0ZXN0XFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjI5LjcwNTQ3NjU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5MTEyMzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQUZfUlhSUEMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQUZfUlhSUENgLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gdGhlIG5ldC9yeHJwYyBkaXJlY3RvcnkuIFRoYXQncyB0aGUgc3RhbmRhcmQgd2F5IHRoZXNlIHRoaW5ncyBhcmUgY29uZmlndXJlZCwgc28gaXQgc2hvdWxkIGxheSBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgcHJldHR5IGNsZWFybHkuIExldCdzIGdldCByaWdodCB0byBpdCBhbmQgY2hlY2sgYG5ldC9yeHJwYy9LY29uZmlnYCB0byBzZWUgd2hhdCdzIHdoYXQuIEhvcGVmdWxseSwgaXQncyB3ZWxsLWNvbW1lbnRlZCBhbmQgZWFzeSB0byBwYXJzZS4gU2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBwcmUtcmVxdWlzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc5NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjMxLjY5NjYwMTg1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFJ4UlBDIHNlc3Npb24gc29ja2V0c1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQUZfUlhSUENcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJSeFJQQyBzZXNzaW9uIHNvY2tldHNcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0RFUyBpZiBSWEtBRFxcbiAgMTE6XFx0XFx0c2VsZWN0IEtFWVNcXG4gIDEyOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0ICBTYXkgWSBvciBNIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBSeFJQQyBzZXNzaW9uIHNvY2tldHMgKGp1c3RcXG4gIDE1OlxcdFxcdCAgdGhlIHRyYW5zcG9ydCBwYXJ0LCBub3QgdGhlIHByZXNlbnRhdGlvbiBwYXJ0OiAodW4pbWFyc2hhbGxpbmcgaXNcXG4gIDE2OlxcdFxcdCAgbGVmdCB0byB0aGUgYXBwbGljYXRpb24pLlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIFRoZXNlIGFyZSB1c2VkIGZvciBBRlMga2VybmVsIGZpbGVzeXN0ZW0gYW5kIHVzZXJzcGFjZSB1dGlsaXRpZXMuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgVGhpcyBtb2R1bGUgYXQgdGhlIG1vbWVudCBvbmx5IHN1cHBvcnRzIGNsaWVudCBvcGVyYXRpb25zIGFuZCBpc1xcbiAgMjE6XFx0XFx0ICBjdXJyZW50bHkgaW5jb21wbGV0ZS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0aWYgQUZfUlhSUENcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEFGX1JYUlBDX0lQVjZcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgUnhSUENcXFwiXFxuICAyOTpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBBRl9SWFJQQyB0byB1c2UgSVBWNiBVRFAgYXMgd2VsbCBhcyBJUFY0IFVEUCBhc1xcbiAgMzI6XFx0XFx0ICBpdHMgbmV0d29yayB0cmFuc3BvcnQuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfTE9TU1xcbiAgMzU6XFx0XFx0Ym9vbCBcXFwiSW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVxcXCJcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmplY3QgcGFja2V0IGxvc3MgYnkgZGlzY2FyZGluZyBzb21lIHJlY2VpdmVkIGFuZCBzb21lXFxuICAzODpcXHRcXHQgIHRyYW5zbWl0dGVkIHBhY2tldHMuXFxuICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6MzEuNjk2NjYyODYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU1Nzg3ODc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBSZWNlbnQgUnhSUEMgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZXNlIFJ4UlBDIGNoYW5nZXMuIFRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvcnhycGMvaW9fdGhyZWFkLmNgIGFuZCBgbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgY29kZS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGV4YWN0IGltcGFjdCBvZiB0aGVzZSB1cGRhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDozMy4yNTQ1NTExM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvaW9fdGhyZWFkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XFxuICAzMzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDM0OlxcdFxcdFxcdHJldHVybiAwO1xcbiAgMzU6XFx0XFx0fVxcbiAgMzY6XFx0XFx0aW9fdGhyZWFkID0gUkVBRF9PTkNFKGxvY2FsLVxcdTAwM2Vpb190aHJlYWQpO1xcbiAgMzc6XFx0XFx0aWYgKCFpb190aHJlYWQpIHtcXG4gIDM4OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA0MDpcXHRcXHR9XFxuICA0MTpcXHRcXHRpZiAoc2tiLVxcdTAwM2V0c3RhbXAgPT0gMClcXG4gIDQyOlxcdFxcdFxcdHNrYi1cXHUwMDNldHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0cnhfcXVldWUgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3F1ZXVlO1xcbiAgNDU6XFx0I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG4gIDQ2OlxcdFxcdGlmIChyeHJwY19pbmplY3RfcnhfZGVsYXkgfHxcXG4gIDQ3OlxcdFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfZGVsYXlfcXVldWUpKSB7XFxuICA0ODpcXHRcXHRcXHRza2ItXFx1MDAzZXRzdGFtcCA9IGt0aW1lX2FkZF9tcyhza2ItXFx1MDAzZXRzdGFtcCwgcnhycGNfaW5qZWN0X3J4X2RlbGF5KTtcXG4gIDQ5OlxcdFxcdFxcdHJ4X3F1ZXVlID0gXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZTtcXG4gIDUwOlxcdFxcdH1cXG4gIDUxOlxcdCNlbmRpZlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnVkcF9zay1cXHUwMDNlc2tfcm1lbV9hbGxvYykgXFx1MDAzZT0gUkVBRF9PTkNFKHVkcF9zay1cXHUwMDNlc2tfcmN2YnVmKSB8fFxcbiAgNTQ6XFx0XFx0ICAgICFza19ybWVtX3NjaGVkdWxlKHVkcF9zaywgc2tiLCBza2ItXFx1MDAzZXRydWVzaXplKSkge1xcbiAgNTU6XFx0XFx0XFx0c2tfZHJvcHNfaW5jKHVkcF9zayk7XFxuICA1NjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDU3OlxcdFxcdFxcdHJldHVybiAwO1xcbiAgNTg6XFx0XFx0fVxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRza2ItXFx1MDAzZWRldiA9IE5VTEw7XFxuICA2MTpcXHRcXHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xcbiAgNjI6XFx0XFx0c2tiX2RzdF9mb3JjZShza2IpO1xcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRza2ItXFx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XFxuICA2NTpcXHRcXHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xcbiAgNjY6XFx0XFx0c2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7XFxuICA2NzpcXHRcXHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcXG4gIDY4OlxcdFxcdHJldHVybiAwO1xcbiAgNjk6XFx0fVxcbiAgNzA6XFx0XFxuICA3MTpcXHQvKlxcbiAgNzI6XFx0ICogSGFuZGxlIGFuIGVycm9yIHJlY2VpdmVkIG9uIHRoZSBsb2NhbCBlbmRwb2ludC5cXG4gIDczOlxcdCAqL1xcbiAgNzQ6XFx0dm9pZCByeHJwY19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKnNrKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0c3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbDtcXG4gIDc3OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6MzMuMjU0NjkwNjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDU1NjMxNjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGByeHJwY19kZXN0cm95X2xvY2FsYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgcGFydCBvZiB0aGUgUnhSUEMgc3lzdGVtIHdvcmtzLiBUaGUgY29yZSBvZiB0aGlzLCBhcyBJIHJlY2FsbCwgbXVzdCBpbnZvbHZlIHRoZSBkZXN0cnVjdGlvbiBvZiBhIGxvY2FsIG9iamVjdCwgc28gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgcnhycGNfZGVzdHJveV9sb2NhbGAuIFRoZSBmdW5jdGlvbiBpdHNlbGYgc2hvdWxkIGJlIGluIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgLiBMZXQncyBuYXZpZ2F0ZSB0aGVyZSBhbmQgc2VlIHdoYXQgaXQncyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6MzQuNzEwMzI1NDM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdFxcdF9lbnRlcihcXFwiJWRcXFwiLCBsb2NhbC1cXHUwMDNlZGVidWdfaWQpO1xcbiA0MjY6XFx0XFxuIDQyNzpcXHRcXHRsb2NhbC1cXHUwMDNlZGVhZCA9IHRydWU7XFxuIDQyODpcXHRcXG4gNDI5OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnJ4bmV0LVxcdTAwM2Vsb2NhbF9tdXRleCk7XFxuIDQzMDpcXHRcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNmxvY2FsLVxcdTAwM2VsaW5rKTtcXG4gNDMxOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cnhuZXQtXFx1MDAzZWxvY2FsX211dGV4KTtcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0cnhycGNfY2xlYW5fdXBfbG9jYWxfY29ubnMobG9jYWwpO1xcbiA0MzQ6XFx0XFx0cnhycGNfc2VydmljZV9jb25uZWN0aW9uX3JlYXBlcihcXHUwMDI2cnhuZXQtXFx1MDAzZXNlcnZpY2VfY29ubl9yZWFwZXIpO1xcbiA0MzU6XFx0XFx0QVNTRVJUKCFsb2NhbC1cXHUwMDNlc2VydmljZSk7XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdGlmIChzb2NrZXQpIHtcXG4gNDM4OlxcdFxcdFxcdGxvY2FsLVxcdTAwM2Vzb2NrZXQgPSBOVUxMO1xcbiA0Mzk6XFx0XFx0XFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xcbiA0NDA6XFx0XFx0XFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVxcdTAwM2VzaywgTlVMTCk7XFxuIDQ0MTpcXHRcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gNDQyOlxcdFxcdH1cXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0LyogQXQgdGhpcyBwb2ludCwgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgcGFja2V0cyBjb21pbmcgaW4gdG8gdGhlXFxuIDQ0NTpcXHRcXHQgKiBsb2NhbCBlbmRwb2ludC5cXG4gNDQ2OlxcdFxcdCAqL1xcbiA0NDc6XFx0I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG4gNDQ4OlxcdFxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xcbiA0NDk6XFx0I2VuZGlmXFxuIDQ1MDpcXHRcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4gNDUxOlxcdFxcbiA0NTI6XFx0XFx0aWYgKHNvY2tldClcXG4gNDUzOlxcdFxcdFxcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRyeHJwY19wdXJnZV9jbGllbnRfY29ubmVjdGlvbnMobG9jYWwpO1xcbiA0NTY6XFx0XFx0cGFnZV9mcmFnX2NhY2hlX2RyYWluKFxcdTAwMjZsb2NhbC1cXHUwMDNldHhfYWxsb2MpO1xcbiA0NTc6XFx0fVxcbiA0NTg6XFx0XFxuIDQ1OTpcXHQvKlxcbiA0NjA6XFx0ICogRGVzdHJveSBhIGxvY2FsIGVuZHBvaW50IGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIGV4cGlyZXMuXFxuIDQ2MTpcXHQgKi9cXG4gNDYyOlxcdHN0YXRpYyB2b2lkIHJ4cnBjX2xvY2FsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4gNDYzOlxcdHtcXG4gNDY0OlxcdFxcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgcnhycGNfbG9jYWwsIHJjdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjM0LjcxMDUyOTYyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDg4MjA0MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJTyBUaHJlYWQgQm90dGxlbmVjayoqXG5cbk9rYXksIHNvIHdlJ3JlIHNlZWluZyBzb21lIHBlcmZvcm1hbmNlIGRpcHMsIGFuZCB0aGUgc3VzcGljaW9uIGlzIHN0YXJ0aW5nIHRvIGxlYW4gdG93YXJkcyBhbiBJL08gdGhyZWFkIGJvdHRsZW5lY2sgd2l0aGluIHRoZSBgcnhycGNfaW9fdGhyZWFkYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHJlY2VudCBjaGFuZ2VzIGFyb3VuZCBsaW5lIDQ4MCDigJMgSSByZW1lbWJlciB0aGUgbW9kaWZpY2F0aW9ucyB3ZSBtYWRlIHRvIHRoZSBkYXRhIGhhbmRsaW5nIHRoZXJlLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgc3BlY2lmaWMgYXJlYSBhbmQgc2VlIGlmIHdlJ3ZlIGludHJvZHVjZWQgYW55IHVuZXhwZWN0ZWQgbGF0ZW5jeSBvciBjb250ZW50aW9uLiBJdCdzIHRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIGRpZyBpbnRvIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoYXQgbGluZSBhbmQgc2VlIHdoYXQgdGhlIGRhdGEgZmxvdyBhbmQgYW55IGJsb2NraW5nIGNhbGxzIGxvb2sgbGlrZS4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBzdGFsbHMgb3IgaW5lZmZpY2llbmNpZXMgYW5kIGRldGVybWluZSBpZiB0aGV5J3JlIGNvbnRyaWJ1dGluZyB0byB0aGUgcGVyZm9ybWFuY2UgaXNzdWVzIHdlJ3JlIHNlZWluZy4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZyZXNoIG1lbnRhbCBtb2RlbCBvZiB0aGF0IHRocmVhZCBhbmQgaG93IHRoYXQgYXJlYSBvZiBjb2RlIGV4ZWN1dGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjA2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDozNi43OTg3MzY1MTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3J4cnBjL2lvX3RocmVhZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2NTpcXHQjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbiA0NjY6XFx0XFx0XFx0bm93ID0ga3RpbWVfZ2V0X3JlYWwoKTtcXG4gNDY3OlxcdFxcdFxcdHdoaWxlICgoc2tiID0gc2tiX3BlZWsoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSkpKSB7XFxuIDQ2ODpcXHRcXHRcXHRcXHRpZiAoa3RpbWVfYmVmb3JlKG5vdywgc2tiLVxcdTAwM2V0c3RhbXApKVxcbiA0Njk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ3MDpcXHRcXHRcXHRcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcXG4gNDcxOlxcdFxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfcXVldWUsIHNrYik7XFxuIDQ3MjpcXHRcXHRcXHR9XFxuIDQ3MzpcXHQjZW5kaWZcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0XFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZSkpIHtcXG4gNDc2OlxcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZS5sb2NrKTtcXG4gNDc3OlxcdFxcdFxcdFxcdHNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfcXVldWUsIFxcdTAwMjZyeF9xdWV1ZSk7XFxuIDQ3ODpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZS5sb2NrKTtcXG4gNDc5OlxcdFxcdFxcdFxcdHRyYWNlX3J4cnBjX2lvdGhyZWFkX3J4KGxvY2FsLCBza2JfcXVldWVfbGVuKFxcdTAwMjZyeF9xdWV1ZSkpO1xcbiA0ODA6XFx0XFx0XFx0fVxcbiA0ODE6XFx0XFxuIDQ4MjpcXHRcXHRcXHQvKiBEaXN0cmlidXRlIHBhY2tldHMgYW5kIGVycm9ycy4gKi9cXG4gNDgzOlxcdFxcdFxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2cnhfcXVldWUpKSkge1xcbiA0ODQ6XFx0XFx0XFx0XFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xcbiA0ODU6XFx0XFxuIDQ4NjpcXHRcXHRcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuIDQ4NzpcXHRcXHRcXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlbWFyaykge1xcbiA0ODg6XFx0XFx0XFx0XFx0Y2FzZSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ6XFxuIDQ4OTpcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gMDtcXG4gNDkwOlxcdFxcdFxcdFxcdFxcdGlmICghcnhycGNfaW5wdXRfcGFja2V0KGxvY2FsLCBza2IpKVxcbiA0OTE6XFx0XFx0XFx0XFx0XFx0XFx0cnhycGNfcmVqZWN0X3BhY2tldChsb2NhbCwgc2tiKTtcXG4gNDkyOlxcdFxcdFxcdFxcdFxcdHRyYWNlX3J4cnBjX3J4X2RvbmUoc2tiLVxcdTAwM2VtYXJrLCBza2ItXFx1MDAzZXByaW9yaXR5KTtcXG4gNDkzOlxcdFxcdFxcdFxcdFxcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9pbnB1dCk7XFxuIDQ5NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNDk1OlxcdFxcdFxcdFxcdGNhc2UgUlhSUENfU0tCX01BUktfRVJST1I6XFxuIDQ5NjpcXHRcXHRcXHRcXHRcXHRyeHJwY19pbnB1dF9lcnJvcihsb2NhbCwgc2tiKTtcXG4gNDk3OlxcdFxcdFxcdFxcdFxcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9lcnJvcl9yZXBvcnQpO1xcbiA0OTg6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ5OTpcXHRcXHRcXHRcXHRjYXNlIFJYUlBDX1NLQl9NQVJLX1NFUlZJQ0VfQ09OTl9TRUNVUkVEOlxcbiA1MDA6XFx0XFx0XFx0XFx0XFx0cnhycGNfaW5wdXRfY29ubl9ldmVudChzcC1cXHUwMDNlcG9rZV9jb25uLCBza2IpO1xcbiA1MDE6XFx0XFx0XFx0XFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXFx1MDAzZXBva2VfY29ubiwgcnhycGNfY29ubl9wdXRfcG9rZSk7XFxuIDUwMjpcXHRcXHRcXHRcXHRcXHRyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfY29ubl9zZWN1cmVkKTtcXG4gNTAzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1MDQ6XFx0XFx0XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6MzYuNzk4ODMzOTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3OTg4MzE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSeFJQQyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgUnhSUEMgc29ja2V0IHByb3RvY29sLCBzcGVjaWZpY2FsbHkgdGhlIG5ldHdvcmsgbGF5ZXIgKEFGX1JYUlBDKS4gVGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYCBhbmQgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AuIEludGVyZXN0aW5nLiBBbmQgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzIGFyZSBgcnhycGNfZW5jYXBfcmN2YCwgYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbGAuXG5cblJpZ2h0LCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGV2YWx1YXRlIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gQUZfUlhSUEMgc29ja2V0cyBhcmUgZGlyZWN0bHkgY3JlYXRhYmxlLCBzbyB3ZSBjYW4gY29udHJvbCBpbnB1dCBhbmQgdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnMuIFRoZXkgdXNlIFVEUCBlbmNhcHN1bGF0aW9uLCBoYW5kbGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcXVldWVzLCBtYW5hZ2Ugc29ja2V0IGJ1ZmZlcnMgKFNLQnMpLCBhbmQgaGF2ZSB0aGVpciBvd24gSS9PIHdvcmtlciB0aHJlYWRzIGFuZCBsb2NhbCBlbmRwb2ludCBsaWZlY3ljbGUuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbW9kaWZ5aW5nIGNyaXRpY2FsIGFyZWFzIG9mIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyDigJMgYHNrX3JtZW1fc2NoZWR1bGVgLCBgc2tiX3NldF9vd25lcl9yYCwgYHNrYl9vcnBoYW5gIOKAkyBhcyB3ZWxsIGFzIGRyb3AgdHJhY2tpbmcsIGRlc3RpbmF0aW9uIChkc3QpIGZvcmNpbmcsIGFuZCBSQ1Ugc3luY2hyb25pemF0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24uIFRoaXMgbWVhbnMgaXQgaW52b2x2ZXMgbWVtb3J5IG1hbmFnZW1lbnQsIG5ldHdvcmsgcHJvY2Vzc2luZywgYW5kIGNvbmN1cnJlbmN5IOKAkyBhbGwgcG90ZW50aWFsIGFyZWFzIGZvciB2dWxuZXJhYmlsaXRpZXMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcHJlcmVxdWlzaXRlcy4gV2UgbmVlZCBgQUZfUlhSUENgICh3aGljaCBkZXBlbmRzIG9uIGBJTkVUYCkgYW5kLCBvcHRpb25hbGx5LCBgQUZfUlhSUENfSVBWNmAuIE1ha2VzIHNlbnNlLlxuXG5JJ2xsIGZvY3VzIG9uIHRob3NlIGlkZW50aWZpZWQgc3ltYm9sczogYHJ4cnBjX2VuY2FwX3JjdmAsIGByeHJwY19pb190aHJlYWRgLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLiBUaGV5IGFyZSB0aGUgbWFpbiB0YXJnZXQgZm9yIGluaXRpYWwgYW5hbHlzaXMuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGNyaXRpY2FsIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBBRl9SWFJQQyB0aGF0IGNvdWxkIGJlIGluZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBBbmQsIGFzIGEgc2FuaXR5IGNoZWNrLCBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGVyZSBgcnhycGNfZW5jYXBfcmN2YCBpcyBiZWluZyB1c2VkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDo0MC40Nzg3MjA4OTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY5OTk1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19lbmNhcF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xMjY4PXN0YXRpYyBpbmxpbmUgdm9pZCByeHJwY190bHBfaW5pdChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzctICovXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTI3ODppbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopO1xcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzktdm9pZCByeHJwY19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKik7XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM9MTI9c3RhdGljIGludCByeHJwY19pbnB1dF9wYWNrZXRfb25fY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNS0gKi9cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM6MjY6aW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNy17XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5My1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9SWFJQQztcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTk0OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5NS1cXHR0dW5jZmcuZW5jYXBfZXJyX3JjdiA9IHJ4cnBjX2VuY2FwX2Vycl9yY3Y7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjQwLjU5MDQyNjEwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM0Nzc4ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGlzIGlzIHNpbXBsZSBlbm91Z2guIFRoZSBzZXR1cCBpcyBxdWl0ZSBjbGVhci1jdXQuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBiYXNlbGluZS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGV5J3ZlIGlkZW50aWZpZWQgYHJ4cnBjX2VuY2FwX3JjdmAsIGByeHJwY19pb190aHJlYWRgLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGFzIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gR29vZCBjaG9pY2VzLCB0aG9zZSBhcmUgZGVmaW5pdGVseSBwb3RlbnRpYWwgYXJlYXMgZm9yIGlucHV0IHZhbGlkYXRpb24gb3Igc3RhdGUgY29ycnVwdGlvbiBidWdzIHdpdGhpbiB0aGUgUnhSUEMgaW1wbGVtZW50YXRpb24uIEZpbmFsbHksIHRoZSBlbmFibGVkIGNvbmZpZ3MsIGBBRl9SWFJQQ2AgYW5kIGBJTkVUYCwgYXJlIHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgbmV0d29yay1mb2N1c2VkIGZ1enppbmcgY2FtcGFpZ24uIE1ha2VzIHNlbnNlIHdlJ3JlIGdvaW5nIGFmdGVyIHRoZSBSeFJQQyBuZXR3b3JrIHN0YWNrLiBOb3csIGxldCdzIGV4ZWN1dGUgYHNldC1yZXN1bHRzYCBhbmQgc2VlIGhvdyBpdCBwZXJmb3Jtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwMywiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDo0Mi42MjUyMDg5MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMxODg2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGX1JYUlBDXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfZW5jYXBfcmN2XCIsXG4gICAgXCJyeHJwY19pb190aHJlYWRcIixcbiAgICBcInJ4cnBjX2Rlc3Ryb3lfbG9jYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uLCBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZywgc2tiIG93bmVyc2hpcCBhbmQgb3JwaGFuaW5nLCBhbmQgbG9jYWwgc29ja2V0IHRlYXJkb3duIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gdGhlIEFGX1JYUlBDIG5ldHdvcmsgcHJvdG9jb2wgc3Vic3lzdGVtLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFJ4UlBDIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2VuY2FwX3JjdlwiLFxuICAgIFwicnhycGNfaW9fdGhyZWFkXCIsXG4gICAgXCJyeHJwY19kZXN0cm95X2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiwgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcsIHNrYiBvd25lcnNoaXAgYW5kIG9ycGhhbmluZywgYW5kIGxvY2FsIHNvY2tldCB0ZWFyZG93biBSQ1Ugc3luY2hyb25pemF0aW9uIGluIHRoZSBBRl9SWFJQQyBuZXR3b3JrIHByb3RvY29sIHN1YnN5c3RlbS4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBSeFJQQyBzb2NrZXRzIGFuZCBuZXR3b3JrIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjQyLjc3ODQwNDM0N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MDA4MTE2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDo0Mi43Nzg5NjcxMTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjYwMDI0NDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcnhycGMgcGFja2V0IHJlY2VwdGlvbiBhbmQgc29ja2V0IHRlYXJkb3duIGxvZ2ljOlxcbjEuIEluIGByeHJwY19lbmNhcF9yY3YoKWAgYW5kIGByeHJwY19pb190aHJlYWQoKWAsIGl0IGFkZHMgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZyBjaGVja3MgKGBza19ybWVtX3NjaGVkdWxlYCwgYHNrX3JtZW1fYWxsb2NgKSwgc2V0cyBza2Igb3duZXJzaGlwIG9uIHRoZSBVRFAgc29ja2V0IChgc2tiX3NldF9vd25lcl9yYCksIGZvcmNlcyBEU1QgcmV0ZW50aW9uIChgc2tiX2RzdF9mb3JjZWApLCBhbmQgb3JwaGFucyBza2JzIChgc2tiX29ycGhhbmApIHVwb24gZGVxdWV1ZWluZy5cXG4yLiBJbiBgcnhycGNfZGVzdHJveV9sb2NhbCgpYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgcG9pbnRlciBjbGVhcmFuY2Ugd2l0aCBgcmN1X2Fzc2lnbl9za191c2VyX2RhdGFgIGZvbGxvd2VkIGJ5IGBzeW5jaHJvbml6ZV9yY3UoKWAsIGRlZmVycmluZyBgc29ja19yZWxlYXNlKClgIHVudGlsIGFmdGVyIHRoZSBxdWV1ZXMgYXJlIHB1cmdlZCB0byBhdm9pZCB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMgb24gc29ja2V0IGRlc3RydWN0aW9uLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBtb2RpZnkgY29weS10by11c2VyIHBhdGhzLCBvciBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgYXJlYXMgKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igc2tiIGFjY291bnRpbmcgbGVha3MpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmVyZW5jZSB0cmFja2luZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjYWIwYzgwZTM1YjE3Y2YzYTQ1YzQxOGMwYWQ0ODk3MzI4MWEyNmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDEyOjAwOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jIGIvbmV0L3J4cnBjL2lvX3RocmVhZC5jXG5pbmRleCBkYzUxODRhMmZhOWQxLi44Yjc3ZDEzNzg4OGVhIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jXG4rKysgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbkBAIC00MSw4ICs0MSw2IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNldHN0YW1wID09IDApXG4gXHRcdHNrYi1cdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xuIFxuLVx0c2tiLVx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XG4tXHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuIFx0cnhfcXVldWUgPSBcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZTtcbiAjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxuIFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxuQEAgLTUyLDYgKzUwLDE5IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdH1cbiAjZW5kaWZcbiBcbitcdGlmIChhdG9taWNfcmVhZChcdTAwMjZ1ZHBfc2stXHUwMDNlc2tfcm1lbV9hbGxvYykgXHUwMDNlPSBSRUFEX09OQ0UodWRwX3NrLVx1MDAzZXNrX3JjdmJ1ZikgfHxcbitcdCAgICAhc2tfcm1lbV9zY2hlZHVsZSh1ZHBfc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuK1x0XHRza19kcm9wc19pbmModWRwX3NrKTtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4rXHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xuK1x0c2tiX2RzdF9mb3JjZShza2IpO1xuK1xuK1x0c2tiLVx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XG4rXHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuIFx0c2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7XG4gXHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcbiBcdHJldHVybiAwO1xuQEAgLTQ3MSw2ICs0ODIsOCBAQCBpbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXG4gXHRcdC8qIERpc3RyaWJ1dGUgcGFja2V0cyBhbmQgZXJyb3JzLiAqL1xuIFx0XHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2cnhfcXVldWUpKSkge1xuIFx0XHRcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbitcbitcdFx0XHRza2Jfb3JwaGFuKHNrYik7XG4gXHRcdFx0c3dpdGNoIChza2ItXHUwMDNlbWFyaykge1xuIFx0XHRcdGNhc2UgUlhSUENfU0tCX01BUktfUEFDS0VUOlxuIFx0XHRcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMgYi9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbmluZGV4IDE2OWY5ZGZkYWE3N2YuLjY2MDRmOWY5NTI2NjAgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbisrKyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuQEAgLTQzNyw4ICs0MzcsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdGlmIChzb2NrZXQpIHtcbiBcdFx0bG9jYWwtXHUwMDNlc29ja2V0ID0gTlVMTDtcbiBcdFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xuLVx0XHRzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbi1cdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4rXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cdTAwM2VzaywgTlVMTCk7XG4rXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIFx0fVxuIFxuIFx0LyogQXQgdGhpcyBwb2ludCwgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgcGFja2V0cyBjb21pbmcgaW4gdG8gdGhlXG5AQCAtNDQ4LDYgKzQ0OCwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiAjZW5kaWZcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlKTtcbitcbitcdGlmIChzb2NrZXQpXG4rXHRcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xuK1xuIFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcbiBcdHBhZ2VfZnJhZ19jYWNoZV9kcmFpbihcdTAwMjZsb2NhbC1cdTAwM2V0eF9hbGxvYyk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6NDIuNzc4OTY3OTg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MTgzMjMzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBob3cgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aCBzb2NrZXQgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgcmVxdWlyZXMgS01TQU4gc2NydXRpbnkgb3IgaWYgdGhlIGNvbmNlcm5zIGFyZSBtb3JlIHJlbGF0ZWQgdG8gc29ja2V0IGJ1ZmZlciBhY2NvdW50aW5nLCBSQ1UgbGlmZXRpbWUsIGFuZCByZWxhdGVkIG5ldHdvcmtpbmcgZWxlbWVudHMuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGluIGBuZXQvcnhycGMvaW9fdGhyZWFkLmNgLCBzcGVjaWZpY2FsbHkgYHJ4cnBjX2VuY2FwX3JjdigpYCwgSSBzZWUgc29tZSBpbnRlcmVzdGluZyBvcGVyYXRpb25zLiBJdCBhcHBlYXJzIHRvIGJlIGhhbmRsaW5nIFVEUCBzb2NrZXQgbWVtb3J5IGFsbG9jYXRpb24gd2l0aCBjaGVja3MgYWdhaW5zdCBgdWRwX3NrLVx1MDAzZXNrX3JtZW1fYWxsb2NgIGFuZCBgdWRwX3NrLVx1MDAzZXNrX3JjdmJ1ZmAsIHVzaW5nIGBza19ybWVtX3NjaGVkdWxlKClgIGFuZCB0aGVuIG1hbmFnaW5nIHRoZSBvd25lcnNoaXAgb2YgdGhlIGBza2JgLiBUaGUgc2V0dGluZyBvZiBgc2tiLVx1MDAzZWRldiA9IE5VTEw7YCwgZm9sbG93ZWQgYnkgYHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zayk7YCwgYHNrYl9kc3RfZm9yY2Uoc2tiKTtgLCBhbmQgZmluYWxseSBgc2tiX29ycGhhbihza2IpYCBpbiBgcnhycGNfaW9fdGhyZWFkYCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIHRyeWluZyB0byBlbnN1cmUgcHJvcGVyIGJ1ZmZlciBvd25lcnNoaXAgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJdCBmZWVscyBsaWtlIHRoZSB1c3VhbCB0cmlja2VyeSB0byBrZWVwIHRyYWNrIG9mIG5ldHdvcmsgYnVmZmVycy5cblxuVGhlbiwgbW92aW5nIHRvIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbCgpYCwgSSBub3RpY2UgdGhlIHVzZSBvZiBgcmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVx1MDAzZXNrLCBOVUxMKTtgIGFuZCBgc3luY2hyb25pemVfcmN1KClgLCB3aGljaCBpcyBhIGNsYXNzaWMgUkNVIHBhdHRlcm4gdG8gaGFuZGxlIHNvY2tldCB0ZWFyZG93biBhbmQgZW5zdXJlIGRhdGEgdmlzaWJpbGl0eSBkdXJpbmcgdGhlIGRlc3RydWN0aW9uIG9mIGByeHJwY19sb2NhbGAgb2JqZWN0cy4gRGVsYXlpbmcgYHNvY2tfcmVsZWFzZShzb2NrZXQpYCBhZnRlciBxdWV1ZSBwdXJnaW5nIGlzIGFsc28gY3J1Y2lhbCBmb3IgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuXG5cblRoZSBvdmVyYWxsIGdvYWwgc2VlbXMgdG8gYmUgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSByeHJwYyBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcHJvY2VzcyBpbnZvbHZpbmcgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nLCBidWZmZXJpbmcsIGFuZCB0ZWFyZG93bi4gSXQgYXBwZWFycyB0byBiZSBhZGRyZXNzaW5nOlxuXG4xLiAgVURQIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyB1c2luZyBgc2tfcm1lbV9zY2hlZHVsZWAsIGBza2Jfc2V0X293bmVyX3JgLCBhbmQgYHNrYl9vcnBoYW5gLlxuMi4gIFNhZmUgdGVhcmRvd24gb2YgYHJ4cnBjX2xvY2FsYCBzb2NrZXRzIHdpdGggUkNVIHN5bmNocm9uaXphdGlvbiwgdGh1cyBlbnN1cmluZyBubyB1c2UgYWZ0ZXIgZnJlZSwgYW5kIHByb3BlciBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuXG5cblNvLCB0aGUgZm9jdXMgaGVyZSwgZm9yIG1lLCBpcyBlbnN1cmluZyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIG9yIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciBldmVuIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEJhc2VkIG9uIHRoZXNlIG9wZXJhdGlvbnMsIGFuZCBhIHF1aWNrIHNjYW4gb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gcnhycGMsIEknbSBnb2luZyB0byBsZWFuIHRvd2FyZHMgdGhpcyBub3QgcmVxdWlyaW5nIEtNU0FOIGFuYWx5c2lzLiBUaGUgUkNVIHVzYWdlIGFuZCBidWZmZXIgb3duZXJzaGlwIHBhdHRlcm5zIHNlZW0gc291bmQuIEhvd2V2ZXIsIEknbGwgc3RpbGwgZG8gYSB0aG9yb3VnaCBjb2RlIHJldmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjQ5LjI5NzI5NDAyMloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NzQ1NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhycGNfZW5jYXBfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yeHJwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xMjY4PXN0YXRpYyBpbmxpbmUgdm9pZCByeHJwY190bHBfaW5pdChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzctICovXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTI3ODppbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopO1xcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzktdm9pZCByeHJwY19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKik7XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM9MTI9c3RhdGljIGludCByeHJwY19pbnB1dF9wYWNrZXRfb25fY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNS0gKi9cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM6MjY6aW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNy17XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5My1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9SWFJQQztcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTk0OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5NS1cXHR0dW5jZmcuZW5jYXBfZXJyX3JjdiA9IHJ4cnBjX2VuY2FwX2Vycl9yY3Y7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjQ5LjM5NTk3NTc0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDg4NTM1MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSBwcm9jZXNzaW5nIHRob3NlIGxpbmVzIGluIGBuZXQvcnhycGMvaW9fdGhyZWFkLmNgOlxuXG4qKkFuYWx5emluZyByeHJwYyBJTyBUaHJlYWQgQ29kZTogSW5pdGlhbCBTY2FuIFx1MDAyNiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gYG5ldC9yeHJwYy9pb190aHJlYWQuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIElPIHRocmVhZCBvcGVyYXRlcyB3aXRoaW4gdGhlIHJ4cnBjIGNvbnRleHQsIHNvIEknbGwgYmUgZm9jdXNpbmcgb24gbGluZXMgMjUtNzAsIGFuZCB0aGVuIEknbGwganVtcCBmdXJ0aGVyIGRvd24gdG8gNDYwLTUwMC4gRmlyc3QsIGxldCBtZSBnZXQgYSBnZW5lcmFsIGlkZWEgb2YgdGhlIHNldCB1cCBoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIElPIHRocmVhZCwgdGhlIGluaXRpYWwgc2V0dXAgb2YgbG9ja3MsIGFueSB0aHJlYWQgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBtYW5hZ2VtZW50IG9mIHRoZSBldmVudCBsb29wLlxuXG5Ob3cgSSdsbCB6ZXJvIGluIG9uIGxpbmVzIDQ2MC01MDAuIFRoaXMgc2VjdGlvbiBpcyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSB3b3JrIGlzIGJlaW5nIHBlcmZvcm1lZCwgd2l0aGluIHRoZSBJTyB0aHJlYWQuIEdpdmVuIHRoYXQncyB3aGVyZSBJIGVuZGVkIHVwLCBJJ2QgZXhwZWN0IHRvIHNlZSB0aGUgY29kZSBoYW5kbGluZyBpbmJvdW5kIGFuZCBvdXRib3VuZCBkYXRhLCBoYW5kbGluZyBhbnkgaW50ZXJydXB0cywgY2hlY2tpbmcgZm9yIHRpbWVvdXRzLCBhbmQgbWFuYWdpbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGUuIEknbSBsb29raW5nIGZvciB0aGUgY3JpdGljYWwgcGF0aCB3aGVyZSB0aGUgSU8gaXMgYWN0dWFsbHkgaGFwcGVuaW5nLiBJIGV4cGVjdCB0aGUgY29kZSB0byBiZSByZWxhdGl2ZWx5IGVmZmljaWVudCBhbmQgb3B0aW1pemVkLCBnaXZlbiB0aGUgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzIG9mIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IHNvY2tldCBzdGF0ZXMsIGVycm9ycywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gaXQgdXNlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSByeHJwYyBzdGFjay4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaGFuZGxlcyBhbGwgdGhlIGV4cGVjdGVkIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEknbGwgZm9jdXMgb24gaG93IHRoZSBgaW9fdGhyZWFkX3dvcmtgIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdGhlciBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSByeHJwYyBzdWJzeXN0ZW0gYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgc3RhdGUgY2hhbmdlcyBhcmUuIEhvcGVmdWxseSwgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBjcml0aWNhbCBwaWVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjUyLjQ4NDUxNDI2NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvaW9fdGhyZWFkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0ICovXFxuICAyNjpcXHRpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuICAyNzpcXHR7XFxuICAyODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpyeF9xdWV1ZTtcXG4gIDI5OlxcdFxcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHVkcF9zayk7XFxuICAzMDpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlvX3RocmVhZDtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0aWYgKHVubGlrZWx5KCFsb2NhbCkpIHtcXG4gIDMzOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICAzNTpcXHRcXHR9XFxuICAzNjpcXHRcXHRpb190aHJlYWQgPSBSRUFEX09OQ0UobG9jYWwtXFx1MDAzZWlvX3RocmVhZCk7XFxuICAzNzpcXHRcXHRpZiAoIWlvX3RocmVhZCkge1xcbiAgMzg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAzOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gIDQwOlxcdFxcdH1cXG4gIDQxOlxcdFxcdGlmIChza2ItXFx1MDAzZXRzdGFtcCA9PSAwKVxcbiAgNDI6XFx0XFx0XFx0c2tiLVxcdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRyeF9xdWV1ZSA9IFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfcXVldWU7XFxuICA0NTpcXHQjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbiAgNDY6XFx0XFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxcbiAgNDc6XFx0XFx0ICAgICFza2JfcXVldWVfZW1wdHkoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSkpIHtcXG4gIDQ4OlxcdFxcdFxcdHNrYi1cXHUwMDNldHN0YW1wID0ga3RpbWVfYWRkX21zKHNrYi1cXHUwMDNldHN0YW1wLCByeHJwY19pbmplY3RfcnhfZGVsYXkpO1xcbiAgNDk6XFx0XFx0XFx0cnhfcXVldWUgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2RlbGF5X3F1ZXVlO1xcbiAgNTA6XFx0XFx0fVxcbiAgNTE6XFx0I2VuZGlmXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2dWRwX3NrLVxcdTAwM2Vza19ybWVtX2FsbG9jKSBcXHUwMDNlPSBSRUFEX09OQ0UodWRwX3NrLVxcdTAwM2Vza19yY3ZidWYpIHx8XFxuICA1NDpcXHRcXHQgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKSB7XFxuICA1NTpcXHRcXHRcXHRza19kcm9wc19pbmModWRwX3NrKTtcXG4gIDU2OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA1ODpcXHRcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gTlVMTDtcXG4gIDYxOlxcdFxcdHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zayk7XFxuICA2MjpcXHRcXHRza2JfZHN0X2ZvcmNlKHNrYik7XFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdHNrYi1cXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcXG4gIDY1OlxcdFxcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XFxuICA2NjpcXHRcXHRza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTtcXG4gIDY3OlxcdFxcdHdha2VfdXBfcHJvY2Vzcyhpb190aHJlYWQpO1xcbiAgNjg6XFx0XFx0cmV0dXJuIDA7XFxuICA2OTpcXHR9XFxuICA3MDpcXHRcXG4gIDcxOlxcdC8qXFxuICA3MjpcXHQgKiBIYW5kbGUgYW4gZXJyb3IgcmVjZWl2ZWQgb24gdGhlIGxvY2FsIGVuZHBvaW50LlxcbiAgNzM6XFx0ICovXFxuICA3NDpcXHR2b2lkIHJ4cnBjX2Vycm9yX3JlcG9ydChzdHJ1Y3Qgc29jayAqc2spXFxuICA3NTpcXHR7XFxuICA3NjpcXHRcXHRzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsO1xcbiAgNzc6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAgODA6XFx0XFx0bG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcXG4gIDgxOlxcdFxcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XFxuICA4MjpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gIDgzOlxcdFxcdFxcdHJldHVybjtcXG4gIDg0OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6NTIuNDg0NTk0NTk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzUxNzEzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBsb2NhbCBvYmplY3QgY29kZSBpbiB0aGUgUnhSUEMgaW1wbGVtZW50YXRpb24uIFRoZSBmYWN0IHRoYXQgSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2Agc3VnZ2VzdHMgSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIGxvY2FsbHktYm91bmQgUlBDIHNlcnZpY2VzLCBhbmQgdGhlIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgbWFuYWdpbmcgdGhlbS4gSSdtIGxpa2VseSBpbnRlcmVzdGVkIGluIGhvdyByZXF1ZXN0cyBhcmUgZGlyZWN0ZWQgdG8gdGhvc2UgbG9jYWwgc2VydmljZXMsIGhvdyB0aGVpciByZXNwb25zZXMgYXJlIGhhbmRsZWQsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGFib3V0IHJlc291cmNlIG1hbmFnZW1lbnQgb3Igc2VjdXJpdHkgY29udGV4dCB3aXRoaW4gdGhlIGxvY2FsIG9iamVjdCBhcmNoaXRlY3R1cmUuIEkgd29uZGVyIGlmIEknbSBsb29raW5nIGludG8gcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3Igc29tZSBvYnNjdXJlIGVkZ2UgY2FzZT8gS25vd2luZyB0aGUgZXhhY3QgcmVhc29uIGZvciB0aGUgaW52ZXN0aWdhdGlvbiB3b3VsZCBhbGxvdyBtZSB0byBiZXR0ZXIgdGFyZ2V0IG15IHNlYXJjaCB3aXRoaW4gdGhlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQ0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDo1NC41NTk3Njg2MDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzA6XFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZsb2NhbC1cXHUwMDNlbGluayk7XFxuIDQzMTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnJ4bmV0LVxcdTAwM2Vsb2NhbF9tdXRleCk7XFxuIDQzMjpcXHRcXG4gNDMzOlxcdFxcdHJ4cnBjX2NsZWFuX3VwX2xvY2FsX2Nvbm5zKGxvY2FsKTtcXG4gNDM0OlxcdFxcdHJ4cnBjX3NlcnZpY2VfY29ubmVjdGlvbl9yZWFwZXIoXFx1MDAyNnJ4bmV0LVxcdTAwM2VzZXJ2aWNlX2Nvbm5fcmVhcGVyKTtcXG4gNDM1OlxcdFxcdEFTU0VSVCghbG9jYWwtXFx1MDAzZXNlcnZpY2UpO1xcbiA0MzY6XFx0XFxuIDQzNzpcXHRcXHRpZiAoc29ja2V0KSB7XFxuIDQzODpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlc29ja2V0ID0gTlVMTDtcXG4gNDM5OlxcdFxcdFxcdGtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTtcXG4gNDQwOlxcdFxcdFxcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cXHUwMDNlc2ssIE5VTEwpO1xcbiA0NDE6XFx0XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDQ0MjpcXHRcXHR9XFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdFxcdC8qIEF0IHRoaXMgcG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIHBhY2tldHMgY29taW5nIGluIHRvIHRoZVxcbiA0NDU6XFx0XFx0ICogbG9jYWwgZW5kcG9pbnQuXFxuIDQ0NjpcXHRcXHQgKi9cXG4gNDQ3OlxcdCNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxuIDQ0ODpcXHRcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcXG4gNDQ5OlxcdCNlbmRpZlxcbiA0NTA6XFx0XFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZSk7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdGlmIChzb2NrZXQpXFxuIDQ1MzpcXHRcXHRcXHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcXG4gNDU2OlxcdFxcdHBhZ2VfZnJhZ19jYWNoZV9kcmFpbihcXHUwMDI2bG9jYWwtXFx1MDAzZXR4X2FsbG9jKTtcXG4gNDU3OlxcdH1cXG4gNDU4OlxcdFxcbiA0NTk6XFx0LypcXG4gNDYwOlxcdCAqIERlc3Ryb3kgYSBsb2NhbCBlbmRwb2ludCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBleHBpcmVzLlxcbiA0NjE6XFx0ICovXFxuIDQ2MjpcXHRzdGF0aWMgdm9pZCByeHJwY19sb2NhbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuIDQ2MzpcXHR7XFxuIDQ2NDpcXHRcXHRzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHJ4cnBjX2xvY2FsLCByY3UpO1xcbiA0NjU6XFx0XFxuIDQ2NjpcXHRcXHRyeHJwY19zZWVfbG9jYWwobG9jYWwsIHJ4cnBjX2xvY2FsX2ZyZWUpO1xcbiA0Njc6XFx0XFx0a2ZyZWUobG9jYWwpO1xcbiA0Njg6XFx0fVxcbiA0Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjU0LjU1OTk3MjAxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODE5MjE4NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoIGhpbmdlcyBvbiBhIGtleSBzZXQgb2YgY3JpdGVyaWEsIGFuZCBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyByZXF1aXJlcyBLTVNBTiBhdHRlbnRpb24uXG5cbkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBVRFAgZW5jYXBzdWxhdGlvbiwgcXVldWVpbmcsIGFuZCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcuIEknbSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIGxlYWthZ2Ugb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIEknbSBjaGVja2luZyBmb3IgcGxhY2VzIHdoZXJlIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBjb25kaXRpb25hbCBsb2dpYyByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGZpZWxkIHJlYWRzLCBhbmQgZmluYWxseSwgYW55dGhpbmcgdGhhdCBjb3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyByZWFkcy5cblxuQWZ0ZXIgYSBjbG9zZSBpbnNwZWN0aW9uIG9mIHRoaXMgcGF0Y2gsIEkndmUgY29tZSB0byB0aGUgY29uY2x1c2lvbiB0aGF0IG5vbmUgb2YgdGhlc2UgcG90ZW50aWFsIGlzc3VlcyBhcmUgcHJlc2VudC4gVGhlcmUncyBubyBkaXJlY3QgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgYXJlIHByb2JsZW1hdGljLCBhbmQgbm8gaXNzdWVzIHdpdGggZXhpc3RpbmcgYnVmZmVyIHJlYWRzLlxuXG5NeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYW5kL29yIGZpeGVzIHByaW1hcmlseSBjb25jdXJyZW5jeSBpc3N1ZXMsIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgZHVyaW5nIHNvY2tldCBzaHV0ZG93biBhbmQgcGFja2V0IHJlY2VwdGlvbiwgYW5kIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyBwcm9ibGVtcyAoZXNwZWNpYWxseSBhcm91bmQgYnVmZmVyIGxpbWl0cykuIEkgY2FuIHNlZSB0aGUgaXNzdWVzIHRoYXQgYXJlIGZpeGVkIHdpdGggYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cdTAwM2VzaywgTlVMTClgICsgYHN5bmNocm9uaXplX3JjdSgpYCwgYW5kIHNvY2tldCBvd25lcnNoaXAvU0tCIGNsZWFudXAgKGBza2Jfb3JwaGFuKHNrYilgIHdoZW4gZGVxdWV1aW5nKS5cblxuVGhlc2UgYXJlIGFsbCBpc3N1ZXMgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHJlbWl0IG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIHJlZ2ltZS4gVGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UuIFRoaXMgbWVhbnMgdGhhdCwgYmFzZWQgb24gbXkgZXhwZXJ0IG9waW5pb24sIGEgXCJOZWVkc0tNU0FOXCIgZGVzaWduYXRpb24gaXMgbm90IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ3MywiT3V0cHV0VG9rZW5zIjoyODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDo1OS4zNzkxOTMzOTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJ4cnBjIHBhY2tldCByZWNlcHRpb24gYW5kIHNvY2tldCB0ZWFyZG93biBsb2dpYzpcXG4xLiBJbiBgcnhycGNfZW5jYXBfcmN2KClgIGFuZCBgcnhycGNfaW9fdGhyZWFkKClgLCBpdCBhZGRzIHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcgY2hlY2tzIChgc2tfcm1lbV9zY2hlZHVsZWAsIGBza19ybWVtX2FsbG9jYCksIHNldHMgc2tiIG93bmVyc2hpcCBvbiB0aGUgVURQIHNvY2tldCAoYHNrYl9zZXRfb3duZXJfcmApLCBmb3JjZXMgRFNUIHJldGVudGlvbiAoYHNrYl9kc3RfZm9yY2VgKSwgYW5kIG9ycGhhbnMgc2ticyAoYHNrYl9vcnBoYW5gKSB1cG9uIGRlcXVldWVpbmcuXFxuMi4gSW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoKWAsIGl0IHJlcGxhY2VzIGEgZGlyZWN0IHBvaW50ZXIgY2xlYXJhbmNlIHdpdGggYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhYCBmb2xsb3dlZCBieSBgc3luY2hyb25pemVfcmN1KClgLCBkZWZlcnJpbmcgYHNvY2tfcmVsZWFzZSgpYCB1bnRpbCBhZnRlciB0aGUgcXVldWVzIGFyZSBwdXJnZWQgdG8gYXZvaWQgdXNlLWFmdGVyLWZyZWUvcmFjZSBjb25kaXRpb25zIG9uIHNvY2tldCBkZXN0cnVjdGlvbi5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgbW9kaWZ5IGNvcHktdG8tdXNlciBwYXRocywgb3IgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFBvdGVudGlhbCBidWdzIGluIHRoZXNlIGFyZWFzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHNrYiBhY2NvdW50aW5nIGxlYWtzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByeHJwYyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBzb2NrZXQgdGVhcmRvd24gbG9naWM6XFxuMS4gSW4gYHJ4cnBjX2VuY2FwX3JjdigpYCBhbmQgYHJ4cnBjX2lvX3RocmVhZCgpYCwgaXQgYWRkcyByZWNlaXZlIGJ1ZmZlciBhY2NvdW50aW5nIGNoZWNrcyAoYHNrX3JtZW1fc2NoZWR1bGVgLCBgc2tfcm1lbV9hbGxvY2ApLCBzZXRzIHNrYiBvd25lcnNoaXAgb24gdGhlIFVEUCBzb2NrZXQgKGBza2Jfc2V0X293bmVyX3JgKSwgZm9yY2VzIERTVCByZXRlbnRpb24gKGBza2JfZHN0X2ZvcmNlYCksIGFuZCBvcnBoYW5zIHNrYnMgKGBza2Jfb3JwaGFuYCkgdXBvbiBkZXF1ZXVlaW5nLlxcbjIuIEluIGByeHJwY19kZXN0cm95X2xvY2FsKClgLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBwb2ludGVyIGNsZWFyYW5jZSB3aXRoIGByY3VfYXNzaWduX3NrX3VzZXJfZGF0YWAgZm9sbG93ZWQgYnkgYHN5bmNocm9uaXplX3JjdSgpYCwgZGVmZXJyaW5nIGBzb2NrX3JlbGVhc2UoKWAgdW50aWwgYWZ0ZXIgdGhlIHF1ZXVlcyBhcmUgcHVyZ2VkIHRvIGF2b2lkIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucyBvbiBzb2NrZXQgZGVzdHJ1Y3Rpb24uXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIG1vZGlmeSBjb3B5LXRvLXVzZXIgcGF0aHMsIG9yIGludHJvZHVjZSB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBhcmVhcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBza2IgYWNjb3VudGluZyBsZWFrcykgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdlns[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 11:32:55 +0000 UTC FinishedAt: 2026-09-06 12:01:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "INET" ], "series_id": "9b57bc5e-a9a5-4d06-804d-8931902269d7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rxrpc_encap_rcv", "rxrpc_io_thread", "rxrpc_destroy_local" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19lbmNhcF9yY3YmIzM0OywKICAgICYjMzQ7cnhycGNfaW9fdGhyZWFkJiMzNDssCiAgICAmIzM0O3J4cnBjX2Rlc3Ryb3lfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByeHJwYyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBzb2NrZXQgdGVhcmRvd24gbG9naWM6XG4xLiBJbiBgcnhycGNfZW5jYXBfcmN2KClgIGFuZCBgcnhycGNfaW9fdGhyZWFkKClgLCBpdCBhZGRzIHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcgY2hlY2tzIChgc2tfcm1lbV9zY2hlZHVsZWAsIGBza19ybWVtX2FsbG9jYCksIHNldHMgc2tiIG93bmVyc2hpcCBvbiB0aGUgVURQIHNvY2tldCAoYHNrYl9zZXRfb3duZXJfcmApLCBmb3JjZXMgRFNUIHJldGVudGlvbiAoYHNrYl9kc3RfZm9yY2VgKSwgYW5kIG9ycGhhbnMgc2ticyAoYHNrYl9vcnBoYW5gKSB1cG9uIGRlcXVldWVpbmcuXG4yLiBJbiBgcnhycGNfZGVzdHJveV9sb2NhbCgpYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgcG9pbnRlciBjbGVhcmFuY2Ugd2l0aCBgcmN1X2Fzc2lnbl9za191c2VyX2RhdGFgIGZvbGxvd2VkIGJ5IGBzeW5jaHJvbml6ZV9yY3UoKWAsIGRlZmVycmluZyBgc29ja19yZWxlYXNlKClgIHVudGlsIGFmdGVyIHRoZSBxdWV1ZXMgYXJlIHB1cmdlZCB0byBhdm9pZCB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMgb24gc29ja2V0IGRlc3RydWN0aW9uLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgbW9kaWZ5IGNvcHktdG8tdXNlciBwYXRocywgb3IgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFBvdGVudGlhbCBidWdzIGluIHRoZXNlIGFyZWFzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHNrYiBhY2NvdW50aW5nIGxlYWtzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiwgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcsIHNrYiBvd25lcnNoaXAgYW5kIG9ycGhhbmluZywgYW5kIGxvY2FsIHNvY2tldCB0ZWFyZG93biBSQ1Ugc3luY2hyb25pemF0aW9uIGluIHRoZSBBRl9SWFJQQyBuZXR3b3JrIHByb3RvY29sIHN1YnN5c3RlbS4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBSeFJQQyBzb2NrZXRzIGFuZCBuZXR3b3JrIHBhY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0Y2FiMGM4MGUzNWIxN2NmM2E0NWM0MThjMGFkNDg5NzMyODFhMjZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxMjowMDoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbmluZGV4IGRjNTE4NGEyZmE5ZDEuLjhiNzdkMTM3ODg4ZWEgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xuQEAgLTQxLDggJiM0Mzs0MSw2IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNldHN0YW1wID09IDApXG4gXHRcdHNrYi1cdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xuIFxuLVx0c2tiLVx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XG4tXHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuIFx0cnhfcXVldWUgPSBcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZTtcbiAjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxuIFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxuQEAgLTUyLDYgJiM0Mzs1MCwxOSBAQCBpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gI2VuZGlmXG4gXG4mIzQzO1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNnVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2U9IFJFQURfT05DRSh1ZHBfc2stXHUwMDNlc2tfcmN2YnVmKSB8fFxuJiM0MztcdCAgICAhc2tfcm1lbV9zY2hlZHVsZSh1ZHBfc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuJiM0MztcdFx0c2tfZHJvcHNfaW5jKHVkcF9zayk7XG4mIzQzO1x0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4mIzQzO1x0c2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTtcbiYjNDM7XHRza2JfZHN0X2ZvcmNlKHNrYik7XG4mIzQzO1xuJiM0MztcdHNrYi1cdTAwM2VtYXJrID0gUlhSUENfU0tCX01BUktfUEFDS0VUO1xuJiM0MztcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gXHRza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTtcbiBcdHdha2VfdXBfcHJvY2Vzcyhpb190aHJlYWQpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDcxLDYgJiM0Mzs0ODIsOCBAQCBpbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXG4gXHRcdC8qIERpc3RyaWJ1dGUgcGFja2V0cyBhbmQgZXJyb3JzLiAqL1xuIFx0XHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2cnhfcXVldWUpKSkge1xuIFx0XHRcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbiBcdFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2VtYXJrKSB7XG4gXHRcdFx0Y2FzZSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ6XG4gXHRcdFx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSAwO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuaW5kZXggMTY5ZjlkZmRhYTc3Zi4uNjYwNGY5Zjk1MjY2MCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXG5AQCAtNDM3LDggJiM0Mzs0MzcsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdGlmIChzb2NrZXQpIHtcbiBcdFx0bG9jYWwtXHUwMDNlc29ja2V0ID0gTlVMTDtcbiBcdFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xuLVx0XHRzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbi1cdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4mIzQzO1x0XHRyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtXHUwMDNlc2ssIE5VTEwpO1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHR9XG4gXG4gXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcbkBAIC00NDgsNiAmIzQzOzQ0OCwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiAjZW5kaWZcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNvY2tldClcbiYjNDM7XHRcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xuJiM0MztcbiBcdHJ4cnBjX3B1cmdlX2NsaWVudF9jb25uZWN0aW9ucyhsb2NhbCk7XG4gXHRwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oXHUwMDI2bG9jYWwtXHUwMDNldHhfYWxsb2MpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnhycGNfZW5jYXBfcmN2JiMzNDssCiAgICAmIzM0O3J4cnBjX2lvX3RocmVhZCYjMzQ7LAogICAgJiMzNDtyeHJwY19kZXN0cm95X2xvY2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCByZWNlcHRpb24sIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBhY2NvdW50aW5nLCBza2Igb3duZXJzaGlwIGFuZCBvcnBoYW5pbmcsIGFuZCBsb2NhbCBzb2NrZXQgdGVhcmRvd24gUkNVIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgQUZfUlhSUEMgbmV0d29yayBwcm90b2NvbCBzdWJzeXN0ZW0uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUnhSUEMgc29ja2V0cyBhbmQgbmV0d29yayBwYWNrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGNhYjBjODBlMzViMTdjZjNhNDVjNDE4YzBhZDQ4OTczMjgxYTI2ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTI6MDA6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmMKaW5kZXggZGM1MTg0YTJmYTlkMS4uOGI3N2QxMzc4ODhlYSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9pb190aHJlYWQuYwpAQCAtNDEsOCAmIzQzOzQxLDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChza2ItJmd0O3RzdGFtcCA9PSAwKQogCQlza2ItJmd0O3RzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CiAKLQlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7Ci0JcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlyeF9xdWV1ZSA9ICZhbXA7bG9jYWwtJmd0O3J4X3F1ZXVlOwogI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVkKIAlpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8CkBAIC01Miw2ICYjNDM7NTAsMTkgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KICNlbmRpZgogCiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO3VkcF9zay0mZ3Q7c2tfcm1lbV9hbGxvYykgJmd0Oz0gUkVBRF9PTkNFKHVkcF9zay0mZ3Q7c2tfcmN2YnVmKSB8fAomIzQzOwkgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi0mZ3Q7dHJ1ZXNpemUpKSB7CiYjNDM7CQlza19kcm9wc19pbmModWRwX3NrKTsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiLSZndDtkZXYgPSBOVUxMOwomIzQzOwlza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spOwomIzQzOwlza2JfZHN0X2ZvcmNlKHNrYik7CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7bWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDsKJiM0MzsJcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTsKIAl3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTsKIAlyZXR1cm4gMDsKQEAgLTQ3MSw2ICYjNDM7NDgyLDggQEAgaW50IHJ4cnBjX2lvX3RocmVhZCh2b2lkICpkYXRhKQogCQkvKiBEaXN0cmlidXRlIHBhY2tldHMgYW5kIGVycm9ycy4gKi8KIAkJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7cnhfcXVldWUpKSkgewogCQkJc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpOwomIzQzOwomIzQzOwkJCXNrYl9vcnBoYW4oc2tiKTsKIAkJCXN3aXRjaCAoc2tiLSZndDttYXJrKSB7CiAJCQljYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDoKIAkJCQlza2ItJmd0O3ByaW9yaXR5ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYwppbmRleCAxNjlmOWRmZGFhNzdmLi42NjA0ZjlmOTUyNjYwIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jCkBAIC00MzcsOCAmIzQzOzQzNyw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKQogCWlmIChzb2NrZXQpIHsKIAkJbG9jYWwtJmd0O3NvY2tldCA9IE5VTEw7CiAJCWtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKLQkJc29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKLQkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CQlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtJmd0O3NrLCBOVUxMKTsKJiM0MzsJCXN5bmNocm9uaXplX3JjdSgpOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIHBhY2tldHMgY29taW5nIGluIHRvIHRoZQpAQCAtNDQ4LDYgJiM0Mzs0NDgsMTAgQEAgdm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfZGVsYXlfcXVldWUpOwogI2VuZGlmCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfcXVldWUpOwomIzQzOwomIzQzOwlpZiAoc29ja2V0KQomIzQzOwkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CiAJcnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTsKIAlwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oJmFtcDtsb2NhbC0mZ3Q7dHhfYWxsb2MpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjc0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUlhSUEMgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQuIEkgc2VlIGNoYW5nZXMgaW4gYG5ldC9yeHJwYy9pb190aHJlYWQuY2AgYW5kIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjoKCiogICAqKmByeHJwY19lbmNhcF9yY3ZgIGluIGBpb190aHJlYWQuY2A6KiogTG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0d2Vha2luZyB0aGUgcGFja2V0IHJlY2VpdmUgcGF0aC4gSSBzZWUgbWVtb3J5IGFsbG9jYXRpb24gY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIHJlY2VpdmUgYnVmZmVyIChgc2tfcm1lbV9zY2hlZHVsZWAsIGBza2Jfc2V0X293bmVyX3JgLCBgc2tiX2RzdF9mb3JjZWApLCB3aGljaCBpcyBzdGFuZGFyZC4gQW5kLCBpbnRlcmVzdGluZywgdGhleSYjMzk7dmUgbW92ZWQgYHNrYi0mZ3Q7bWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtgIGRvd24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHk7IHRoaXMgY291bGQgYmUgYWJvdXQgdGltaW5nIG9yIG9yZGVyaW5nIG9mIHBhY2tldCBwcm9jZXNzaW5nLgoqICAgKipgcnhycGNfaW9fdGhyZWFkYCBpbiBgaW9fdGhyZWFkLmNgOioqIEFoLCB0aGV5JiMzOTt2ZSBhZGRlZCBgc2tiX29ycGhhbihza2IpYCB3aGVuIGRlcXVldWluZyB0aGUgU0tCLiBUaGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgbWFuYWdpbmcgdGhlIFNLQiBsaWZlY3ljbGUgd2hlbiBpdCYjMzk7cyBiZWluZyBwdWxsZWQgb2ZmIHRoZSBxdWV1ZS4gVGhpcyBpcyBnb29kIHRvIHNlZTsgZXhwbGljaXQgbWVtb3J5IG1hbmFnZW1lbnQgaXMga2V5IGluIGtlcm5lbCBjb2RlLgoqICAgKipgcnhycGNfZGVzdHJveV9sb2NhbGAgaW4gYGxvY2FsX29iamVjdC5jYDoqKiBIZXJlLCB0aGV5JiMzOTtyZSBjbGVhbmluZyB1cCBsb2NhbCBSWFJQQyBvYmplY3RzLCBzcGVjaWZpY2FsbHkgdGhlIHNvY2tldC4gSSBzZWUgYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC0mZ3Q7c2ssIE5VTEwpOyBzeW5jaHJvbml6ZV9yY3UoKTtgLCB3aGljaCBtZWFucyB0aGV5JiMzOTtyZSBwcm9wZXJseSB1bmxpbmtpbmcgdGhlIHNvY2tldCYjMzk7cyB1c2VyIGRhdGEgYW5kIHVzaW5nIFJDVSB0byBlbnN1cmUgc2FmZSBtZW1vcnkgcmVjbGFtYXRpb24uIFRoZSByZWxlYXNlIGFmdGVyIHB1cmdpbmcgcXVldWVzIGlzIHR5cGljYWwuCgpJJiMzOTtsbCBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBBRlxfUlhSUEMgY29uZmlndXJhdGlvbiBpcyBzdGlsbCBjb3JyZWN0LiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUsIHNvIEkgY2FuIGVuc3VyZSB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRl9SWFJQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL0tjb25maWctNS1cbm5ldC9yeHJwYy9LY29uZmlnOjY6Y29uZmlnIEFGX1JYUlBDXG5uZXQvcnhycGMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UnhSUEMgc2Vzc2lvbiBzb2NrZXRzXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWc9MjU9aWYgQUZfUlhSUENcbm5ldC9yeHJwYy9LY29uZmlnLTI2LVxubmV0L3J4cnBjL0tjb25maWc6Mjc6Y29uZmlnIEFGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctMzMtXG5uZXQvcnhycGMvS2NvbmZpZzozNDpjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1Ncbm5ldC9yeHJwYy9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtJbmplY3QgcGFja2V0IGxvc3MgaW50byBSeFJQQyBwYWNrZXQgc3RyZWFtXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctMzktXG5uZXQvcnhycGMvS2NvbmZpZzo0MDpjb25maWcgQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG5uZXQvcnhycGMvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7SW5qZWN0IGRlbGF5IGludG8gcGFja2V0IHJlY2VwdGlvblwmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTQ5LVxubmV0L3J4cnBjL0tjb25maWc6NTA6Y29uZmlnIEFGX1JYUlBDX0RFQlVHXG5uZXQvcnhycGMvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7UnhSUEMgZHluYW1pYyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZz04OT1jb25maWcgUlhQRVJGXG4tLVxubmV0L3J4cnBjL0tjb25maWctOTUtXG5uZXQvcnhycGMvS2NvbmZpZzo5Njpjb25maWcgQUZfUlhSUENfS1VOSVRfVEVTVFxubmV0L3J4cnBjL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtSeFJQQyBjcnlwdG8gS1VuaXQgdGVzdFwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIEFGX1JYUlBDIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBBRl9SWFJQQ2AuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgS2NvbmZpZyBmaWxlIHdpdGhpbiB0aGUgbmV0L3J4cnBjIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgd2F5IHRoZXNlIHRoaW5ncyBhcmUgY29uZmlndXJlZCwgc28gaXQgc2hvdWxkIGxheSBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgcHJldHR5IGNsZWFybHkuIExldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQgYW5kIGNoZWNrIGBuZXQvcnhycGMvS2NvbmZpZ2AgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZCBhbmQgZWFzeSB0byBwYXJzZS4gU2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBwcmUtcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBBRl9SWFJQQ1xuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UnhSUEMgc2Vzc2lvbiBzb2NrZXRzXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9cbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fTElCX0RFUyBpZiBSWEtBRFxuICAxMTpcdFx0c2VsZWN0IEtFWVNcbiAgMTI6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBTYXkgWSBvciBNIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBSeFJQQyBzZXNzaW9uIHNvY2tldHMgKGp1c3RcbiAgMTU6XHRcdCAgdGhlIHRyYW5zcG9ydCBwYXJ0LCBub3QgdGhlIHByZXNlbnRhdGlvbiBwYXJ0OiAodW4pbWFyc2hhbGxpbmcgaXNcbiAgMTY6XHRcdCAgbGVmdCB0byB0aGUgYXBwbGljYXRpb24pLlxuICAxNzpcdFxuICAxODpcdFx0ICBUaGVzZSBhcmUgdXNlZCBmb3IgQUZTIGtlcm5lbCBmaWxlc3lzdGVtIGFuZCB1c2Vyc3BhY2UgdXRpbGl0aWVzLlxuICAxOTpcdFxuICAyMDpcdFx0ICBUaGlzIG1vZHVsZSBhdCB0aGUgbW9tZW50IG9ubHkgc3VwcG9ydHMgY2xpZW50IG9wZXJhdGlvbnMgYW5kIGlzXG4gIDIxOlx0XHQgIGN1cnJlbnRseSBpbmNvbXBsZXRlLlxuICAyMjpcdFxuICAyMzpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cbiAgMjQ6XHRcbiAgMjU6XHRpZiBBRl9SWFJQQ1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBBRl9SWFJQQ19JUFY2XG4gIDI4Olx0XHRib29sIFwmIzM0O0lQdjYgc3VwcG9ydCBmb3IgUnhSUENcJiMzNDtcbiAgMjk6XHRcdGRlcGVuZHMgb24gSVBWNlxuICAzMDpcdFx0aGVscFxuICAzMTpcdFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IEFGX1JYUlBDIHRvIHVzZSBJUFY2IFVEUCBhcyB3ZWxsIGFzIElQVjQgVURQIGFzXG4gIDMyOlx0XHQgIGl0cyBuZXR3b3JrIHRyYW5zcG9ydC5cbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1NcbiAgMzU6XHRcdGJvb2wgXCYjMzQ7SW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVwmIzM0O1xuICAzNjpcdFx0aGVscFxuICAzNzpcdFx0ICBTYXkgWSBoZXJlIHRvIGluamVjdCBwYWNrZXQgbG9zcyBieSBkaXNjYXJkaW5nIHNvbWUgcmVjZWl2ZWQgYW5kIHNvbWVcbiAgMzg6XHRcdCAgdHJhbnNtaXR0ZWQgcGFja2V0cy5cbiAgMzk6XHRcbiAgNDA6XHRjb25maWcgQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ5MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgUmVjZW50IFJ4UlBDIENoYW5nZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlc2UgUnhSUEMgY2hhbmdlcy4gVG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb24gbW9kaWZpY2F0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC9yeHJwYy9pb190aHJlYWQuY2AgYW5kIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBhbHRlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYnJvYWRlciBjb2RlLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSB0aGUgZXhhY3QgaW1wYWN0IG9mIHRoZXNlIHVwZGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvaW9fdGhyZWFkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlvX3RocmVhZDtcbiAgMzE6XHRcbiAgMzI6XHRcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XG4gIDMzOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuICAzNDpcdFx0XHRyZXR1cm4gMDtcbiAgMzU6XHRcdH1cbiAgMzY6XHRcdGlvX3RocmVhZCA9IFJFQURfT05DRShsb2NhbC1cdTAwM2Vpb190aHJlYWQpO1xuICAzNzpcdFx0aWYgKCFpb190aHJlYWQpIHtcbiAgMzg6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDM5Olx0XHRcdHJldHVybiAwO1xuICA0MDpcdFx0fVxuICA0MTpcdFx0aWYgKHNrYi1cdTAwM2V0c3RhbXAgPT0gMClcbiAgNDI6XHRcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7XG4gIDQzOlx0XG4gIDQ0Olx0XHRyeF9xdWV1ZSA9IFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlO1xuICA0NTpcdCNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4gIDQ2Olx0XHRpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8XG4gIDQ3Olx0XHQgICAgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZsb2NhbC1cdTAwM2VyeF9kZWxheV9xdWV1ZSkpIHtcbiAgNDg6XHRcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IGt0aW1lX2FkZF9tcyhza2ItXHUwMDNldHN0YW1wLCByeHJwY19pbmplY3RfcnhfZGVsYXkpO1xuICA0OTpcdFx0XHRyeF9xdWV1ZSA9IFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlO1xuICA1MDpcdFx0fVxuICA1MTpcdCNlbmRpZlxuICA1MjpcdFxuICA1MzpcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNnVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2U9IFJFQURfT05DRSh1ZHBfc2stXHUwMDNlc2tfcmN2YnVmKSB8fFxuICA1NDpcdFx0ICAgICFza19ybWVtX3NjaGVkdWxlKHVkcF9zaywgc2tiLCBza2ItXHUwMDNldHJ1ZXNpemUpKSB7XG4gIDU1Olx0XHRcdHNrX2Ryb3BzX2luYyh1ZHBfc2spO1xuICA1NjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNTc6XHRcdFx0cmV0dXJuIDA7XG4gIDU4Olx0XHR9XG4gIDU5Olx0XG4gIDYwOlx0XHRza2ItXHUwMDNlZGV2ID0gTlVMTDtcbiAgNjE6XHRcdHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zayk7XG4gIDYyOlx0XHRza2JfZHN0X2ZvcmNlKHNrYik7XG4gIDYzOlx0XG4gIDY0Olx0XHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbiAgNjU6XHRcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gIDY2Olx0XHRza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTtcbiAgNjc6XHRcdHdha2VfdXBfcHJvY2Vzcyhpb190aHJlYWQpO1xuICA2ODpcdFx0cmV0dXJuIDA7XG4gIDY5Olx0fVxuICA3MDpcdFxuICA3MTpcdC8qXG4gIDcyOlx0ICogSGFuZGxlIGFuIGVycm9yIHJlY2VpdmVkIG9uIHRoZSBsb2NhbCBlbmRwb2ludC5cbiAgNzM6XHQgKi9cbiAgNzQ6XHR2b2lkIHJ4cnBjX2Vycm9yX3JlcG9ydChzdHJ1Y3Qgc29jayAqc2spXG4gIDc1Olx0e1xuICA3NjpcdFx0c3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbDtcbiAgNzc6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDc4Olx0XG4gIDc5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgcGFydCBvZiB0aGUgUnhSUEMgc3lzdGVtIHdvcmtzLiBUaGUgY29yZSBvZiB0aGlzLCBhcyBJIHJlY2FsbCwgbXVzdCBpbnZvbHZlIHRoZSBkZXN0cnVjdGlvbiBvZiBhIGxvY2FsIG9iamVjdCwgc28gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgcnhycGNfZGVzdHJveV9sb2NhbGAuIFRoZSBmdW5jdGlvbiBpdHNlbGYgc2hvdWxkIGJlIGluIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgLiBMZXQmIzM5O3MgbmF2aWdhdGUgdGhlcmUgYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0XHRfZW50ZXIoXCYjMzQ7JWRcJiMzNDssIGxvY2FsLVx1MDAzZWRlYnVnX2lkKTtcbiA0MjY6XHRcbiA0Mjc6XHRcdGxvY2FsLVx1MDAzZWRlYWQgPSB0cnVlO1xuIDQyODpcdFxuIDQyOTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZyeG5ldC1cdTAwM2Vsb2NhbF9tdXRleCk7XG4gNDMwOlx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2bG9jYWwtXHUwMDNlbGluayk7XG4gNDMxOlx0XHRtdXRleF91bmxvY2soXHUwMDI2cnhuZXQtXHUwMDNlbG9jYWxfbXV0ZXgpO1xuIDQzMjpcdFxuIDQzMzpcdFx0cnhycGNfY2xlYW5fdXBfbG9jYWxfY29ubnMobG9jYWwpO1xuIDQzNDpcdFx0cnhycGNfc2VydmljZV9jb25uZWN0aW9uX3JlYXBlcihcdTAwMjZyeG5ldC1cdTAwM2VzZXJ2aWNlX2Nvbm5fcmVhcGVyKTtcbiA0MzU6XHRcdEFTU0VSVCghbG9jYWwtXHUwMDNlc2VydmljZSk7XG4gNDM2Olx0XG4gNDM3Olx0XHRpZiAoc29ja2V0KSB7XG4gNDM4Olx0XHRcdGxvY2FsLVx1MDAzZXNvY2tldCA9IE5VTEw7XG4gNDM5Olx0XHRcdGtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTtcbiA0NDA6XHRcdFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVx1MDAzZXNrLCBOVUxMKTtcbiA0NDE6XHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gNDQyOlx0XHR9XG4gNDQzOlx0XG4gNDQ0Olx0XHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcbiA0NDU6XHRcdCAqIGxvY2FsIGVuZHBvaW50LlxuIDQ0NjpcdFx0ICovXG4gNDQ3Olx0I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcbiA0NDg6XHRcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiA0NDk6XHQjZW5kaWZcbiA0NTA6XHRcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlKTtcbiA0NTE6XHRcbiA0NTI6XHRcdGlmIChzb2NrZXQpXG4gNDUzOlx0XHRcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xuIDQ1NDpcdFxuIDQ1NTpcdFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcbiA0NTY6XHRcdHBhZ2VfZnJhZ19jYWNoZV9kcmFpbihcdTAwMjZsb2NhbC1cdTAwM2V0eF9hbGxvYyk7XG4gNDU3Olx0fVxuIDQ1ODpcdFxuIDQ1OTpcdC8qXG4gNDYwOlx0ICogRGVzdHJveSBhIGxvY2FsIGVuZHBvaW50IGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIGV4cGlyZXMuXG4gNDYxOlx0ICovXG4gNDYyOlx0c3RhdGljIHZvaWQgcnhycGNfbG9jYWxfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIDQ2MzpcdHtcbiA0NjQ6XHRcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgcnhycGNfbG9jYWwsIHJjdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJTyBUaHJlYWQgQm90dGxlbmVjayoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc2VlaW5nIHNvbWUgcGVyZm9ybWFuY2UgZGlwcywgYW5kIHRoZSBzdXNwaWNpb24gaXMgc3RhcnRpbmcgdG8gbGVhbiB0b3dhcmRzIGFuIEkvTyB0aHJlYWQgYm90dGxlbmVjayB3aXRoaW4gdGhlIGByeHJwY19pb190aHJlYWRgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcmVjZW50IGNoYW5nZXMgYXJvdW5kIGxpbmUgNDgwIOKAkyBJIHJlbWVtYmVyIHRoZSBtb2RpZmljYXRpb25zIHdlIG1hZGUgdG8gdGhlIGRhdGEgaGFuZGxpbmcgdGhlcmUuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBzcGVjaWZpYyBhcmVhIGFuZCBzZWUgaWYgd2UmIzM5O3ZlIGludHJvZHVjZWQgYW55IHVuZXhwZWN0ZWQgbGF0ZW5jeSBvciBjb250ZW50aW9uLiBJdCYjMzk7cyB0aW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBkaWcgaW50byB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGF0IGxpbmUgYW5kIHNlZSB3aGF0IHRoZSBkYXRhIGZsb3cgYW5kIGFueSBibG9ja2luZyBjYWxscyBsb29rIGxpa2UuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgc3RhbGxzIG9yIGluZWZmaWNpZW5jaWVzIGFuZCBkZXRlcm1pbmUgaWYgdGhleSYjMzk7cmUgY29udHJpYnV0aW5nIHRvIHRoZSBwZXJmb3JtYW5jZSBpc3N1ZXMgd2UmIzM5O3JlIHNlZWluZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmcmVzaCBtZW50YWwgbW9kZWwgb2YgdGhhdCB0aHJlYWQgYW5kIGhvdyB0aGF0IGFyZWEgb2YgY29kZSBleGVjdXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvaW9fdGhyZWFkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2NTpcdCNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4gNDY2Olx0XHRcdG5vdyA9IGt0aW1lX2dldF9yZWFsKCk7XG4gNDY3Olx0XHRcdHdoaWxlICgoc2tiID0gc2tiX3BlZWsoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpKSkge1xuIDQ2ODpcdFx0XHRcdGlmIChrdGltZV9iZWZvcmUobm93LCBza2ItXHUwMDNldHN0YW1wKSlcbiA0Njk6XHRcdFx0XHRcdGJyZWFrO1xuIDQ3MDpcdFx0XHRcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiA0NzE6XHRcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZSwgc2tiKTtcbiA0NzI6XHRcdFx0fVxuIDQ3MzpcdCNlbmRpZlxuIDQ3NDpcdFxuIDQ3NTpcdFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZSkpIHtcbiA0NzY6XHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlLmxvY2spO1xuIDQ3NzpcdFx0XHRcdHNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlLCBcdTAwMjZyeF9xdWV1ZSk7XG4gNDc4Olx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlLmxvY2spO1xuIDQ3OTpcdFx0XHRcdHRyYWNlX3J4cnBjX2lvdGhyZWFkX3J4KGxvY2FsLCBza2JfcXVldWVfbGVuKFx1MDAyNnJ4X3F1ZXVlKSk7XG4gNDgwOlx0XHRcdH1cbiA0ODE6XHRcbiA0ODI6XHRcdFx0LyogRGlzdHJpYnV0ZSBwYWNrZXRzIGFuZCBlcnJvcnMuICovXG4gNDgzOlx0XHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZyeF9xdWV1ZSkpKSB7XG4gNDg0Olx0XHRcdFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xuIDQ4NTpcdFxuIDQ4NjpcdFx0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbiA0ODc6XHRcdFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2VtYXJrKSB7XG4gNDg4Olx0XHRcdFx0Y2FzZSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ6XG4gNDg5Olx0XHRcdFx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSAwO1xuIDQ5MDpcdFx0XHRcdFx0aWYgKCFyeHJwY19pbnB1dF9wYWNrZXQobG9jYWwsIHNrYikpXG4gNDkxOlx0XHRcdFx0XHRcdHJ4cnBjX3JlamVjdF9wYWNrZXQobG9jYWwsIHNrYik7XG4gNDkyOlx0XHRcdFx0XHR0cmFjZV9yeHJwY19yeF9kb25lKHNrYi1cdTAwM2VtYXJrLCBza2ItXHUwMDNlcHJpb3JpdHkpO1xuIDQ5MzpcdFx0XHRcdFx0cnhycGNfZnJlZV9za2Ioc2tiLCByeHJwY19za2JfcHV0X2lucHV0KTtcbiA0OTQ6XHRcdFx0XHRcdGJyZWFrO1xuIDQ5NTpcdFx0XHRcdGNhc2UgUlhSUENfU0tCX01BUktfRVJST1I6XG4gNDk2Olx0XHRcdFx0XHRyeHJwY19pbnB1dF9lcnJvcihsb2NhbCwgc2tiKTtcbiA0OTc6XHRcdFx0XHRcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9lcnJvcl9yZXBvcnQpO1xuIDQ5ODpcdFx0XHRcdFx0YnJlYWs7XG4gNDk5Olx0XHRcdFx0Y2FzZSBSWFJQQ19TS0JfTUFSS19TRVJWSUNFX0NPTk5fU0VDVVJFRDpcbiA1MDA6XHRcdFx0XHRcdHJ4cnBjX2lucHV0X2Nvbm5fZXZlbnQoc3AtXHUwMDNlcG9rZV9jb25uLCBza2IpO1xuIDUwMTpcdFx0XHRcdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXHUwMDNlcG9rZV9jb25uLCByeHJwY19jb25uX3B1dF9wb2tlKTtcbiA1MDI6XHRcdFx0XHRcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9jb25uX3NlY3VyZWQpO1xuIDUwMzpcdFx0XHRcdFx0YnJlYWs7XG4gNTA0Olx0XHRcdFx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIyMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSeFJQQyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgUnhSUEMgc29ja2V0IHByb3RvY29sLCBzcGVjaWZpY2FsbHkgdGhlIG5ldHdvcmsgbGF5ZXIgKEFGX1JYUlBDKS4gVGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYCBhbmQgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AuIEludGVyZXN0aW5nLiBBbmQgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzIGFyZSBgcnhycGNfZW5jYXBfcmN2YCwgYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbGAuCgpSaWdodCwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBldmFsdWF0ZSBmb3IgZnV6emluZyBwb3RlbnRpYWwuIEFGX1JYUlBDIHNvY2tldHMgYXJlIGRpcmVjdGx5IGNyZWF0YWJsZSwgc28gd2UgY2FuIGNvbnRyb2wgaW5wdXQgYW5kIHRyaWdnZXIgdGhlc2UgZnVuY3Rpb25zLiBUaGV5IHVzZSBVRFAgZW5jYXBzdWxhdGlvbiwgaGFuZGxlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHF1ZXVlcywgbWFuYWdlIHNvY2tldCBidWZmZXJzIChTS0JzKSwgYW5kIGhhdmUgdGhlaXIgb3duIEkvTyB3b3JrZXIgdGhyZWFkcyBhbmQgbG9jYWwgZW5kcG9pbnQgbGlmZWN5Y2xlLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIG1vZGlmeWluZyBjcml0aWNhbCBhcmVhcyBvZiBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcg4oCTIGBza19ybWVtX3NjaGVkdWxlYCwgYHNrYl9zZXRfb3duZXJfcmAsIGBza2Jfb3JwaGFuYCDigJMgYXMgd2VsbCBhcyBkcm9wIHRyYWNraW5nLCBkZXN0aW5hdGlvbiAoZHN0KSBmb3JjaW5nLCBhbmQgUkNVIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgc29ja2V0IGRlc3RydWN0aW9uLiBUaGlzIG1lYW5zIGl0IGludm9sdmVzIG1lbW9yeSBtYW5hZ2VtZW50LCBuZXR3b3JrIHByb2Nlc3NpbmcsIGFuZCBjb25jdXJyZW5jeSDigJMgYWxsIHBvdGVudGlhbCBhcmVhcyBmb3IgdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcHJlcmVxdWlzaXRlcy4gV2UgbmVlZCBgQUZfUlhSUENgICh3aGljaCBkZXBlbmRzIG9uIGBJTkVUYCkgYW5kLCBvcHRpb25hbGx5LCBgQUZfUlhSUENfSVBWNmAuIE1ha2VzIHNlbnNlLgoKSSYjMzk7bGwgZm9jdXMgb24gdGhvc2UgaWRlbnRpZmllZCBzeW1ib2xzOiBgcnhycGNfZW5jYXBfcmN2YCwgYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbGAuIFRoZXkgYXJlIHRoZSBtYWluIHRhcmdldCBmb3IgaW5pdGlhbCBhbmFseXNpcy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgY3JpdGljYWwgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIEFGX1JYUlBDIHRoYXQgY291bGQgYmUgaW5kaXJlY3RseSBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIEFuZCwgYXMgYSBzYW5pdHkgY2hlY2ssIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGVyZSBgcnhycGNfZW5jYXBfcmN2YCBpcyBiZWluZyB1c2VkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTI2OD1zdGF0aWMgaW5saW5lIHZvaWQgcnhycGNfdGxwX2luaXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmgtMTI3Ny0gKi9cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjEyNzg6aW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzktdm9pZCByeHJwY19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKik7XG4tLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jPTEyPXN0YXRpYyBpbnQgcnhycGNfaW5wdXRfcGFja2V0X29uX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3J4cnBjL2lvX3RocmVhZC5jLTI1LSAqL1xubmV0L3J4cnBjL2lvX3RocmVhZC5jOjI2OmludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNy17XG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jPTE2Mj1zdGF0aWMgaW50IHJ4cnBjX29wZW5fc29ja2V0KHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTkzLVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSBVRFBfRU5DQVBfUlhSUEM7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTk0Olx0dHVuY2ZnLmVuY2FwX3JjdiA9IHJ4cnBjX2VuY2FwX3Jjdjtcbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYy0xOTUtXHR0dW5jZmcuZW5jYXBfZXJyX3JjdiA9IHJ4cnBjX2VuY2FwX2Vycl9yY3Y7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MDMKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoaXMgaXMgc2ltcGxlIGVub3VnaC4gVGhlIHNldHVwIGlzIHF1aXRlIGNsZWFyLWN1dC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGJhc2VsaW5lLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZXkmIzM5O3ZlIGlkZW50aWZpZWQgYHJ4cnBjX2VuY2FwX3JjdmAsIGByeHJwY19pb190aHJlYWRgLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGFzIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gR29vZCBjaG9pY2VzLCB0aG9zZSBhcmUgZGVmaW5pdGVseSBwb3RlbnRpYWwgYXJlYXMgZm9yIGlucHV0IHZhbGlkYXRpb24gb3Igc3RhdGUgY29ycnVwdGlvbiBidWdzIHdpdGhpbiB0aGUgUnhSUEMgaW1wbGVtZW50YXRpb24uIEZpbmFsbHksIHRoZSBlbmFibGVkIGNvbmZpZ3MsIGBBRl9SWFJQQ2AgYW5kIGBJTkVUYCwgYXJlIHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgbmV0d29yay1mb2N1c2VkIGZ1enppbmcgY2FtcGFpZ24uIE1ha2VzIHNlbnNlIHdlJiMzOTtyZSBnb2luZyBhZnRlciB0aGUgUnhSUEMgbmV0d29yayBzdGFjay4gTm93LCBsZXQmIzM5O3MgZXhlY3V0ZSBgc2V0LXJlc3VsdHNgIGFuZCBzZWUgaG93IGl0IHBlcmZvcm1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZfUlhSUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uLCBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZywgc2tiIG93bmVyc2hpcCBhbmQgb3JwaGFuaW5nLCBhbmQgbG9jYWwgc29ja2V0IHRlYXJkb3duIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gdGhlIEFGX1JYUlBDIG5ldHdvcmsgcHJvdG9jb2wgc3Vic3lzdGVtLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFJ4UlBDIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZfUlhSUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX2VuY2FwX3JjdiYjMzQ7LAogICAgJiMzNDtyeHJwY19pb190aHJlYWQmIzM0OywKICAgICYjMzQ7cnhycGNfZGVzdHJveV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uLCBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZywgc2tiIG93bmVyc2hpcCBhbmQgb3JwaGFuaW5nLCBhbmQgbG9jYWwgc29ja2V0IHRlYXJkb3duIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gdGhlIEFGX1JYUlBDIG5ldHdvcmsgcHJvdG9jb2wgc3Vic3lzdGVtLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFJ4UlBDIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJ4cnBjIHBhY2tldCByZWNlcHRpb24gYW5kIHNvY2tldCB0ZWFyZG93biBsb2dpYzpcbjEuIEluIGByeHJwY19lbmNhcF9yY3YoKWAgYW5kIGByeHJwY19pb190aHJlYWQoKWAsIGl0IGFkZHMgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZyBjaGVja3MgKGBza19ybWVtX3NjaGVkdWxlYCwgYHNrX3JtZW1fYWxsb2NgKSwgc2V0cyBza2Igb3duZXJzaGlwIG9uIHRoZSBVRFAgc29ja2V0IChgc2tiX3NldF9vd25lcl9yYCksIGZvcmNlcyBEU1QgcmV0ZW50aW9uIChgc2tiX2RzdF9mb3JjZWApLCBhbmQgb3JwaGFucyBza2JzIChgc2tiX29ycGhhbmApIHVwb24gZGVxdWV1ZWluZy5cbjIuIEluIGByeHJwY19kZXN0cm95X2xvY2FsKClgLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBwb2ludGVyIGNsZWFyYW5jZSB3aXRoIGByY3VfYXNzaWduX3NrX3VzZXJfZGF0YWAgZm9sbG93ZWQgYnkgYHN5bmNocm9uaXplX3JjdSgpYCwgZGVmZXJyaW5nIGBzb2NrX3JlbGVhc2UoKWAgdW50aWwgYWZ0ZXIgdGhlIHF1ZXVlcyBhcmUgcHVyZ2VkIHRvIGF2b2lkIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucyBvbiBzb2NrZXQgZGVzdHJ1Y3Rpb24uXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBtb2RpZnkgY29weS10by11c2VyIHBhdGhzLCBvciBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgYXJlYXMgKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igc2tiIGFjY291bnRpbmcgbGVha3MpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmVyZW5jZSB0cmFja2luZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGNhYjBjODBlMzViMTdjZjNhNDVjNDE4YzBhZDQ4OTczMjgxYTI2ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTI6MDA6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmMKaW5kZXggZGM1MTg0YTJmYTlkMS4uOGI3N2QxMzc4ODhlYSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9pb190aHJlYWQuYwpAQCAtNDEsOCAmIzQzOzQxLDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChza2ItJmd0O3RzdGFtcCA9PSAwKQogCQlza2ItJmd0O3RzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CiAKLQlza2ItJmd0O21hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7Ci0JcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlyeF9xdWV1ZSA9ICZhbXA7bG9jYWwtJmd0O3J4X3F1ZXVlOwogI2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVkKIAlpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8CkBAIC01Miw2ICYjNDM7NTAsMTkgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KICNlbmRpZgogCiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO3VkcF9zay0mZ3Q7c2tfcm1lbV9hbGxvYykgJmd0Oz0gUkVBRF9PTkNFKHVkcF9zay0mZ3Q7c2tfcmN2YnVmKSB8fAomIzQzOwkgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi0mZ3Q7dHJ1ZXNpemUpKSB7CiYjNDM7CQlza19kcm9wc19pbmModWRwX3NrKTsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiLSZndDtkZXYgPSBOVUxMOwomIzQzOwlza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spOwomIzQzOwlza2JfZHN0X2ZvcmNlKHNrYik7CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7bWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDsKJiM0MzsJcnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTsKIAlza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTsKIAl3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTsKIAlyZXR1cm4gMDsKQEAgLTQ3MSw2ICYjNDM7NDgyLDggQEAgaW50IHJ4cnBjX2lvX3RocmVhZCh2b2lkICpkYXRhKQogCQkvKiBEaXN0cmlidXRlIHBhY2tldHMgYW5kIGVycm9ycy4gKi8KIAkJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7cnhfcXVldWUpKSkgewogCQkJc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpOwomIzQzOwomIzQzOwkJCXNrYl9vcnBoYW4oc2tiKTsKIAkJCXN3aXRjaCAoc2tiLSZndDttYXJrKSB7CiAJCQljYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDoKIAkJCQlza2ItJmd0O3ByaW9yaXR5ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYwppbmRleCAxNjlmOWRmZGFhNzdmLi42NjA0ZjlmOTUyNjYwIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jCkBAIC00MzcsOCAmIzQzOzQzNyw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKQogCWlmIChzb2NrZXQpIHsKIAkJbG9jYWwtJmd0O3NvY2tldCA9IE5VTEw7CiAJCWtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKLQkJc29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKLQkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CQlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzb2NrZXQtJmd0O3NrLCBOVUxMKTsKJiM0MzsJCXN5bmNocm9uaXplX3JjdSgpOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIHBhY2tldHMgY29taW5nIGluIHRvIHRoZQpAQCAtNDQ4LDYgJiM0Mzs0NDgsMTAgQEAgdm9pZCByeHJwY19kZXN0cm95X2xvY2FsKHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwpCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfZGVsYXlfcXVldWUpOwogI2VuZGlmCiAJcnhycGNfcHVyZ2VfcXVldWUoJmFtcDtsb2NhbC0mZ3Q7cnhfcXVldWUpOwomIzQzOwomIzQzOwlpZiAoc29ja2V0KQomIzQzOwkJc29ja19yZWxlYXNlKHNvY2tldCk7CiYjNDM7CiAJcnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTsKIAlwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oJmFtcDtsb2NhbC0mZ3Q7dHhfYWxsb2MpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3BlY2lmaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggc29ja2V0IG1lbW9yeSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IHJlcXVpcmVzIEtNU0FOIHNjcnV0aW55IG9yIGlmIHRoZSBjb25jZXJucyBhcmUgbW9yZSByZWxhdGVkIHRvIHNvY2tldCBidWZmZXIgYWNjb3VudGluZywgUkNVIGxpZmV0aW1lLCBhbmQgcmVsYXRlZCBuZXR3b3JraW5nIGVsZW1lbnRzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYG5ldC9yeHJwYy9pb190aHJlYWQuY2AsIHNwZWNpZmljYWxseSBgcnhycGNfZW5jYXBfcmN2KClgLCBJIHNlZSBzb21lIGludGVyZXN0aW5nIG9wZXJhdGlvbnMuIEl0IGFwcGVhcnMgdG8gYmUgaGFuZGxpbmcgVURQIHNvY2tldCBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoIGNoZWNrcyBhZ2FpbnN0IGB1ZHBfc2stJmd0O3NrX3JtZW1fYWxsb2NgIGFuZCBgdWRwX3NrLSZndDtza19yY3ZidWZgLCB1c2luZyBgc2tfcm1lbV9zY2hlZHVsZSgpYCBhbmQgdGhlbiBtYW5hZ2luZyB0aGUgb3duZXJzaGlwIG9mIHRoZSBgc2tiYC4gVGhlIHNldHRpbmcgb2YgYHNrYi0mZ3Q7ZGV2ID0gTlVMTDtgLCBmb2xsb3dlZCBieSBgc2tiX3NldF9vd25lcl9yKHNrYiwgdWRwX3NrKTtgLCBgc2tiX2RzdF9mb3JjZShza2IpO2AsIGFuZCBmaW5hbGx5IGBza2Jfb3JwaGFuKHNrYilgIGluIGByeHJwY19pb190aHJlYWRgIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIHRyeWluZyB0byBlbnN1cmUgcHJvcGVyIGJ1ZmZlciBvd25lcnNoaXAgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJdCBmZWVscyBsaWtlIHRoZSB1c3VhbCB0cmlja2VyeSB0byBrZWVwIHRyYWNrIG9mIG5ldHdvcmsgYnVmZmVycy4KClRoZW4sIG1vdmluZyB0byBgbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jYCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoKWAsIEkgbm90aWNlIHRoZSB1c2Ugb2YgYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC0mZ3Q7c2ssIE5VTEwpO2AgYW5kIGBzeW5jaHJvbml6ZV9yY3UoKWAsIHdoaWNoIGlzIGEgY2xhc3NpYyBSQ1UgcGF0dGVybiB0byBoYW5kbGUgc29ja2V0IHRlYXJkb3duIGFuZCBlbnN1cmUgZGF0YSB2aXNpYmlsaXR5IGR1cmluZyB0aGUgZGVzdHJ1Y3Rpb24gb2YgYHJ4cnBjX2xvY2FsYCBvYmplY3RzLiBEZWxheWluZyBgc29ja19yZWxlYXNlKHNvY2tldClgIGFmdGVyIHF1ZXVlIHB1cmdpbmcgaXMgYWxzbyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGlzc3Vlcy4KClRoZSBvdmVyYWxsIGdvYWwgc2VlbXMgdG8gYmUgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSByeHJwYyBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcHJvY2VzcyBpbnZvbHZpbmcgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nLCBidWZmZXJpbmcsIGFuZCB0ZWFyZG93bi4gSXQgYXBwZWFycyB0byBiZSBhZGRyZXNzaW5nOgoKMS4gIFVEUCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcgdXNpbmcgYHNrX3JtZW1fc2NoZWR1bGVgLCBgc2tiX3NldF9vd25lcl9yYCwgYW5kIGBza2Jfb3JwaGFuYC4KMi4gIFNhZmUgdGVhcmRvd24gb2YgYHJ4cnBjX2xvY2FsYCBzb2NrZXRzIHdpdGggUkNVIHN5bmNocm9uaXphdGlvbiwgdGh1cyBlbnN1cmluZyBubyB1c2UgYWZ0ZXIgZnJlZSwgYW5kIHByb3BlciBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuCgpTbywgdGhlIGZvY3VzIGhlcmUsIGZvciBtZSwgaXMgZW5zdXJpbmcgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBvciBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgb3IgZXZlbiBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBCYXNlZCBvbiB0aGVzZSBvcGVyYXRpb25zLCBhbmQgYSBxdWljayBzY2FuIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHJ4cnBjLCBJJiMzOTttIGdvaW5nIHRvIGxlYW4gdG93YXJkcyB0aGlzIG5vdCByZXF1aXJpbmcgS01TQU4gYW5hbHlzaXMuIFRoZSBSQ1UgdXNhZ2UgYW5kIGJ1ZmZlciBvd25lcnNoaXAgcGF0dGVybnMgc2VlbSBzb3VuZC4gSG93ZXZlciwgSSYjMzk7bGwgc3RpbGwgZG8gYSB0aG9yb3VnaCBjb2RlIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhycGNfZW5jYXBfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEyNjg9c3RhdGljIGlubGluZSB2b2lkIHJ4cnBjX3RscF9pbml0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuLS1cbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzctICovXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMjc4OmludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xMjc5LXZvaWQgcnhycGNfZXJyb3JfcmVwb3J0KHN0cnVjdCBzb2NrICopO1xuLS1cbm5ldC9yeHJwYy9pb190aHJlYWQuYz0xMj1zdGF0aWMgaW50IHJ4cnBjX2lucHV0X3BhY2tldF9vbl9jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNS0gKi9cbm5ldC9yeHJwYy9pb190aHJlYWQuYzoyNjppbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvcnhycGMvaW9fdGhyZWFkLmMtMjcte1xuLS1cbm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuYz0xNjI9c3RhdGljIGludCByeHJwY19vcGVuX3NvY2tldChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5My1cdHR1bmNmZy5lbmNhcF90eXBlID0gVURQX0VOQ0FQX1JYUlBDO1xubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jOjE5NDpcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMtMTk1LVx0dHVuY2ZnLmVuY2FwX2Vycl9yY3YgPSByeHJwY19lbmNhcF9lcnJfcmN2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzA4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcHJvY2Vzc2luZyB0aG9zZSBsaW5lcyBpbiBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYDoKCioqQW5hbHl6aW5nIHJ4cnBjIElPIFRocmVhZCBDb2RlOiBJbml0aWFsIFNjYW4gJmFtcDsgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldC9yeHJwYy9pb190aHJlYWQuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIElPIHRocmVhZCBvcGVyYXRlcyB3aXRoaW4gdGhlIHJ4cnBjIGNvbnRleHQsIHNvIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uIGxpbmVzIDI1LTcwLCBhbmQgdGhlbiBJJiMzOTtsbCBqdW1wIGZ1cnRoZXIgZG93biB0byA0NjAtNTAwLiBGaXJzdCwgbGV0IG1lIGdldCBhIGdlbmVyYWwgaWRlYSBvZiB0aGUgc2V0IHVwIGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIElPIHRocmVhZCwgdGhlIGluaXRpYWwgc2V0dXAgb2YgbG9ja3MsIGFueSB0aHJlYWQgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBtYW5hZ2VtZW50IG9mIHRoZSBldmVudCBsb29wLgoKTm93IEkmIzM5O2xsIHplcm8gaW4gb24gbGluZXMgNDYwLTUwMC4gVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIHdvcmsgaXMgYmVpbmcgcGVyZm9ybWVkLCB3aXRoaW4gdGhlIElPIHRocmVhZC4gR2l2ZW4gdGhhdCYjMzk7cyB3aGVyZSBJIGVuZGVkIHVwLCBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIGNvZGUgaGFuZGxpbmcgaW5ib3VuZCBhbmQgb3V0Ym91bmQgZGF0YSwgaGFuZGxpbmcgYW55IGludGVycnVwdHMsIGNoZWNraW5nIGZvciB0aW1lb3V0cywgYW5kIG1hbmFnaW5nIHRoZSBjb25uZWN0aW9uIHN0YXRlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjcml0aWNhbCBwYXRoIHdoZXJlIHRoZSBJTyBpcyBhY3R1YWxseSBoYXBwZW5pbmcuIEkgZXhwZWN0IHRoZSBjb2RlIHRvIGJlIHJlbGF0aXZlbHkgZWZmaWNpZW50IGFuZCBvcHRpbWl6ZWQsIGdpdmVuIHRoZSBwZXJmb3JtYW5jZSByZXF1aXJlbWVudHMgb2YgYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IHNvY2tldCBzdGF0ZXMsIGVycm9ycywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gaXQgdXNlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSByeHJwYyBzdGFjay4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGlzIGhhbmRsZXMgYWxsIHRoZSBleHBlY3RlZCBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgdGhlIGBpb190aHJlYWRfd29ya2AgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIHJ4cnBjIHN1YnN5c3RlbSBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdGF0ZSBjaGFuZ2VzIGFyZS4gSG9wZWZ1bGx5LCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGNyaXRpY2FsIHBpZWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9pb190aHJlYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHQgKi9cbiAgMjY6XHRpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gIDI3Olx0e1xuICAyODpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcnhfcXVldWU7XG4gIDI5Olx0XHRzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsID0gcmN1X2RlcmVmZXJlbmNlX3NrX3VzZXJfZGF0YSh1ZHBfc2spO1xuICAzMDpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7XG4gIDMxOlx0XG4gIDMyOlx0XHRpZiAodW5saWtlbHkoIWxvY2FsKSkge1xuICAzMzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgMzQ6XHRcdFx0cmV0dXJuIDA7XG4gIDM1Olx0XHR9XG4gIDM2Olx0XHRpb190aHJlYWQgPSBSRUFEX09OQ0UobG9jYWwtXHUwMDNlaW9fdGhyZWFkKTtcbiAgMzc6XHRcdGlmICghaW9fdGhyZWFkKSB7XG4gIDM4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICAzOTpcdFx0XHRyZXR1cm4gMDtcbiAgNDA6XHRcdH1cbiAgNDE6XHRcdGlmIChza2ItXHUwMDNldHN0YW1wID09IDApXG4gIDQyOlx0XHRcdHNrYi1cdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xuICA0MzpcdFxuICA0NDpcdFx0cnhfcXVldWUgPSBcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZTtcbiAgNDU6XHQjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxuICA0NjpcdFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxuICA0NzpcdFx0ICAgICFza2JfcXVldWVfZW1wdHkoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpKSB7XG4gIDQ4Olx0XHRcdHNrYi1cdTAwM2V0c3RhbXAgPSBrdGltZV9hZGRfbXMoc2tiLVx1MDAzZXRzdGFtcCwgcnhycGNfaW5qZWN0X3J4X2RlbGF5KTtcbiAgNDk6XHRcdFx0cnhfcXVldWUgPSBcdTAwMjZsb2NhbC1cdTAwM2VyeF9kZWxheV9xdWV1ZTtcbiAgNTA6XHRcdH1cbiAgNTE6XHQjZW5kaWZcbiAgNTI6XHRcbiAgNTM6XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZ1ZHBfc2stXHUwMDNlc2tfcm1lbV9hbGxvYykgXHUwMDNlPSBSRUFEX09OQ0UodWRwX3NrLVx1MDAzZXNrX3JjdmJ1ZikgfHxcbiAgNTQ6XHRcdCAgICAhc2tfcm1lbV9zY2hlZHVsZSh1ZHBfc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuICA1NTpcdFx0XHRza19kcm9wc19pbmModWRwX3NrKTtcbiAgNTY6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDU3Olx0XHRcdHJldHVybiAwO1xuICA1ODpcdFx0fVxuICA1OTpcdFxuICA2MDpcdFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4gIDYxOlx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xuICA2MjpcdFx0c2tiX2RzdF9mb3JjZShza2IpO1xuICA2MzpcdFxuICA2NDpcdFx0c2tiLVx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XG4gIDY1Olx0XHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuICA2NjpcdFx0c2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7XG4gIDY3Olx0XHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcbiAgNjg6XHRcdHJldHVybiAwO1xuICA2OTpcdH1cbiAgNzA6XHRcbiAgNzE6XHQvKlxuICA3MjpcdCAqIEhhbmRsZSBhbiBlcnJvciByZWNlaXZlZCBvbiB0aGUgbG9jYWwgZW5kcG9pbnQuXG4gIDczOlx0ICovXG4gIDc0Olx0dm9pZCByeHJwY19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKnNrKVxuICA3NTpcdHtcbiAgNzY6XHRcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWw7XG4gIDc3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuICA3ODpcdFxuICA3OTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuICA4MDpcdFx0bG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcbiAgODE6XHRcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XG4gIDgyOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuICA4MzpcdFx0XHRyZXR1cm47XG4gIDg0Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGxvY2FsIG9iamVjdCBjb2RlIGluIHRoZSBSeFJQQyBpbXBsZW1lbnRhdGlvbi4gVGhlIGZhY3QgdGhhdCBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2Agc3VnZ2VzdHMgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBsb2NhbGx5LWJvdW5kIFJQQyBzZXJ2aWNlcywgYW5kIHRoZSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIG1hbmFnaW5nIHRoZW0uIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gaG93IHJlcXVlc3RzIGFyZSBkaXJlY3RlZCB0byB0aG9zZSBsb2NhbCBzZXJ2aWNlcywgaG93IHRoZWlyIHJlc3BvbnNlcyBhcmUgaGFuZGxlZCwgb3IgcGVyaGFwcyBzb21ldGhpbmcgYWJvdXQgcmVzb3VyY2UgbWFuYWdlbWVudCBvciBzZWN1cml0eSBjb250ZXh0IHdpdGhpbiB0aGUgbG9jYWwgb2JqZWN0IGFyY2hpdGVjdHVyZS4gSSB3b25kZXIgaWYgSSYjMzk7bSBsb29raW5nIGludG8gcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3Igc29tZSBvYnNjdXJlIGVkZ2UgY2FzZT8gS25vd2luZyB0aGUgZXhhY3QgcmVhc29uIGZvciB0aGUgaW52ZXN0aWdhdGlvbiB3b3VsZCBhbGxvdyBtZSB0byBiZXR0ZXIgdGFyZ2V0IG15IHNlYXJjaCB3aXRoaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBiYXNpY3MuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzMDpcdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNmxvY2FsLVx1MDAzZWxpbmspO1xuIDQzMTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ4bmV0LVx1MDAzZWxvY2FsX211dGV4KTtcbiA0MzI6XHRcbiA0MzM6XHRcdHJ4cnBjX2NsZWFuX3VwX2xvY2FsX2Nvbm5zKGxvY2FsKTtcbiA0MzQ6XHRcdHJ4cnBjX3NlcnZpY2VfY29ubmVjdGlvbl9yZWFwZXIoXHUwMDI2cnhuZXQtXHUwMDNlc2VydmljZV9jb25uX3JlYXBlcik7XG4gNDM1Olx0XHRBU1NFUlQoIWxvY2FsLVx1MDAzZXNlcnZpY2UpO1xuIDQzNjpcdFxuIDQzNzpcdFx0aWYgKHNvY2tldCkge1xuIDQzODpcdFx0XHRsb2NhbC1cdTAwM2Vzb2NrZXQgPSBOVUxMO1xuIDQzOTpcdFx0XHRrZXJuZWxfc29ja19zaHV0ZG93bihzb2NrZXQsIFNIVVRfUkRXUik7XG4gNDQwOlx0XHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cdTAwM2VzaywgTlVMTCk7XG4gNDQxOlx0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDQ0MjpcdFx0fVxuIDQ0MzpcdFxuIDQ0NDpcdFx0LyogQXQgdGhpcyBwb2ludCwgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgcGFja2V0cyBjb21pbmcgaW4gdG8gdGhlXG4gNDQ1Olx0XHQgKiBsb2NhbCBlbmRwb2ludC5cbiA0NDY6XHRcdCAqL1xuIDQ0NzpcdCNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4gNDQ4Olx0XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZsb2NhbC1cdTAwM2VyeF9kZWxheV9xdWV1ZSk7XG4gNDQ5Olx0I2VuZGlmXG4gNDUwOlx0XHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZSk7XG4gNDUxOlx0XG4gNDUyOlx0XHRpZiAoc29ja2V0KVxuIDQ1MzpcdFx0XHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcbiA0NTQ6XHRcbiA0NTU6XHRcdHJ4cnBjX3B1cmdlX2NsaWVudF9jb25uZWN0aW9ucyhsb2NhbCk7XG4gNDU2Olx0XHRwYWdlX2ZyYWdfY2FjaGVfZHJhaW4oXHUwMDI2bG9jYWwtXHUwMDNldHhfYWxsb2MpO1xuIDQ1NzpcdH1cbiA0NTg6XHRcbiA0NTk6XHQvKlxuIDQ2MDpcdCAqIERlc3Ryb3kgYSBsb2NhbCBlbmRwb2ludCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBleHBpcmVzLlxuIDQ2MTpcdCAqL1xuIDQ2MjpcdHN0YXRpYyB2b2lkIHJ4cnBjX2xvY2FsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbiA0NjM6XHR7XG4gNDY0Olx0XHRzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHJ4cnBjX2xvY2FsLCByY3UpO1xuIDQ2NTpcdFxuIDQ2NjpcdFx0cnhycGNfc2VlX2xvY2FsKGxvY2FsLCByeHJwY19sb2NhbF9mcmVlKTtcbiA0Njc6XHRcdGtmcmVlKGxvY2FsKTtcbiA0Njg6XHR9XG4gNDY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzMKCQkJCQkJCW91dHB1dDogMjgyCgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIG9mIHRoaXMgcGF0Y2ggaGluZ2VzIG9uIGEga2V5IHNldCBvZiBjcml0ZXJpYSwgYW5kIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHJlcXVpcmVzIEtNU0FOIGF0dGVudGlvbi4KCkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBVRFAgZW5jYXBzdWxhdGlvbiwgcXVldWVpbmcsIGFuZCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgZGF0YSBsZWFrYWdlIG9yIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNoZWNraW5nIGZvciBwbGFjZXMgd2hlcmUga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBsYXRlciBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgcmVhZHMsIGFuZCBmaW5hbGx5LCBhbnl0aGluZyB0aGF0IGNvdWxkIHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIHJlYWRzLgoKQWZ0ZXIgYSBjbG9zZSBpbnNwZWN0aW9uIG9mIHRoaXMgcGF0Y2gsIEkmIzM5O3ZlIGNvbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCBub25lIG9mIHRoZXNlIHBvdGVudGlhbCBpc3N1ZXMgYXJlIHByZXNlbnQuIFRoZXJlJiMzOTtzIG5vIGRpcmVjdCBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCBhcmUgcHJvYmxlbWF0aWMsIGFuZCBubyBpc3N1ZXMgd2l0aCBleGlzdGluZyBidWZmZXIgcmVhZHMuCgpNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYW5kL29yIGZpeGVzIHByaW1hcmlseSBjb25jdXJyZW5jeSBpc3N1ZXMsIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgZHVyaW5nIHNvY2tldCBzaHV0ZG93biBhbmQgcGFja2V0IHJlY2VwdGlvbiwgYW5kIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyBwcm9ibGVtcyAoZXNwZWNpYWxseSBhcm91bmQgYnVmZmVyIGxpbWl0cykuIEkgY2FuIHNlZSB0aGUgaXNzdWVzIHRoYXQgYXJlIGZpeGVkIHdpdGggYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC0mZ3Q7c2ssIE5VTEwpYCAmIzQzOyBgc3luY2hyb25pemVfcmN1KClgLCBhbmQgc29ja2V0IG93bmVyc2hpcC9TS0IgY2xlYW51cCAoYHNrYl9vcnBoYW4oc2tiKWAgd2hlbiBkZXF1ZXVpbmcpLgoKVGhlc2UgYXJlIGFsbCBpc3N1ZXMgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHJlbWl0IG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIHJlZ2ltZS4gVGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UuIFRoaXMgbWVhbnMgdGhhdCwgYmFzZWQgb24gbXkgZXhwZXJ0IG9waW5pb24sIGEgJiMzNDtOZWVkc0tNU0FOJiMzNDsgZGVzaWduYXRpb24gaXMgbm90IG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcnhycGMgcGFja2V0IHJlY2VwdGlvbiBhbmQgc29ja2V0IHRlYXJkb3duIGxvZ2ljOlxuMS4gSW4gYHJ4cnBjX2VuY2FwX3JjdigpYCBhbmQgYHJ4cnBjX2lvX3RocmVhZCgpYCwgaXQgYWRkcyByZWNlaXZlIGJ1ZmZlciBhY2NvdW50aW5nIGNoZWNrcyAoYHNrX3JtZW1fc2NoZWR1bGVgLCBgc2tfcm1lbV9hbGxvY2ApLCBzZXRzIHNrYiBvd25lcnNoaXAgb24gdGhlIFVEUCBzb2NrZXQgKGBza2Jfc2V0X293bmVyX3JgKSwgZm9yY2VzIERTVCByZXRlbnRpb24gKGBza2JfZHN0X2ZvcmNlYCksIGFuZCBvcnBoYW5zIHNrYnMgKGBza2Jfb3JwaGFuYCkgdXBvbiBkZXF1ZXVlaW5nLlxuMi4gSW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoKWAsIGl0IHJlcGxhY2VzIGEgZGlyZWN0IHBvaW50ZXIgY2xlYXJhbmNlIHdpdGggYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhYCBmb2xsb3dlZCBieSBgc3luY2hyb25pemVfcmN1KClgLCBkZWZlcnJpbmcgYHNvY2tfcmVsZWFzZSgpYCB1bnRpbCBhZnRlciB0aGUgcXVldWVzIGFyZSBwdXJnZWQgdG8gYXZvaWQgdXNlLWFmdGVyLWZyZWUvcmFjZSBjb25kaXRpb25zIG9uIHNvY2tldCBkZXN0cnVjdGlvbi5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIG1vZGlmeSBjb3B5LXRvLXVzZXIgcGF0aHMsIG9yIGludHJvZHVjZSB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBhcmVhcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBza2IgYWNjb3VudGluZyBsZWFrcykgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByeHJwYyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBzb2NrZXQgdGVhcmRvd24gbG9naWM6XG4xLiBJbiBgcnhycGNfZW5jYXBfcmN2KClgIGFuZCBgcnhycGNfaW9fdGhyZWFkKClgLCBpdCBhZGRzIHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcgY2hlY2tzIChgc2tfcm1lbV9zY2hlZHVsZWAsIGBza19ybWVtX2FsbG9jYCksIHNldHMgc2tiIG93bmVyc2hpcCBvbiB0aGUgVURQIHNvY2tldCAoYHNrYl9zZXRfb3duZXJfcmApLCBmb3JjZXMgRFNUIHJldGVudGlvbiAoYHNrYl9kc3RfZm9yY2VgKSwgYW5kIG9ycGhhbnMgc2ticyAoYHNrYl9vcnBoYW5gKSB1cG9uIGRlcXVldWVpbmcuXG4yLiBJbiBgcnhycGNfZGVzdHJveV9sb2NhbCgpYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgcG9pbnRlciBjbGVhcmFuY2Ugd2l0aCBgcmN1X2Fzc2lnbl9za191c2VyX2RhdGFgIGZvbGxvd2VkIGJ5IGBzeW5jaHJvbml6ZV9yY3UoKWAsIGRlZmVycmluZyBgc29ja19yZWxlYXNlKClgIHVudGlsIGFmdGVyIHRoZSBxdWV1ZXMgYXJlIHB1cmdlZCB0byBhdm9pZCB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMgb24gc29ja2V0IGRlc3RydWN0aW9uLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgbW9kaWZ5IGNvcHktdG8tdXNlciBwYXRocywgb3IgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFBvdGVudGlhbCBidWdzIGluIHRoZXNlIGFyZWFzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHNrYiBhY2NvdW50aW5nIGxlYWtzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6MjIuMTQ2MjE4ODQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcyMzMwMTIxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19lbmNhcF9yY3ZcIixcbiAgICBcInJ4cnBjX2lvX3RocmVhZFwiLFxuICAgIFwicnhycGNfZGVzdHJveV9sb2NhbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcnhycGMgcGFja2V0IHJlY2VwdGlvbiBhbmQgc29ja2V0IHRlYXJkb3duIGxvZ2ljOlxcbjEuIEluIGByeHJwY19lbmNhcF9yY3YoKWAgYW5kIGByeHJwY19pb190aHJlYWQoKWAsIGl0IGFkZHMgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZyBjaGVja3MgKGBza19ybWVtX3NjaGVkdWxlYCwgYHNrX3JtZW1fYWxsb2NgKSwgc2V0cyBza2Igb3duZXJzaGlwIG9uIHRoZSBVRFAgc29ja2V0IChgc2tiX3NldF9vd25lcl9yYCksIGZvcmNlcyBEU1QgcmV0ZW50aW9uIChgc2tiX2RzdF9mb3JjZWApLCBhbmQgb3JwaGFucyBza2JzIChgc2tiX29ycGhhbmApIHVwb24gZGVxdWV1ZWluZy5cXG4yLiBJbiBgcnhycGNfZGVzdHJveV9sb2NhbCgpYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgcG9pbnRlciBjbGVhcmFuY2Ugd2l0aCBgcmN1X2Fzc2lnbl9za191c2VyX2RhdGFgIGZvbGxvd2VkIGJ5IGBzeW5jaHJvbml6ZV9yY3UoKWAsIGRlZmVycmluZyBgc29ja19yZWxlYXNlKClgIHVudGlsIGFmdGVyIHRoZSBxdWV1ZXMgYXJlIHB1cmdlZCB0byBhdm9pZCB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMgb24gc29ja2V0IGRlc3RydWN0aW9uLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBtb2RpZnkgY29weS10by11c2VyIHBhdGhzLCBvciBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgYXJlYXMgKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igc2tiIGFjY291bnRpbmcgbGVha3MpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmVyZW5jZSB0cmFja2luZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCByZWNlcHRpb24sIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBhY2NvdW50aW5nLCBza2Igb3duZXJzaGlwIGFuZCBvcnBoYW5pbmcsIGFuZCBsb2NhbCBzb2NrZXQgdGVhcmRvd24gUkNVIHN5bmNocm9uaXphdGlvbiBpbiB0aGUgQUZfUlhSUEMgbmV0d29yayBwcm90b2NvbCBzdWJzeXN0ZW0uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUnhSUEMgc29ja2V0cyBhbmQgbmV0d29yayBwYWNrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDoyMi4xNDYyMjQ1NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDY3NjgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRjYWIwYzgwZTM1YjE3Y2YzYTQ1YzQxOGMwYWQ0ODk3MzI4MWEyNmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAxMjowMDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcXG5pbmRleCBkYzUxODRhMmZhOWQxLi44Yjc3ZDEzNzg4OGVhIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9pb190aHJlYWQuY1xcbisrKyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xcbkBAIC00MSw4ICs0MSw2IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0aWYgKHNrYi1cXHUwMDNldHN0YW1wID09IDApXFxuIFxcdFxcdHNrYi1cXHUwMDNldHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTtcXG4gXFxuLVxcdHNrYi1cXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcXG4tXFx0cnhycGNfbmV3X3NrYihza2IsIHJ4cnBjX3NrYl9uZXdfZW5jYXBfcmN2KTtcXG4gXFx0cnhfcXVldWUgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3F1ZXVlO1xcbiAjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbiBcXHRpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8XFxuQEAgLTUyLDYgKzUwLDE5IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0fVxcbiAjZW5kaWZcXG4gXFxuK1xcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2dWRwX3NrLVxcdTAwM2Vza19ybWVtX2FsbG9jKSBcXHUwMDNlPSBSRUFEX09OQ0UodWRwX3NrLVxcdTAwM2Vza19yY3ZidWYpIHx8XFxuK1xcdCAgICAhc2tfcm1lbV9zY2hlZHVsZSh1ZHBfc2ssIHNrYiwgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpIHtcXG4rXFx0XFx0c2tfZHJvcHNfaW5jKHVkcF9zayk7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0c2tiLVxcdTAwM2VkZXYgPSBOVUxMO1xcbitcXHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xcbitcXHRza2JfZHN0X2ZvcmNlKHNrYik7XFxuK1xcbitcXHRza2ItXFx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XFxuK1xcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XFxuIFxcdHNrYl9xdWV1ZV90YWlsKHJ4X3F1ZXVlLCBza2IpO1xcbiBcXHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQ3MSw2ICs0ODIsOCBAQCBpbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXFxuIFxcdFxcdC8qIERpc3RyaWJ1dGUgcGFja2V0cyBhbmQgZXJyb3JzLiAqL1xcbiBcXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnJ4X3F1ZXVlKSkpIHtcXG4gXFx0XFx0XFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xcbitcXG4rXFx0XFx0XFx0c2tiX29ycGhhbihza2IpO1xcbiBcXHRcXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlbWFyaykge1xcbiBcXHRcXHRcXHRjYXNlIFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDpcXG4gXFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcmlvcml0eSA9IDA7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xcbmluZGV4IDE2OWY5ZGZkYWE3N2YuLjY2MDRmOWY5NTI2NjAgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXFxuKysrIGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXFxuQEAgLTQzNyw4ICs0MzcsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcXG4gXFx0aWYgKHNvY2tldCkge1xcbiBcXHRcXHRsb2NhbC1cXHUwMDNlc29ja2V0ID0gTlVMTDtcXG4gXFx0XFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xcbi1cXHRcXHRzb2NrZXQtXFx1MDAzZXNrLVxcdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xcbi1cXHRcXHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcXG4rXFx0XFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVxcdTAwM2VzaywgTlVMTCk7XFxuK1xcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcXG5AQCAtNDQ4LDYgKzQ0OCwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcXG4gXFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSk7XFxuICNlbmRpZlxcbiBcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4rXFxuK1xcdGlmIChzb2NrZXQpXFxuK1xcdFxcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xcbitcXG4gXFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcXG4gXFx0cGFnZV9mcmFnX2NhY2hlX2RyYWluKFxcdTAwMjZsb2NhbC1cXHUwMDNldHhfYWxsb2MpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjIyLjc1Nzg1MzMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMDAyMDU0NzA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2VuY2FwX3JjdlwiLFxuICAgIFwicnhycGNfaW9fdGhyZWFkXCIsXG4gICAgXCJyeHJwY19kZXN0cm95X2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiwgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcsIHNrYiBvd25lcnNoaXAgYW5kIG9ycGhhbmluZywgYW5kIGxvY2FsIHNvY2tldCB0ZWFyZG93biBSQ1Ugc3luY2hyb25pemF0aW9uIGluIHRoZSBBRl9SWFJQQyBuZXR3b3JrIHByb3RvY29sIHN1YnN5c3RlbS4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBSeFJQQyBzb2NrZXRzIGFuZCBuZXR3b3JrIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGNhYjBjODBlMzViMTdjZjNhNDVjNDE4YzBhZDQ4OTczMjgxYTI2ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTI6MDA6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvaW9fdGhyZWFkLmMgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbmluZGV4IGRjNTE4NGEyZmE5ZDEuLjhiNzdkMTM3ODg4ZWEgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbisrKyBiL25ldC9yeHJwYy9pb190aHJlYWQuY1xuQEAgLTQxLDggKzQxLDYgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHNrYi1cdTAwM2V0c3RhbXAgPT0gMClcbiBcdFx0c2tiLVx1MDAzZXRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7XG4gXG4tXHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbi1cdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gXHRyeF9xdWV1ZSA9IFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlO1xuICNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG4gXHRpZiAocnhycGNfaW5qZWN0X3J4X2RlbGF5IHx8XG5AQCAtNTIsNiArNTAsMTkgQEAgaW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuICNlbmRpZlxuIFxuK1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNnVkcF9zay1cdTAwM2Vza19ybWVtX2FsbG9jKSBcdTAwM2U9IFJFQURfT05DRSh1ZHBfc2stXHUwMDNlc2tfcmN2YnVmKSB8fFxuK1x0ICAgICFza19ybWVtX3NjaGVkdWxlKHVkcF9zaywgc2tiLCBza2ItXHUwMDNldHJ1ZXNpemUpKSB7XG4rXHRcdHNrX2Ryb3BzX2luYyh1ZHBfc2spO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRza2ItXHUwMDNlZGV2ID0gTlVMTDtcbitcdHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zayk7XG4rXHRza2JfZHN0X2ZvcmNlKHNrYik7XG4rXG4rXHRza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcbitcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XG4gXHRza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTtcbiBcdHdha2VfdXBfcHJvY2Vzcyhpb190aHJlYWQpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDcxLDYgKzQ4Miw4IEBAIGludCByeHJwY19pb190aHJlYWQodm9pZCAqZGF0YSlcbiBcdFx0LyogRGlzdHJpYnV0ZSBwYWNrZXRzIGFuZCBlcnJvcnMuICovXG4gXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZyeF9xdWV1ZSkpKSB7XG4gXHRcdFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xuK1xuK1x0XHRcdHNrYl9vcnBoYW4oc2tiKTtcbiBcdFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2VtYXJrKSB7XG4gXHRcdFx0Y2FzZSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ6XG4gXHRcdFx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSAwO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuYyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuaW5kZXggMTY5ZjlkZmRhYTc3Zi4uNjYwNGY5Zjk1MjY2MCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuKysrIGIvbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jXG5AQCAtNDM3LDggKzQzNyw4IEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKVxuIFx0aWYgKHNvY2tldCkge1xuIFx0XHRsb2NhbC1cdTAwM2Vzb2NrZXQgPSBOVUxMO1xuIFx0XHRrZXJuZWxfc29ja19zaHV0ZG93bihzb2NrZXQsIFNIVVRfUkRXUik7XG4tXHRcdHNvY2tldC1cdTAwM2Vzay1cdTAwM2Vza191c2VyX2RhdGEgPSBOVUxMO1xuLVx0XHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcbitcdFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVx1MDAzZXNrLCBOVUxMKTtcbitcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gXHR9XG4gXG4gXHQvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwYWNrZXRzIGNvbWluZyBpbiB0byB0aGVcbkBAIC00NDgsNiArNDQ4LDEwIEBAIHZvaWQgcnhycGNfZGVzdHJveV9sb2NhbChzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsKVxuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2bG9jYWwtXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xuICNlbmRpZlxuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2bG9jYWwtXHUwMDNlcnhfcXVldWUpO1xuK1xuK1x0aWYgKHNvY2tldClcbitcdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4rXG4gXHRyeHJwY19wdXJnZV9jbGllbnRfY29ubmVjdGlvbnMobG9jYWwpO1xuIFx0cGFnZV9mcmFnX2NhY2hlX2RyYWluKFx1MDAyNmxvY2FsLVx1MDAzZXR4X2FsbG9jKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDoyMi43NTc4NTU3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4OTEzOTQxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSWFJQQyBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBtb2RpZmllZC4gSSBzZWUgY2hhbmdlcyBpbiBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYCBhbmQgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AuIExldCdzIGJyZWFrIGl0IGRvd246XG5cbiogICAqKmByeHJwY19lbmNhcF9yY3ZgIGluIGBpb190aHJlYWQuY2A6KiogTG9va3MgbGlrZSB0aGV5J3JlIHR3ZWFraW5nIHRoZSBwYWNrZXQgcmVjZWl2ZSBwYXRoLiBJIHNlZSBtZW1vcnkgYWxsb2NhdGlvbiBjaGVja3MgcmVsYXRlZCB0byB0aGUgcmVjZWl2ZSBidWZmZXIgKGBza19ybWVtX3NjaGVkdWxlYCwgYHNrYl9zZXRfb3duZXJfcmAsIGBza2JfZHN0X2ZvcmNlYCksIHdoaWNoIGlzIHN0YW5kYXJkLiBBbmQsIGludGVyZXN0aW5nLCB0aGV5J3ZlIG1vdmVkIGBza2ItXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtgIGRvd24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoeTsgdGhpcyBjb3VsZCBiZSBhYm91dCB0aW1pbmcgb3Igb3JkZXJpbmcgb2YgcGFja2V0IHByb2Nlc3NpbmcuXG4qICAgKipgcnhycGNfaW9fdGhyZWFkYCBpbiBgaW9fdGhyZWFkLmNgOioqIEFoLCB0aGV5J3ZlIGFkZGVkIGBza2Jfb3JwaGFuKHNrYilgIHdoZW4gZGVxdWV1aW5nIHRoZSBTS0IuIFRoaXMgc3VnZ2VzdHMgdGhleSdyZSBleHBsaWNpdGx5IG1hbmFnaW5nIHRoZSBTS0IgbGlmZWN5Y2xlIHdoZW4gaXQncyBiZWluZyBwdWxsZWQgb2ZmIHRoZSBxdWV1ZS4gVGhpcyBpcyBnb29kIHRvIHNlZTsgZXhwbGljaXQgbWVtb3J5IG1hbmFnZW1lbnQgaXMga2V5IGluIGtlcm5lbCBjb2RlLlxuKiAgICoqYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGluIGBsb2NhbF9vYmplY3QuY2A6KiogSGVyZSwgdGhleSdyZSBjbGVhbmluZyB1cCBsb2NhbCBSWFJQQyBvYmplY3RzLCBzcGVjaWZpY2FsbHkgdGhlIHNvY2tldC4gSSBzZWUgYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cdTAwM2VzaywgTlVMTCk7IHN5bmNocm9uaXplX3JjdSgpO2AsIHdoaWNoIG1lYW5zIHRoZXkncmUgcHJvcGVybHkgdW5saW5raW5nIHRoZSBzb2NrZXQncyB1c2VyIGRhdGEgYW5kIHVzaW5nIFJDVSB0byBlbnN1cmUgc2FmZSBtZW1vcnkgcmVjbGFtYXRpb24uIFRoZSByZWxlYXNlIGFmdGVyIHB1cmdpbmcgcXVldWVzIGlzIHR5cGljYWwuXG5cbkknbGwgYWxzbyB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgQUZcXF9SWFJQQyBjb25maWd1cmF0aW9uIGlzIHN0aWxsIGNvcnJlY3QuIEknbGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBzbyBJIGNhbiBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjI5LjY0OTI1MjYxM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjIxNTc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZfUlhSUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvS2NvbmZpZy01LVxcbm5ldC9yeHJwYy9LY29uZmlnOjY6Y29uZmlnIEFGX1JYUlBDXFxubmV0L3J4cnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWc9MjU9aWYgQUZfUlhSUENcXG5uZXQvcnhycGMvS2NvbmZpZy0yNi1cXG5uZXQvcnhycGMvS2NvbmZpZzoyNzpjb25maWcgQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgUnhSUENcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy0zMy1cXG5uZXQvcnhycGMvS2NvbmZpZzozNDpjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1NcXG5uZXQvcnhycGMvS2NvbmZpZy0zNS1cXHRib29sIFxcXCJJbmplY3QgcGFja2V0IGxvc3MgaW50byBSeFJQQyBwYWNrZXQgc3RyZWFtXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctMzktXFxubmV0L3J4cnBjL0tjb25maWc6NDA6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbm5ldC9yeHJwYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIkluamVjdCBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb25cXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy00OS1cXG5uZXQvcnhycGMvS2NvbmZpZzo1MDpjb25maWcgQUZfUlhSUENfREVCVUdcXG5uZXQvcnhycGMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJSeFJQQyBkeW5hbWljIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnPTg5PWNvbmZpZyBSWFBFUkZcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTk1LVxcbm5ldC9yeHJwYy9LY29uZmlnOjk2OmNvbmZpZyBBRl9SWFJQQ19LVU5JVF9URVNUXFxubmV0L3J4cnBjL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIlJ4UlBDIGNyeXB0byBLVW5pdCB0ZXN0XFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjI5LjcwNTQ3NjU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5MTEyMzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQUZfUlhSUEMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQUZfUlhSUENgLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gdGhlIG5ldC9yeHJwYyBkaXJlY3RvcnkuIFRoYXQncyB0aGUgc3RhbmRhcmQgd2F5IHRoZXNlIHRoaW5ncyBhcmUgY29uZmlndXJlZCwgc28gaXQgc2hvdWxkIGxheSBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgcHJldHR5IGNsZWFybHkuIExldCdzIGdldCByaWdodCB0byBpdCBhbmQgY2hlY2sgYG5ldC9yeHJwYy9LY29uZmlnYCB0byBzZWUgd2hhdCdzIHdoYXQuIEhvcGVmdWxseSwgaXQncyB3ZWxsLWNvbW1lbnRlZCBhbmQgZWFzeSB0byBwYXJzZS4gU2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBwcmUtcmVxdWlzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc5NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjMxLjY5NjYwMTg1MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFJ4UlBDIHNlc3Npb24gc29ja2V0c1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQUZfUlhSUENcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJSeFJQQyBzZXNzaW9uIHNvY2tldHNcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0RFUyBpZiBSWEtBRFxcbiAgMTE6XFx0XFx0c2VsZWN0IEtFWVNcXG4gIDEyOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0ICBTYXkgWSBvciBNIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBSeFJQQyBzZXNzaW9uIHNvY2tldHMgKGp1c3RcXG4gIDE1OlxcdFxcdCAgdGhlIHRyYW5zcG9ydCBwYXJ0LCBub3QgdGhlIHByZXNlbnRhdGlvbiBwYXJ0OiAodW4pbWFyc2hhbGxpbmcgaXNcXG4gIDE2OlxcdFxcdCAgbGVmdCB0byB0aGUgYXBwbGljYXRpb24pLlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIFRoZXNlIGFyZSB1c2VkIGZvciBBRlMga2VybmVsIGZpbGVzeXN0ZW0gYW5kIHVzZXJzcGFjZSB1dGlsaXRpZXMuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgVGhpcyBtb2R1bGUgYXQgdGhlIG1vbWVudCBvbmx5IHN1cHBvcnRzIGNsaWVudCBvcGVyYXRpb25zIGFuZCBpc1xcbiAgMjE6XFx0XFx0ICBjdXJyZW50bHkgaW5jb21wbGV0ZS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0aWYgQUZfUlhSUENcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEFGX1JYUlBDX0lQVjZcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgUnhSUENcXFwiXFxuICAyOTpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBBRl9SWFJQQyB0byB1c2UgSVBWNiBVRFAgYXMgd2VsbCBhcyBJUFY0IFVEUCBhc1xcbiAgMzI6XFx0XFx0ICBpdHMgbmV0d29yayB0cmFuc3BvcnQuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfTE9TU1xcbiAgMzU6XFx0XFx0Ym9vbCBcXFwiSW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVxcXCJcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmplY3QgcGFja2V0IGxvc3MgYnkgZGlzY2FyZGluZyBzb21lIHJlY2VpdmVkIGFuZCBzb21lXFxuICAzODpcXHRcXHQgIHRyYW5zbWl0dGVkIHBhY2tldHMuXFxuICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6MzEuNjk2NjYyODYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU1Nzg3ODc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBSZWNlbnQgUnhSUEMgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZXNlIFJ4UlBDIGNoYW5nZXMuIFRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvcnhycGMvaW9fdGhyZWFkLmNgIGFuZCBgbmV0L3J4cnBjL2xvY2FsX29iamVjdC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgY29kZS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGV4YWN0IGltcGFjdCBvZiB0aGVzZSB1cGRhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDozMy4yNTQ1NTExM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvaW9fdGhyZWFkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICppb190aHJlYWQ7XFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XFxuICAzMzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDM0OlxcdFxcdFxcdHJldHVybiAwO1xcbiAgMzU6XFx0XFx0fVxcbiAgMzY6XFx0XFx0aW9fdGhyZWFkID0gUkVBRF9PTkNFKGxvY2FsLVxcdTAwM2Vpb190aHJlYWQpO1xcbiAgMzc6XFx0XFx0aWYgKCFpb190aHJlYWQpIHtcXG4gIDM4OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA0MDpcXHRcXHR9XFxuICA0MTpcXHRcXHRpZiAoc2tiLVxcdTAwM2V0c3RhbXAgPT0gMClcXG4gIDQyOlxcdFxcdFxcdHNrYi1cXHUwMDNldHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0cnhfcXVldWUgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3F1ZXVlO1xcbiAgNDU6XFx0I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG4gIDQ2OlxcdFxcdGlmIChyeHJwY19pbmplY3RfcnhfZGVsYXkgfHxcXG4gIDQ3OlxcdFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfZGVsYXlfcXVldWUpKSB7XFxuICA0ODpcXHRcXHRcXHRza2ItXFx1MDAzZXRzdGFtcCA9IGt0aW1lX2FkZF9tcyhza2ItXFx1MDAzZXRzdGFtcCwgcnhycGNfaW5qZWN0X3J4X2RlbGF5KTtcXG4gIDQ5OlxcdFxcdFxcdHJ4X3F1ZXVlID0gXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZTtcXG4gIDUwOlxcdFxcdH1cXG4gIDUxOlxcdCNlbmRpZlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnVkcF9zay1cXHUwMDNlc2tfcm1lbV9hbGxvYykgXFx1MDAzZT0gUkVBRF9PTkNFKHVkcF9zay1cXHUwMDNlc2tfcmN2YnVmKSB8fFxcbiAgNTQ6XFx0XFx0ICAgICFza19ybWVtX3NjaGVkdWxlKHVkcF9zaywgc2tiLCBza2ItXFx1MDAzZXRydWVzaXplKSkge1xcbiAgNTU6XFx0XFx0XFx0c2tfZHJvcHNfaW5jKHVkcF9zayk7XFxuICA1NjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDU3OlxcdFxcdFxcdHJldHVybiAwO1xcbiAgNTg6XFx0XFx0fVxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRza2ItXFx1MDAzZWRldiA9IE5VTEw7XFxuICA2MTpcXHRcXHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xcbiAgNjI6XFx0XFx0c2tiX2RzdF9mb3JjZShza2IpO1xcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRza2ItXFx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XFxuICA2NTpcXHRcXHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xcbiAgNjY6XFx0XFx0c2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7XFxuICA2NzpcXHRcXHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcXG4gIDY4OlxcdFxcdHJldHVybiAwO1xcbiAgNjk6XFx0fVxcbiAgNzA6XFx0XFxuICA3MTpcXHQvKlxcbiAgNzI6XFx0ICogSGFuZGxlIGFuIGVycm9yIHJlY2VpdmVkIG9uIHRoZSBsb2NhbCBlbmRwb2ludC5cXG4gIDczOlxcdCAqL1xcbiAgNzQ6XFx0dm9pZCByeHJwY19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKnNrKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0c3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbDtcXG4gIDc3OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6MzMuMjU0NjkwNjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDU1NjMxNjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGByeHJwY19kZXN0cm95X2xvY2FsYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgcGFydCBvZiB0aGUgUnhSUEMgc3lzdGVtIHdvcmtzLiBUaGUgY29yZSBvZiB0aGlzLCBhcyBJIHJlY2FsbCwgbXVzdCBpbnZvbHZlIHRoZSBkZXN0cnVjdGlvbiBvZiBhIGxvY2FsIG9iamVjdCwgc28gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgcnhycGNfZGVzdHJveV9sb2NhbGAuIFRoZSBmdW5jdGlvbiBpdHNlbGYgc2hvdWxkIGJlIGluIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgLiBMZXQncyBuYXZpZ2F0ZSB0aGVyZSBhbmQgc2VlIHdoYXQgaXQncyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6MzQuNzEwMzI1NDM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdFxcdF9lbnRlcihcXFwiJWRcXFwiLCBsb2NhbC1cXHUwMDNlZGVidWdfaWQpO1xcbiA0MjY6XFx0XFxuIDQyNzpcXHRcXHRsb2NhbC1cXHUwMDNlZGVhZCA9IHRydWU7XFxuIDQyODpcXHRcXG4gNDI5OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnJ4bmV0LVxcdTAwM2Vsb2NhbF9tdXRleCk7XFxuIDQzMDpcXHRcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNmxvY2FsLVxcdTAwM2VsaW5rKTtcXG4gNDMxOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cnhuZXQtXFx1MDAzZWxvY2FsX211dGV4KTtcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0cnhycGNfY2xlYW5fdXBfbG9jYWxfY29ubnMobG9jYWwpO1xcbiA0MzQ6XFx0XFx0cnhycGNfc2VydmljZV9jb25uZWN0aW9uX3JlYXBlcihcXHUwMDI2cnhuZXQtXFx1MDAzZXNlcnZpY2VfY29ubl9yZWFwZXIpO1xcbiA0MzU6XFx0XFx0QVNTRVJUKCFsb2NhbC1cXHUwMDNlc2VydmljZSk7XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdGlmIChzb2NrZXQpIHtcXG4gNDM4OlxcdFxcdFxcdGxvY2FsLVxcdTAwM2Vzb2NrZXQgPSBOVUxMO1xcbiA0Mzk6XFx0XFx0XFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xcbiA0NDA6XFx0XFx0XFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVxcdTAwM2VzaywgTlVMTCk7XFxuIDQ0MTpcXHRcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gNDQyOlxcdFxcdH1cXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0LyogQXQgdGhpcyBwb2ludCwgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgcGFja2V0cyBjb21pbmcgaW4gdG8gdGhlXFxuIDQ0NTpcXHRcXHQgKiBsb2NhbCBlbmRwb2ludC5cXG4gNDQ2OlxcdFxcdCAqL1xcbiA0NDc6XFx0I2lmZGVmIENPTkZJR19BRl9SWFJQQ19JTkpFQ1RfUlhfREVMQVlcXG4gNDQ4OlxcdFxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfZGVsYXlfcXVldWUpO1xcbiA0NDk6XFx0I2VuZGlmXFxuIDQ1MDpcXHRcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4gNDUxOlxcdFxcbiA0NTI6XFx0XFx0aWYgKHNvY2tldClcXG4gNDUzOlxcdFxcdFxcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRyeHJwY19wdXJnZV9jbGllbnRfY29ubmVjdGlvbnMobG9jYWwpO1xcbiA0NTY6XFx0XFx0cGFnZV9mcmFnX2NhY2hlX2RyYWluKFxcdTAwMjZsb2NhbC1cXHUwMDNldHhfYWxsb2MpO1xcbiA0NTc6XFx0fVxcbiA0NTg6XFx0XFxuIDQ1OTpcXHQvKlxcbiA0NjA6XFx0ICogRGVzdHJveSBhIGxvY2FsIGVuZHBvaW50IGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIGV4cGlyZXMuXFxuIDQ2MTpcXHQgKi9cXG4gNDYyOlxcdHN0YXRpYyB2b2lkIHJ4cnBjX2xvY2FsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4gNDYzOlxcdHtcXG4gNDY0OlxcdFxcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgcnhycGNfbG9jYWwsIHJjdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjM0LjcxMDUyOTYyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDg4MjA0MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJTyBUaHJlYWQgQm90dGxlbmVjayoqXG5cbk9rYXksIHNvIHdlJ3JlIHNlZWluZyBzb21lIHBlcmZvcm1hbmNlIGRpcHMsIGFuZCB0aGUgc3VzcGljaW9uIGlzIHN0YXJ0aW5nIHRvIGxlYW4gdG93YXJkcyBhbiBJL08gdGhyZWFkIGJvdHRsZW5lY2sgd2l0aGluIHRoZSBgcnhycGNfaW9fdGhyZWFkYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHJlY2VudCBjaGFuZ2VzIGFyb3VuZCBsaW5lIDQ4MCDigJMgSSByZW1lbWJlciB0aGUgbW9kaWZpY2F0aW9ucyB3ZSBtYWRlIHRvIHRoZSBkYXRhIGhhbmRsaW5nIHRoZXJlLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgc3BlY2lmaWMgYXJlYSBhbmQgc2VlIGlmIHdlJ3ZlIGludHJvZHVjZWQgYW55IHVuZXhwZWN0ZWQgbGF0ZW5jeSBvciBjb250ZW50aW9uLiBJdCdzIHRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgYW5kIGRpZyBpbnRvIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoYXQgbGluZSBhbmQgc2VlIHdoYXQgdGhlIGRhdGEgZmxvdyBhbmQgYW55IGJsb2NraW5nIGNhbGxzIGxvb2sgbGlrZS4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBzdGFsbHMgb3IgaW5lZmZpY2llbmNpZXMgYW5kIGRldGVybWluZSBpZiB0aGV5J3JlIGNvbnRyaWJ1dGluZyB0byB0aGUgcGVyZm9ybWFuY2UgaXNzdWVzIHdlJ3JlIHNlZWluZy4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZyZXNoIG1lbnRhbCBtb2RlbCBvZiB0aGF0IHRocmVhZCBhbmQgaG93IHRoYXQgYXJlYSBvZiBjb2RlIGV4ZWN1dGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjA2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDozNi43OTg3MzY1MTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3J4cnBjL2lvX3RocmVhZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2NTpcXHQjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbiA0NjY6XFx0XFx0XFx0bm93ID0ga3RpbWVfZ2V0X3JlYWwoKTtcXG4gNDY3OlxcdFxcdFxcdHdoaWxlICgoc2tiID0gc2tiX3BlZWsoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSkpKSB7XFxuIDQ2ODpcXHRcXHRcXHRcXHRpZiAoa3RpbWVfYmVmb3JlKG5vdywgc2tiLVxcdTAwM2V0c3RhbXApKVxcbiA0Njk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ3MDpcXHRcXHRcXHRcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcXG4gNDcxOlxcdFxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfcXVldWUsIHNrYik7XFxuIDQ3MjpcXHRcXHRcXHR9XFxuIDQ3MzpcXHQjZW5kaWZcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0XFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZSkpIHtcXG4gNDc2OlxcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZS5sb2NrKTtcXG4gNDc3OlxcdFxcdFxcdFxcdHNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfcXVldWUsIFxcdTAwMjZyeF9xdWV1ZSk7XFxuIDQ3ODpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZS5sb2NrKTtcXG4gNDc5OlxcdFxcdFxcdFxcdHRyYWNlX3J4cnBjX2lvdGhyZWFkX3J4KGxvY2FsLCBza2JfcXVldWVfbGVuKFxcdTAwMjZyeF9xdWV1ZSkpO1xcbiA0ODA6XFx0XFx0XFx0fVxcbiA0ODE6XFx0XFxuIDQ4MjpcXHRcXHRcXHQvKiBEaXN0cmlidXRlIHBhY2tldHMgYW5kIGVycm9ycy4gKi9cXG4gNDgzOlxcdFxcdFxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2cnhfcXVldWUpKSkge1xcbiA0ODQ6XFx0XFx0XFx0XFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xcbiA0ODU6XFx0XFxuIDQ4NjpcXHRcXHRcXHRcXHRza2Jfb3JwaGFuKHNrYik7XFxuIDQ4NzpcXHRcXHRcXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlbWFyaykge1xcbiA0ODg6XFx0XFx0XFx0XFx0Y2FzZSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ6XFxuIDQ4OTpcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gMDtcXG4gNDkwOlxcdFxcdFxcdFxcdFxcdGlmICghcnhycGNfaW5wdXRfcGFja2V0KGxvY2FsLCBza2IpKVxcbiA0OTE6XFx0XFx0XFx0XFx0XFx0XFx0cnhycGNfcmVqZWN0X3BhY2tldChsb2NhbCwgc2tiKTtcXG4gNDkyOlxcdFxcdFxcdFxcdFxcdHRyYWNlX3J4cnBjX3J4X2RvbmUoc2tiLVxcdTAwM2VtYXJrLCBza2ItXFx1MDAzZXByaW9yaXR5KTtcXG4gNDkzOlxcdFxcdFxcdFxcdFxcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9pbnB1dCk7XFxuIDQ5NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNDk1OlxcdFxcdFxcdFxcdGNhc2UgUlhSUENfU0tCX01BUktfRVJST1I6XFxuIDQ5NjpcXHRcXHRcXHRcXHRcXHRyeHJwY19pbnB1dF9lcnJvcihsb2NhbCwgc2tiKTtcXG4gNDk3OlxcdFxcdFxcdFxcdFxcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9lcnJvcl9yZXBvcnQpO1xcbiA0OTg6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ5OTpcXHRcXHRcXHRcXHRjYXNlIFJYUlBDX1NLQl9NQVJLX1NFUlZJQ0VfQ09OTl9TRUNVUkVEOlxcbiA1MDA6XFx0XFx0XFx0XFx0XFx0cnhycGNfaW5wdXRfY29ubl9ldmVudChzcC1cXHUwMDNlcG9rZV9jb25uLCBza2IpO1xcbiA1MDE6XFx0XFx0XFx0XFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXFx1MDAzZXBva2VfY29ubiwgcnhycGNfY29ubl9wdXRfcG9rZSk7XFxuIDUwMjpcXHRcXHRcXHRcXHRcXHRyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfY29ubl9zZWN1cmVkKTtcXG4gNTAzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1MDQ6XFx0XFx0XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6MzYuNzk4ODMzOTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3OTg4MzE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSeFJQQyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgUnhSUEMgc29ja2V0IHByb3RvY29sLCBzcGVjaWZpY2FsbHkgdGhlIG5ldHdvcmsgbGF5ZXIgKEFGX1JYUlBDKS4gVGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBgbmV0L3J4cnBjL2lvX3RocmVhZC5jYCBhbmQgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AuIEludGVyZXN0aW5nLiBBbmQgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzIGFyZSBgcnhycGNfZW5jYXBfcmN2YCwgYHJ4cnBjX2lvX3RocmVhZGAsIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbGAuXG5cblJpZ2h0LCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGV2YWx1YXRlIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gQUZfUlhSUEMgc29ja2V0cyBhcmUgZGlyZWN0bHkgY3JlYXRhYmxlLCBzbyB3ZSBjYW4gY29udHJvbCBpbnB1dCBhbmQgdHJpZ2dlciB0aGVzZSBmdW5jdGlvbnMuIFRoZXkgdXNlIFVEUCBlbmNhcHN1bGF0aW9uLCBoYW5kbGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcXVldWVzLCBtYW5hZ2Ugc29ja2V0IGJ1ZmZlcnMgKFNLQnMpLCBhbmQgaGF2ZSB0aGVpciBvd24gSS9PIHdvcmtlciB0aHJlYWRzIGFuZCBsb2NhbCBlbmRwb2ludCBsaWZlY3ljbGUuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbW9kaWZ5aW5nIGNyaXRpY2FsIGFyZWFzIG9mIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyDigJMgYHNrX3JtZW1fc2NoZWR1bGVgLCBgc2tiX3NldF9vd25lcl9yYCwgYHNrYl9vcnBoYW5gIOKAkyBhcyB3ZWxsIGFzIGRyb3AgdHJhY2tpbmcsIGRlc3RpbmF0aW9uIChkc3QpIGZvcmNpbmcsIGFuZCBSQ1Ugc3luY2hyb25pemF0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24uIFRoaXMgbWVhbnMgaXQgaW52b2x2ZXMgbWVtb3J5IG1hbmFnZW1lbnQsIG5ldHdvcmsgcHJvY2Vzc2luZywgYW5kIGNvbmN1cnJlbmN5IOKAkyBhbGwgcG90ZW50aWFsIGFyZWFzIGZvciB2dWxuZXJhYmlsaXRpZXMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcHJlcmVxdWlzaXRlcy4gV2UgbmVlZCBgQUZfUlhSUENgICh3aGljaCBkZXBlbmRzIG9uIGBJTkVUYCkgYW5kLCBvcHRpb25hbGx5LCBgQUZfUlhSUENfSVBWNmAuIE1ha2VzIHNlbnNlLlxuXG5JJ2xsIGZvY3VzIG9uIHRob3NlIGlkZW50aWZpZWQgc3ltYm9sczogYHJ4cnBjX2VuY2FwX3JjdmAsIGByeHJwY19pb190aHJlYWRgLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgLiBUaGV5IGFyZSB0aGUgbWFpbiB0YXJnZXQgZm9yIGluaXRpYWwgYW5hbHlzaXMuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGNyaXRpY2FsIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBBRl9SWFJQQyB0aGF0IGNvdWxkIGJlIGluZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBBbmQsIGFzIGEgc2FuaXR5IGNoZWNrLCBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGVyZSBgcnhycGNfZW5jYXBfcmN2YCBpcyBiZWluZyB1c2VkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDo0MC40Nzg3MjA4OTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY5OTk1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19lbmNhcF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xMjY4PXN0YXRpYyBpbmxpbmUgdm9pZCByeHJwY190bHBfaW5pdChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzctICovXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTI3ODppbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopO1xcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzktdm9pZCByeHJwY19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKik7XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM9MTI9c3RhdGljIGludCByeHJwY19pbnB1dF9wYWNrZXRfb25fY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNS0gKi9cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM6MjY6aW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNy17XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5My1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9SWFJQQztcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTk0OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5NS1cXHR0dW5jZmcuZW5jYXBfZXJyX3JjdiA9IHJ4cnBjX2VuY2FwX2Vycl9yY3Y7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjQwLjU5MDQyNjEwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM0Nzc4ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGlzIGlzIHNpbXBsZSBlbm91Z2guIFRoZSBzZXR1cCBpcyBxdWl0ZSBjbGVhci1jdXQuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBiYXNlbGluZS4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGV5J3ZlIGlkZW50aWZpZWQgYHJ4cnBjX2VuY2FwX3JjdmAsIGByeHJwY19pb190aHJlYWRgLCBhbmQgYHJ4cnBjX2Rlc3Ryb3lfbG9jYWxgIGFzIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gR29vZCBjaG9pY2VzLCB0aG9zZSBhcmUgZGVmaW5pdGVseSBwb3RlbnRpYWwgYXJlYXMgZm9yIGlucHV0IHZhbGlkYXRpb24gb3Igc3RhdGUgY29ycnVwdGlvbiBidWdzIHdpdGhpbiB0aGUgUnhSUEMgaW1wbGVtZW50YXRpb24uIEZpbmFsbHksIHRoZSBlbmFibGVkIGNvbmZpZ3MsIGBBRl9SWFJQQ2AgYW5kIGBJTkVUYCwgYXJlIHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgbmV0d29yay1mb2N1c2VkIGZ1enppbmcgY2FtcGFpZ24uIE1ha2VzIHNlbnNlIHdlJ3JlIGdvaW5nIGFmdGVyIHRoZSBSeFJQQyBuZXR3b3JrIHN0YWNrLiBOb3csIGxldCdzIGV4ZWN1dGUgYHNldC1yZXN1bHRzYCBhbmQgc2VlIGhvdyBpdCBwZXJmb3Jtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwMywiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDo0Mi42MjUyMDg5MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMxODg2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGX1JYUlBDXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfZW5jYXBfcmN2XCIsXG4gICAgXCJyeHJwY19pb190aHJlYWRcIixcbiAgICBcInJ4cnBjX2Rlc3Ryb3lfbG9jYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uLCBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZywgc2tiIG93bmVyc2hpcCBhbmQgb3JwaGFuaW5nLCBhbmQgbG9jYWwgc29ja2V0IHRlYXJkb3duIFJDVSBzeW5jaHJvbml6YXRpb24gaW4gdGhlIEFGX1JYUlBDIG5ldHdvcmsgcHJvdG9jb2wgc3Vic3lzdGVtLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFJ4UlBDIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX2VuY2FwX3JjdlwiLFxuICAgIFwicnhycGNfaW9fdGhyZWFkXCIsXG4gICAgXCJyeHJwY19kZXN0cm95X2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiwgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcsIHNrYiBvd25lcnNoaXAgYW5kIG9ycGhhbmluZywgYW5kIGxvY2FsIHNvY2tldCB0ZWFyZG93biBSQ1Ugc3luY2hyb25pemF0aW9uIGluIHRoZSBBRl9SWFJQQyBuZXR3b3JrIHByb3RvY29sIHN1YnN5c3RlbS4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBSeFJQQyBzb2NrZXRzIGFuZCBuZXR3b3JrIHBhY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjQyLjc3ODQwNDM0N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MDA4MTE2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDo0Mi43Nzg5NjcxMTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjYwMDI0NDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcnhycGMgcGFja2V0IHJlY2VwdGlvbiBhbmQgc29ja2V0IHRlYXJkb3duIGxvZ2ljOlxcbjEuIEluIGByeHJwY19lbmNhcF9yY3YoKWAgYW5kIGByeHJwY19pb190aHJlYWQoKWAsIGl0IGFkZHMgcmVjZWl2ZSBidWZmZXIgYWNjb3VudGluZyBjaGVja3MgKGBza19ybWVtX3NjaGVkdWxlYCwgYHNrX3JtZW1fYWxsb2NgKSwgc2V0cyBza2Igb3duZXJzaGlwIG9uIHRoZSBVRFAgc29ja2V0IChgc2tiX3NldF9vd25lcl9yYCksIGZvcmNlcyBEU1QgcmV0ZW50aW9uIChgc2tiX2RzdF9mb3JjZWApLCBhbmQgb3JwaGFucyBza2JzIChgc2tiX29ycGhhbmApIHVwb24gZGVxdWV1ZWluZy5cXG4yLiBJbiBgcnhycGNfZGVzdHJveV9sb2NhbCgpYCwgaXQgcmVwbGFjZXMgYSBkaXJlY3QgcG9pbnRlciBjbGVhcmFuY2Ugd2l0aCBgcmN1X2Fzc2lnbl9za191c2VyX2RhdGFgIGZvbGxvd2VkIGJ5IGBzeW5jaHJvbml6ZV9yY3UoKWAsIGRlZmVycmluZyBgc29ja19yZWxlYXNlKClgIHVudGlsIGFmdGVyIHRoZSBxdWV1ZXMgYXJlIHB1cmdlZCB0byBhdm9pZCB1c2UtYWZ0ZXItZnJlZS9yYWNlIGNvbmRpdGlvbnMgb24gc29ja2V0IGRlc3RydWN0aW9uLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBtb2RpZnkgY29weS10by11c2VyIHBhdGhzLCBvciBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgYXJlYXMgKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igc2tiIGFjY291bnRpbmcgbGVha3MpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmVyZW5jZSB0cmFja2luZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjYWIwYzgwZTM1YjE3Y2YzYTQ1YzQxOGMwYWQ0ODk3MzI4MWEyNmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDEyOjAwOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jIGIvbmV0L3J4cnBjL2lvX3RocmVhZC5jXG5pbmRleCBkYzUxODRhMmZhOWQxLi44Yjc3ZDEzNzg4OGVhIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2lvX3RocmVhZC5jXG4rKysgYi9uZXQvcnhycGMvaW9fdGhyZWFkLmNcbkBAIC00MSw4ICs0MSw2IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNldHN0YW1wID09IDApXG4gXHRcdHNrYi1cdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xuIFxuLVx0c2tiLVx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XG4tXHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuIFx0cnhfcXVldWUgPSBcdTAwMjZsb2NhbC1cdTAwM2VyeF9xdWV1ZTtcbiAjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxuIFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxuQEAgLTUyLDYgKzUwLDE5IEBAIGludCByeHJwY19lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnVkcF9zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdH1cbiAjZW5kaWZcbiBcbitcdGlmIChhdG9taWNfcmVhZChcdTAwMjZ1ZHBfc2stXHUwMDNlc2tfcm1lbV9hbGxvYykgXHUwMDNlPSBSRUFEX09OQ0UodWRwX3NrLVx1MDAzZXNrX3JjdmJ1ZikgfHxcbitcdCAgICAhc2tfcm1lbV9zY2hlZHVsZSh1ZHBfc2ssIHNrYiwgc2tiLVx1MDAzZXRydWVzaXplKSkge1xuK1x0XHRza19kcm9wc19pbmModWRwX3NrKTtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4rXHRza2Jfc2V0X293bmVyX3Ioc2tiLCB1ZHBfc2spO1xuK1x0c2tiX2RzdF9mb3JjZShza2IpO1xuK1xuK1x0c2tiLVx1MDAzZW1hcmsgPSBSWFJQQ19TS0JfTUFSS19QQUNLRVQ7XG4rXHRyeHJwY19uZXdfc2tiKHNrYiwgcnhycGNfc2tiX25ld19lbmNhcF9yY3YpO1xuIFx0c2tiX3F1ZXVlX3RhaWwocnhfcXVldWUsIHNrYik7XG4gXHR3YWtlX3VwX3Byb2Nlc3MoaW9fdGhyZWFkKTtcbiBcdHJldHVybiAwO1xuQEAgLTQ3MSw2ICs0ODIsOCBAQCBpbnQgcnhycGNfaW9fdGhyZWFkKHZvaWQgKmRhdGEpXG4gXHRcdC8qIERpc3RyaWJ1dGUgcGFja2V0cyBhbmQgZXJyb3JzLiAqL1xuIFx0XHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2cnhfcXVldWUpKSkge1xuIFx0XHRcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbitcbitcdFx0XHRza2Jfb3JwaGFuKHNrYik7XG4gXHRcdFx0c3dpdGNoIChza2ItXHUwMDNlbWFyaykge1xuIFx0XHRcdGNhc2UgUlhSUENfU0tCX01BUktfUEFDS0VUOlxuIFx0XHRcdFx0c2tiLVx1MDAzZXByaW9yaXR5ID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmMgYi9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbmluZGV4IDE2OWY5ZGZkYWE3N2YuLjY2MDRmOWY5NTI2NjAgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNcbisrKyBiL25ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1xuQEAgLTQzNyw4ICs0MzcsOCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdGlmIChzb2NrZXQpIHtcbiBcdFx0bG9jYWwtXHUwMDNlc29ja2V0ID0gTlVMTDtcbiBcdFx0a2VybmVsX3NvY2tfc2h1dGRvd24oc29ja2V0LCBTSFVUX1JEV1IpO1xuLVx0XHRzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbi1cdFx0c29ja19yZWxlYXNlKHNvY2tldCk7XG4rXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cdTAwM2VzaywgTlVMTCk7XG4rXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIFx0fVxuIFxuIFx0LyogQXQgdGhpcyBwb2ludCwgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgcGFja2V0cyBjb21pbmcgaW4gdG8gdGhlXG5AQCAtNDQ4LDYgKzQ0OCwxMCBAQCB2b2lkIHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbClcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcbiAjZW5kaWZcbiBcdHJ4cnBjX3B1cmdlX3F1ZXVlKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3F1ZXVlKTtcbitcbitcdGlmIChzb2NrZXQpXG4rXHRcdHNvY2tfcmVsZWFzZShzb2NrZXQpO1xuK1xuIFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcbiBcdHBhZ2VfZnJhZ19jYWNoZV9kcmFpbihcdTAwMjZsb2NhbC1cdTAwM2V0eF9hbGxvYyk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6NDIuNzc4OTY3OTg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MTgzMjMzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBob3cgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aCBzb2NrZXQgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgcmVxdWlyZXMgS01TQU4gc2NydXRpbnkgb3IgaWYgdGhlIGNvbmNlcm5zIGFyZSBtb3JlIHJlbGF0ZWQgdG8gc29ja2V0IGJ1ZmZlciBhY2NvdW50aW5nLCBSQ1UgbGlmZXRpbWUsIGFuZCByZWxhdGVkIG5ldHdvcmtpbmcgZWxlbWVudHMuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGluIGBuZXQvcnhycGMvaW9fdGhyZWFkLmNgLCBzcGVjaWZpY2FsbHkgYHJ4cnBjX2VuY2FwX3JjdigpYCwgSSBzZWUgc29tZSBpbnRlcmVzdGluZyBvcGVyYXRpb25zLiBJdCBhcHBlYXJzIHRvIGJlIGhhbmRsaW5nIFVEUCBzb2NrZXQgbWVtb3J5IGFsbG9jYXRpb24gd2l0aCBjaGVja3MgYWdhaW5zdCBgdWRwX3NrLVx1MDAzZXNrX3JtZW1fYWxsb2NgIGFuZCBgdWRwX3NrLVx1MDAzZXNrX3JjdmJ1ZmAsIHVzaW5nIGBza19ybWVtX3NjaGVkdWxlKClgIGFuZCB0aGVuIG1hbmFnaW5nIHRoZSBvd25lcnNoaXAgb2YgdGhlIGBza2JgLiBUaGUgc2V0dGluZyBvZiBgc2tiLVx1MDAzZWRldiA9IE5VTEw7YCwgZm9sbG93ZWQgYnkgYHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zayk7YCwgYHNrYl9kc3RfZm9yY2Uoc2tiKTtgLCBhbmQgZmluYWxseSBgc2tiX29ycGhhbihza2IpYCBpbiBgcnhycGNfaW9fdGhyZWFkYCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIHRyeWluZyB0byBlbnN1cmUgcHJvcGVyIGJ1ZmZlciBvd25lcnNoaXAgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJdCBmZWVscyBsaWtlIHRoZSB1c3VhbCB0cmlja2VyeSB0byBrZWVwIHRyYWNrIG9mIG5ldHdvcmsgYnVmZmVycy5cblxuVGhlbiwgbW92aW5nIHRvIGBuZXQvcnhycGMvbG9jYWxfb2JqZWN0LmNgIGFuZCBgcnhycGNfZGVzdHJveV9sb2NhbCgpYCwgSSBub3RpY2UgdGhlIHVzZSBvZiBgcmN1X2Fzc2lnbl9za191c2VyX2RhdGEoc29ja2V0LVx1MDAzZXNrLCBOVUxMKTtgIGFuZCBgc3luY2hyb25pemVfcmN1KClgLCB3aGljaCBpcyBhIGNsYXNzaWMgUkNVIHBhdHRlcm4gdG8gaGFuZGxlIHNvY2tldCB0ZWFyZG93biBhbmQgZW5zdXJlIGRhdGEgdmlzaWJpbGl0eSBkdXJpbmcgdGhlIGRlc3RydWN0aW9uIG9mIGByeHJwY19sb2NhbGAgb2JqZWN0cy4gRGVsYXlpbmcgYHNvY2tfcmVsZWFzZShzb2NrZXQpYCBhZnRlciBxdWV1ZSBwdXJnaW5nIGlzIGFsc28gY3J1Y2lhbCBmb3IgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMuXG5cblRoZSBvdmVyYWxsIGdvYWwgc2VlbXMgdG8gYmUgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSByeHJwYyBlbmNhcHN1bGF0aW9uIHJlY2VpdmUgcHJvY2VzcyBpbnZvbHZpbmcgc29ja2V0IG1lbW9yeSBhY2NvdW50aW5nLCBidWZmZXJpbmcsIGFuZCB0ZWFyZG93bi4gSXQgYXBwZWFycyB0byBiZSBhZGRyZXNzaW5nOlxuXG4xLiAgVURQIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyB1c2luZyBgc2tfcm1lbV9zY2hlZHVsZWAsIGBza2Jfc2V0X293bmVyX3JgLCBhbmQgYHNrYl9vcnBoYW5gLlxuMi4gIFNhZmUgdGVhcmRvd24gb2YgYHJ4cnBjX2xvY2FsYCBzb2NrZXRzIHdpdGggUkNVIHN5bmNocm9uaXphdGlvbiwgdGh1cyBlbnN1cmluZyBubyB1c2UgYWZ0ZXIgZnJlZSwgYW5kIHByb3BlciBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuXG5cblNvLCB0aGUgZm9jdXMgaGVyZSwgZm9yIG1lLCBpcyBlbnN1cmluZyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIG9yIGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciBldmVuIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEJhc2VkIG9uIHRoZXNlIG9wZXJhdGlvbnMsIGFuZCBhIHF1aWNrIHNjYW4gb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gcnhycGMsIEknbSBnb2luZyB0byBsZWFuIHRvd2FyZHMgdGhpcyBub3QgcmVxdWlyaW5nIEtNU0FOIGFuYWx5c2lzLiBUaGUgUkNVIHVzYWdlIGFuZCBidWZmZXIgb3duZXJzaGlwIHBhdHRlcm5zIHNlZW0gc291bmQuIEhvd2V2ZXIsIEknbGwgc3RpbGwgZG8gYSB0aG9yb3VnaCBjb2RlIHJldmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjQ5LjI5NzI5NDAyMloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NzQ1NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhycGNfZW5jYXBfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yeHJwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvYXItaW50ZXJuYWwuaD0xMjY4PXN0YXRpYyBpbmxpbmUgdm9pZCByeHJwY190bHBfaW5pdChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzctICovXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6MTI3ODppbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopO1xcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oLTEyNzktdm9pZCByeHJwY19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKik7XFxuLS1cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM9MTI9c3RhdGljIGludCByeHJwY19pbnB1dF9wYWNrZXRfb25fY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNS0gKi9cXG5uZXQvcnhycGMvaW9fdGhyZWFkLmM6MjY6aW50IHJ4cnBjX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqdWRwX3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9yeHJwYy9pb190aHJlYWQuYy0yNy17XFxuLS1cXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM9MTYyPXN0YXRpYyBpbnQgcnhycGNfb3Blbl9zb2NrZXQoc3RydWN0IHJ4cnBjX2xvY2FsICpsb2NhbCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5My1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IFVEUF9FTkNBUF9SWFJQQztcXG5uZXQvcnhycGMvbG9jYWxfb2JqZWN0LmM6MTk0OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSByeHJwY19lbmNhcF9yY3Y7XFxubmV0L3J4cnBjL2xvY2FsX29iamVjdC5jLTE5NS1cXHR0dW5jZmcuZW5jYXBfZXJyX3JjdiA9IHJ4cnBjX2VuY2FwX2Vycl9yY3Y7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjQ5LjM5NTk3NTc0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDg4NTM1MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSBwcm9jZXNzaW5nIHRob3NlIGxpbmVzIGluIGBuZXQvcnhycGMvaW9fdGhyZWFkLmNgOlxuXG4qKkFuYWx5emluZyByeHJwYyBJTyBUaHJlYWQgQ29kZTogSW5pdGlhbCBTY2FuIFx1MDAyNiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gYG5ldC9yeHJwYy9pb190aHJlYWQuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIElPIHRocmVhZCBvcGVyYXRlcyB3aXRoaW4gdGhlIHJ4cnBjIGNvbnRleHQsIHNvIEknbGwgYmUgZm9jdXNpbmcgb24gbGluZXMgMjUtNzAsIGFuZCB0aGVuIEknbGwganVtcCBmdXJ0aGVyIGRvd24gdG8gNDYwLTUwMC4gRmlyc3QsIGxldCBtZSBnZXQgYSBnZW5lcmFsIGlkZWEgb2YgdGhlIHNldCB1cCBoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIElPIHRocmVhZCwgdGhlIGluaXRpYWwgc2V0dXAgb2YgbG9ja3MsIGFueSB0aHJlYWQgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBtYW5hZ2VtZW50IG9mIHRoZSBldmVudCBsb29wLlxuXG5Ob3cgSSdsbCB6ZXJvIGluIG9uIGxpbmVzIDQ2MC01MDAuIFRoaXMgc2VjdGlvbiBpcyBwcm9iYWJseSB3aGVyZSB0aGUgY29yZSB3b3JrIGlzIGJlaW5nIHBlcmZvcm1lZCwgd2l0aGluIHRoZSBJTyB0aHJlYWQuIEdpdmVuIHRoYXQncyB3aGVyZSBJIGVuZGVkIHVwLCBJJ2QgZXhwZWN0IHRvIHNlZSB0aGUgY29kZSBoYW5kbGluZyBpbmJvdW5kIGFuZCBvdXRib3VuZCBkYXRhLCBoYW5kbGluZyBhbnkgaW50ZXJydXB0cywgY2hlY2tpbmcgZm9yIHRpbWVvdXRzLCBhbmQgbWFuYWdpbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGUuIEknbSBsb29raW5nIGZvciB0aGUgY3JpdGljYWwgcGF0aCB3aGVyZSB0aGUgSU8gaXMgYWN0dWFsbHkgaGFwcGVuaW5nLiBJIGV4cGVjdCB0aGUgY29kZSB0byBiZSByZWxhdGl2ZWx5IGVmZmljaWVudCBhbmQgb3B0aW1pemVkLCBnaXZlbiB0aGUgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzIG9mIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IHNvY2tldCBzdGF0ZXMsIGVycm9ycywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gaXQgdXNlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSByeHJwYyBzdGFjay4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaGFuZGxlcyBhbGwgdGhlIGV4cGVjdGVkIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEknbGwgZm9jdXMgb24gaG93IHRoZSBgaW9fdGhyZWFkX3dvcmtgIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdGhlciBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSByeHJwYyBzdWJzeXN0ZW0gYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgc3RhdGUgY2hhbmdlcyBhcmUuIEhvcGVmdWxseSwgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBjcml0aWNhbCBwaWVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjUyLjQ4NDUxNDI2NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvaW9fdGhyZWFkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0ICovXFxuICAyNjpcXHRpbnQgcnhycGNfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICp1ZHBfc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuICAyNzpcXHR7XFxuICAyODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpyeF9xdWV1ZTtcXG4gIDI5OlxcdFxcdHN0cnVjdCByeHJwY19sb2NhbCAqbG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHVkcF9zayk7XFxuICAzMDpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlvX3RocmVhZDtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0aWYgKHVubGlrZWx5KCFsb2NhbCkpIHtcXG4gIDMzOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgMzQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICAzNTpcXHRcXHR9XFxuICAzNjpcXHRcXHRpb190aHJlYWQgPSBSRUFEX09OQ0UobG9jYWwtXFx1MDAzZWlvX3RocmVhZCk7XFxuICAzNzpcXHRcXHRpZiAoIWlvX3RocmVhZCkge1xcbiAgMzg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICAzOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gIDQwOlxcdFxcdH1cXG4gIDQxOlxcdFxcdGlmIChza2ItXFx1MDAzZXRzdGFtcCA9PSAwKVxcbiAgNDI6XFx0XFx0XFx0c2tiLVxcdTAwM2V0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRyeF9xdWV1ZSA9IFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfcXVldWU7XFxuICA0NTpcXHQjaWZkZWYgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbiAgNDY6XFx0XFx0aWYgKHJ4cnBjX2luamVjdF9yeF9kZWxheSB8fFxcbiAgNDc6XFx0XFx0ICAgICFza2JfcXVldWVfZW1wdHkoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9kZWxheV9xdWV1ZSkpIHtcXG4gIDQ4OlxcdFxcdFxcdHNrYi1cXHUwMDNldHN0YW1wID0ga3RpbWVfYWRkX21zKHNrYi1cXHUwMDNldHN0YW1wLCByeHJwY19pbmplY3RfcnhfZGVsYXkpO1xcbiAgNDk6XFx0XFx0XFx0cnhfcXVldWUgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2RlbGF5X3F1ZXVlO1xcbiAgNTA6XFx0XFx0fVxcbiAgNTE6XFx0I2VuZGlmXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2dWRwX3NrLVxcdTAwM2Vza19ybWVtX2FsbG9jKSBcXHUwMDNlPSBSRUFEX09OQ0UodWRwX3NrLVxcdTAwM2Vza19yY3ZidWYpIHx8XFxuICA1NDpcXHRcXHQgICAgIXNrX3JtZW1fc2NoZWR1bGUodWRwX3NrLCBza2IsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKSB7XFxuICA1NTpcXHRcXHRcXHRza19kcm9wc19pbmModWRwX3NrKTtcXG4gIDU2OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA1ODpcXHRcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gTlVMTDtcXG4gIDYxOlxcdFxcdHNrYl9zZXRfb3duZXJfcihza2IsIHVkcF9zayk7XFxuICA2MjpcXHRcXHRza2JfZHN0X2ZvcmNlKHNrYik7XFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdHNrYi1cXHUwMDNlbWFyayA9IFJYUlBDX1NLQl9NQVJLX1BBQ0tFVDtcXG4gIDY1OlxcdFxcdHJ4cnBjX25ld19za2Ioc2tiLCByeHJwY19za2JfbmV3X2VuY2FwX3Jjdik7XFxuICA2NjpcXHRcXHRza2JfcXVldWVfdGFpbChyeF9xdWV1ZSwgc2tiKTtcXG4gIDY3OlxcdFxcdHdha2VfdXBfcHJvY2Vzcyhpb190aHJlYWQpO1xcbiAgNjg6XFx0XFx0cmV0dXJuIDA7XFxuICA2OTpcXHR9XFxuICA3MDpcXHRcXG4gIDcxOlxcdC8qXFxuICA3MjpcXHQgKiBIYW5kbGUgYW4gZXJyb3IgcmVjZWl2ZWQgb24gdGhlIGxvY2FsIGVuZHBvaW50LlxcbiAgNzM6XFx0ICovXFxuICA3NDpcXHR2b2lkIHJ4cnBjX2Vycm9yX3JlcG9ydChzdHJ1Y3Qgc29jayAqc2spXFxuICA3NTpcXHR7XFxuICA3NjpcXHRcXHRzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsO1xcbiAgNzc6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAgODA6XFx0XFx0bG9jYWwgPSByY3VfZGVyZWZlcmVuY2Vfc2tfdXNlcl9kYXRhKHNrKTtcXG4gIDgxOlxcdFxcdGlmICh1bmxpa2VseSghbG9jYWwpKSB7XFxuICA4MjpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gIDgzOlxcdFxcdFxcdHJldHVybjtcXG4gIDg0OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTI6MDA6NTIuNDg0NTk0NTk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzUxNzEzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBsb2NhbCBvYmplY3QgY29kZSBpbiB0aGUgUnhSUEMgaW1wbGVtZW50YXRpb24uIFRoZSBmYWN0IHRoYXQgSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYG5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY2Agc3VnZ2VzdHMgSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIGxvY2FsbHktYm91bmQgUlBDIHNlcnZpY2VzLCBhbmQgdGhlIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgbWFuYWdpbmcgdGhlbS4gSSdtIGxpa2VseSBpbnRlcmVzdGVkIGluIGhvdyByZXF1ZXN0cyBhcmUgZGlyZWN0ZWQgdG8gdGhvc2UgbG9jYWwgc2VydmljZXMsIGhvdyB0aGVpciByZXNwb25zZXMgYXJlIGhhbmRsZWQsIG9yIHBlcmhhcHMgc29tZXRoaW5nIGFib3V0IHJlc291cmNlIG1hbmFnZW1lbnQgb3Igc2VjdXJpdHkgY29udGV4dCB3aXRoaW4gdGhlIGxvY2FsIG9iamVjdCBhcmNoaXRlY3R1cmUuIEkgd29uZGVyIGlmIEknbSBsb29raW5nIGludG8gcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3Igc29tZSBvYnNjdXJlIGVkZ2UgY2FzZT8gS25vd2luZyB0aGUgZXhhY3QgcmVhc29uIGZvciB0aGUgaW52ZXN0aWdhdGlvbiB3b3VsZCBhbGxvdyBtZSB0byBiZXR0ZXIgdGFyZ2V0IG15IHNlYXJjaCB3aXRoaW4gdGhlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQ0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDo1NC41NTk3Njg2MDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9sb2NhbF9vYmplY3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzA6XFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZsb2NhbC1cXHUwMDNlbGluayk7XFxuIDQzMTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnJ4bmV0LVxcdTAwM2Vsb2NhbF9tdXRleCk7XFxuIDQzMjpcXHRcXG4gNDMzOlxcdFxcdHJ4cnBjX2NsZWFuX3VwX2xvY2FsX2Nvbm5zKGxvY2FsKTtcXG4gNDM0OlxcdFxcdHJ4cnBjX3NlcnZpY2VfY29ubmVjdGlvbl9yZWFwZXIoXFx1MDAyNnJ4bmV0LVxcdTAwM2VzZXJ2aWNlX2Nvbm5fcmVhcGVyKTtcXG4gNDM1OlxcdFxcdEFTU0VSVCghbG9jYWwtXFx1MDAzZXNlcnZpY2UpO1xcbiA0MzY6XFx0XFxuIDQzNzpcXHRcXHRpZiAoc29ja2V0KSB7XFxuIDQzODpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlc29ja2V0ID0gTlVMTDtcXG4gNDM5OlxcdFxcdFxcdGtlcm5lbF9zb2NrX3NodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTtcXG4gNDQwOlxcdFxcdFxcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cXHUwMDNlc2ssIE5VTEwpO1xcbiA0NDE6XFx0XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDQ0MjpcXHRcXHR9XFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdFxcdC8qIEF0IHRoaXMgcG9pbnQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIHBhY2tldHMgY29taW5nIGluIHRvIHRoZVxcbiA0NDU6XFx0XFx0ICogbG9jYWwgZW5kcG9pbnQuXFxuIDQ0NjpcXHRcXHQgKi9cXG4gNDQ3OlxcdCNpZmRlZiBDT05GSUdfQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxuIDQ0ODpcXHRcXHRyeHJwY19wdXJnZV9xdWV1ZShcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X2RlbGF5X3F1ZXVlKTtcXG4gNDQ5OlxcdCNlbmRpZlxcbiA0NTA6XFx0XFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNmxvY2FsLVxcdTAwM2VyeF9xdWV1ZSk7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdGlmIChzb2NrZXQpXFxuIDQ1MzpcXHRcXHRcXHRzb2NrX3JlbGVhc2Uoc29ja2V0KTtcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0cnhycGNfcHVyZ2VfY2xpZW50X2Nvbm5lY3Rpb25zKGxvY2FsKTtcXG4gNDU2OlxcdFxcdHBhZ2VfZnJhZ19jYWNoZV9kcmFpbihcXHUwMDI2bG9jYWwtXFx1MDAzZXR4X2FsbG9jKTtcXG4gNDU3OlxcdH1cXG4gNDU4OlxcdFxcbiA0NTk6XFx0LypcXG4gNDYwOlxcdCAqIERlc3Ryb3kgYSBsb2NhbCBlbmRwb2ludCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBleHBpcmVzLlxcbiA0NjE6XFx0ICovXFxuIDQ2MjpcXHRzdGF0aWMgdm9pZCByeHJwY19sb2NhbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuIDQ2MzpcXHR7XFxuIDQ2NDpcXHRcXHRzdHJ1Y3QgcnhycGNfbG9jYWwgKmxvY2FsID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHJ4cnBjX2xvY2FsLCByY3UpO1xcbiA0NjU6XFx0XFxuIDQ2NjpcXHRcXHRyeHJwY19zZWVfbG9jYWwobG9jYWwsIHJ4cnBjX2xvY2FsX2ZyZWUpO1xcbiA0Njc6XFx0XFx0a2ZyZWUobG9jYWwpO1xcbiA0Njg6XFx0fVxcbiA0Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEyOjAwOjU0LjU1OTk3MjAxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODE5MjE4NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoIGhpbmdlcyBvbiBhIGtleSBzZXQgb2YgY3JpdGVyaWEsIGFuZCBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyByZXF1aXJlcyBLTVNBTiBhdHRlbnRpb24uXG5cbkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBVRFAgZW5jYXBzdWxhdGlvbiwgcXVldWVpbmcsIGFuZCBzb2NrZXQgbWVtb3J5IGFjY291bnRpbmcuIEknbSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciBkYXRhIGxlYWthZ2Ugb3IgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIEknbSBjaGVja2luZyBmb3IgcGxhY2VzIHdoZXJlIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBjb25kaXRpb25hbCBsb2dpYyByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGZpZWxkIHJlYWRzLCBhbmQgZmluYWxseSwgYW55dGhpbmcgdGhhdCBjb3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyByZWFkcy5cblxuQWZ0ZXIgYSBjbG9zZSBpbnNwZWN0aW9uIG9mIHRoaXMgcGF0Y2gsIEkndmUgY29tZSB0byB0aGUgY29uY2x1c2lvbiB0aGF0IG5vbmUgb2YgdGhlc2UgcG90ZW50aWFsIGlzc3VlcyBhcmUgcHJlc2VudC4gVGhlcmUncyBubyBkaXJlY3QgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgYXJlIHByb2JsZW1hdGljLCBhbmQgbm8gaXNzdWVzIHdpdGggZXhpc3RpbmcgYnVmZmVyIHJlYWRzLlxuXG5NeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYW5kL29yIGZpeGVzIHByaW1hcmlseSBjb25jdXJyZW5jeSBpc3N1ZXMsIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgZHVyaW5nIHNvY2tldCBzaHV0ZG93biBhbmQgcGFja2V0IHJlY2VwdGlvbiwgYW5kIHNvY2tldCBtZW1vcnkgYWNjb3VudGluZyBwcm9ibGVtcyAoZXNwZWNpYWxseSBhcm91bmQgYnVmZmVyIGxpbWl0cykuIEkgY2FuIHNlZSB0aGUgaXNzdWVzIHRoYXQgYXJlIGZpeGVkIHdpdGggYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKHNvY2tldC1cdTAwM2VzaywgTlVMTClgICsgYHN5bmNocm9uaXplX3JjdSgpYCwgYW5kIHNvY2tldCBvd25lcnNoaXAvU0tCIGNsZWFudXAgKGBza2Jfb3JwaGFuKHNrYilgIHdoZW4gZGVxdWV1aW5nKS5cblxuVGhlc2UgYXJlIGFsbCBpc3N1ZXMgdGhhdCBhcmUgd2VsbCB3aXRoaW4gdGhlIHJlbWl0IG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIHJlZ2ltZS4gVGhlcmUgaXMgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UuIFRoaXMgbWVhbnMgdGhhdCwgYmFzZWQgb24gbXkgZXhwZXJ0IG9waW5pb24sIGEgXCJOZWVkc0tNU0FOXCIgZGVzaWduYXRpb24gaXMgbm90IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ3MywiT3V0cHV0VG9rZW5zIjoyODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMjowMDo1OS4zNzkxOTMzOTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJ4cnBjIHBhY2tldCByZWNlcHRpb24gYW5kIHNvY2tldCB0ZWFyZG93biBsb2dpYzpcXG4xLiBJbiBgcnhycGNfZW5jYXBfcmN2KClgIGFuZCBgcnhycGNfaW9fdGhyZWFkKClgLCBpdCBhZGRzIHJlY2VpdmUgYnVmZmVyIGFjY291bnRpbmcgY2hlY2tzIChgc2tfcm1lbV9zY2hlZHVsZWAsIGBza19ybWVtX2FsbG9jYCksIHNldHMgc2tiIG93bmVyc2hpcCBvbiB0aGUgVURQIHNvY2tldCAoYHNrYl9zZXRfb3duZXJfcmApLCBmb3JjZXMgRFNUIHJldGVudGlvbiAoYHNrYl9kc3RfZm9yY2VgKSwgYW5kIG9ycGhhbnMgc2ticyAoYHNrYl9vcnBoYW5gKSB1cG9uIGRlcXVldWVpbmcuXFxuMi4gSW4gYHJ4cnBjX2Rlc3Ryb3lfbG9jYWwoKWAsIGl0IHJlcGxhY2VzIGEgZGlyZWN0IHBvaW50ZXIgY2xlYXJhbmNlIHdpdGggYHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhYCBmb2xsb3dlZCBieSBgc3luY2hyb25pemVfcmN1KClgLCBkZWZlcnJpbmcgYHNvY2tfcmVsZWFzZSgpYCB1bnRpbCBhZnRlciB0aGUgcXVldWVzIGFyZSBwdXJnZWQgdG8gYXZvaWQgdXNlLWFmdGVyLWZyZWUvcmFjZSBjb25kaXRpb25zIG9uIHNvY2tldCBkZXN0cnVjdGlvbi5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgbW9kaWZ5IGNvcHktdG8tdXNlciBwYXRocywgb3IgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFBvdGVudGlhbCBidWdzIGluIHRoZXNlIGFyZWFzIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHNrYiBhY2NvdW50aW5nIGxlYWtzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByeHJwYyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBzb2NrZXQgdGVhcmRvd24gbG9naWM6XFxuMS4gSW4gYHJ4cnBjX2VuY2FwX3JjdigpYCBhbmQgYHJ4cnBjX2lvX3RocmVhZCgpYCwgaXQgYWRkcyByZWNlaXZlIGJ1ZmZlciBhY2NvdW50aW5nIGNoZWNrcyAoYHNrX3JtZW1fc2NoZWR1bGVgLCBgc2tfcm1lbV9hbGxvY2ApLCBzZXRzIHNrYiBvd25lcnNoaXAgb24gdGhlIFVEUCBzb2NrZXQgKGBza2Jfc2V0X293bmVyX3JgKSwgZm9yY2VzIERTVCByZXRlbnRpb24gKGBza2JfZHN0X2ZvcmNlYCksIGFuZCBvcnBoYW5zIHNrYnMgKGBza2Jfb3JwaGFuYCkgdXBvbiBkZXF1ZXVlaW5nLlxcbjIuIEluIGByeHJwY19kZXN0cm95X2xvY2FsKClgLCBpdCByZXBsYWNlcyBhIGRpcmVjdCBwb2ludGVyIGNsZWFyYW5jZSB3aXRoIGByY3VfYXNzaWduX3NrX3VzZXJfZGF0YWAgZm9sbG93ZWQgYnkgYHN5bmNocm9uaXplX3JjdSgpYCwgZGVmZXJyaW5nIGBzb2NrX3JlbGVhc2UoKWAgdW50aWwgYWZ0ZXIgdGhlIHF1ZXVlcyBhcmUgcHVyZ2VkIHRvIGF2b2lkIHVzZS1hZnRlci1mcmVlL3JhY2UgY29uZGl0aW9ucyBvbiBzb2NrZXQgZGVzdHJ1Y3Rpb24uXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIG1vZGlmeSBjb3B5LXRvLXVzZXIgcGF0aHMsIG9yIGludHJvZHVjZSB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBhcmVhcyAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBza2IgYWNjb3VudGluZyBsZWFrcykgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdlns[1] Phase: Succeeded StartedAt: 2026-09-06 12:01:12 +0000 UTC FinishedAt: 2026-09-06 12:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 12:01:12 +0000 UTC FinishedAt: 2026-09-06 12:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2] Phase: Succeeded StartedAt: 2026-09-06 12:01:12 +0000 UTC FinishedAt: 2026-09-06 15:46:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 12:01:12 +0000 UTC FinishedAt: 2026-09-06 15:46:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 12:01:12 +0000 UTC FinishedAt: 2026-09-06 12:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 12:01:12 +0000 UTC FinishedAt: 2026-09-06 12:01:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdlns/series-workflowvdlns-convert-artifact-1161130526/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 12:01:25 +0000 UTC FinishedAt: 2026-09-06 12:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 12:01:25 +0000 UTC FinishedAt: 2026-09-06 12:19:28 +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:*512c2770-22fc-40fe-9d14-5dbb697b157e,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-workflowvdlns/series-workflowvdlns-convert-artifact-1161130526/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": "6d5da294-4826-4c0d-9ec8-33e97f94205a", "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-workflowvdlns/series-workflowvdlns-build-action-1669543684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 12:01:25 +0000 UTC FinishedAt: 2026-09-06 12:19:18 +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:*512c2770-22fc-40fe-9d14-5dbb697b157e,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-workflowvdlns/series-workflowvdlns-convert-artifact-1161130526/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": "6d5da294-4826-4c0d-9ec8-33e97f94205a", "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-workflowvdlns/series-workflowvdlns-build-action-1669543684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 12:19:28 +0000 UTC FinishedAt: 2026-09-06 12:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 12:19:28 +0000 UTC FinishedAt: 2026-09-06 12:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 12:19:28 +0000 UTC FinishedAt: 2026-09-06 12:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 12:19:28 +0000 UTC FinishedAt: 2026-09-06 12:19:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdlns/series-workflowvdlns-convert-artifact-575417553/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 12:19:38 +0000 UTC FinishedAt: 2026-09-06 12:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 12:19:38 +0000 UTC FinishedAt: 2026-09-06 12:21:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6d5da294-4826-4c0d-9ec8-33e97f94205a,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-workflowvdlns/series-workflowvdlns-build-action-1669543684/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-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 12:21:23 +0000 UTC FinishedAt: 2026-09-06 12:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 12:21:23 +0000 UTC FinishedAt: 2026-09-06 12:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 12:21:23 +0000 UTC FinishedAt: 2026-09-06 12:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 12:21:23 +0000 UTC FinishedAt: 2026-09-06 12:39:09 +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:*512c2770-22fc-40fe-9d14-5dbb697b157e,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-workflowvdlns/series-workflowvdlns-convert-artifact-575417553/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": "95bd7f40-4e28-454a-9a02-5be9e0b32ef3", "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-workflowvdlns/series-workflowvdlns-build-action-928387741/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 12:21:23 +0000 UTC FinishedAt: 2026-09-06 12:39:00 +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:*512c2770-22fc-40fe-9d14-5dbb697b157e,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-workflowvdlns/series-workflowvdlns-convert-artifact-575417553/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": "95bd7f40-4e28-454a-9a02-5be9e0b32ef3", "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-workflowvdlns/series-workflowvdlns-build-action-928387741/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 12:39:09 +0000 UTC FinishedAt: 2026-09-06 12:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 12:39:09 +0000 UTC FinishedAt: 2026-09-06 12:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 12:39:09 +0000 UTC FinishedAt: 2026-09-06 12:40:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 12:39:09 +0000 UTC FinishedAt: 2026-09-06 12:40:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*95bd7f40-4e28-454a-9a02-5be9e0b32ef3,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-workflowvdlns/series-workflowvdlns-build-action-928387741/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-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 12:40:51 +0000 UTC FinishedAt: 2026-09-06 15:46:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 12:40:51 +0000 UTC FinishedAt: 2026-09-06 15:46:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"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:*6d5da294-4826-4c0d-9ec8-33e97f94205a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*95bd7f40-4e28-454a-9a02-5be9e0b32ef3,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-workflowvdlns/series-workflowvdlns-build-action-1669543684/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-workflowvdlns/series-workflowvdlns-build-action-928387741/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 12:40:51 +0000 UTC FinishedAt: 2026-09-06 12:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 12:40:51 +0000 UTC FinishedAt: 2026-09-06 12:40:56 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"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-workflowvdlns/series-workflowvdlns-convert-artifact-2662252038/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 12:40:51 +0000 UTC FinishedAt: 2026-09-06 12:40:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 12:40:51 +0000 UTC FinishedAt: 2026-09-06 12:40:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 12:40:51 +0000 UTC FinishedAt: 2026-09-06 12:40:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 12:41:01 +0000 UTC FinishedAt: 2026-09-06 15:46:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdlns[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rxrpc_encap_rcv","rxrpc_io_thread","rxrpc_destroy_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","INET"],"series_id":"9b57bc5e-a9a5-4d06-804d-8931902269d7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 12:41:01 +0000 UTC FinishedAt: 2026-09-06 15:46:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6d5da294-4826-4c0d-9ec8-33e97f94205a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*95bd7f40-4e28-454a-9a02-5be9e0b32ef3,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-workflowvdlns/series-workflowvdlns-build-action-1669543684/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-workflowvdlns/series-workflowvdlns-build-action-928387741/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-workflowvdlns/series-workflowvdlns-convert-artifact-2662252038/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,}