Name: series-workflow8q82d Phase: Succeeded StartedAt: 2026-09-06 11:17:27 +0000 UTC FinishedAt: 2026-09-06 15:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[0] Phase: Succeeded StartedAt: 2026-09-06 11:17:27 +0000 UTC FinishedAt: 2026-09-06 11:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 11:17:27 +0000 UTC FinishedAt: 2026-09-06 11:56:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3ccdb07813829ba9487273e75d1cb238cfa774c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3ccdb07813829ba9487273e75d1cb238cfa774c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG" ], "series_id": "cd97a7b8-210c-42f4-98fa-ddd875683581" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sk_psock_verdict_apply", "sk_psock_strp_read", "sk_psock_verdict_recv", "sk_psock_verdict_data_ready" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICAgJiMzNDtza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBza19wc29ja192ZXJkaWN0X2FwcGx5KClgIGluIGBuZXQvY29yZS9za21zZy5jYCB0byB0cmVhdCBpbmdyZXNzIHJlZGlyZWN0aW9uIHRvIHRoZSBzb2NrZXQmIzM5O3Mgb3duIHBzb2NrIChgdmVyZGljdCA9PSBfX1NLX1JFRElSRUNUIFx1MDAyNlx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcdTAwMjZcdTAwMjYgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVx1MDAzZXNrYCkgYXMgYF9fU0tfUEFTU2AuXG5cblRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjb250cm9sIGZsb3cgY2hhbmdlIHRoYXQgZGlyZWN0cyBzZWxmLXJlZGlyZWN0ZWQgc2ticyB0byB0aGUgYF9fU0tfUEFTU2AgY29kZSBwYXRoIChgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZigpYCkgcmF0aGVyIHRoYW4gY2FsbGluZyBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbHRlciBidWZmZXIgbGVuZ3RoL29mZnNldCBib3VuZHMgaW4gYW4gdW5pbml0aWFsaXplZCBtYW5uZXIsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgYnVmZmVyIGxpZmVjeWNsZSBpc3N1ZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcuIFRodXMsIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB2ZXJkaWN0IGFwcGxpY2F0aW9uIGxvZ2ljIGluIEJQRiBzb2NrbWFwL3Bzb2NrIG1lc3NhZ2UgaGFuZGxpbmcgKG5ldC9jb3JlL3NrbXNnLmMpLCB0cmVhdGluZyBpbmdyZXNzIHJlZGlyZWN0IHRvIHRoZSBzZWxmIHNvY2tldCBhcyBhIHBhc3MgdmVyZGljdC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nL0JQRiBwYXRoIGlzIGRpcmVjdGx5IGV4ZXJjaXNlYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgdmlhIHNvY2ttYXAgdmVyZGljdCBwcm9ncmFtcyBhbmQgc29ja2V0IEkvTy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQwMDdlMzdhNTgwOTA0NmUyNTg4YzM5MjViZDVkYmU1Mzg3YmM4MDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjU1OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi5kZjM4NWE1YTk2MWU4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTEwMDAsNiAmIzQzOzEwMDAsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpbnQgZXJyID0gMDtcbiBcdHUzMiBsZW4sIG9mZjtcbiBcbiYjNDM7XHRpZiAodmVyZGljdCA9PSBfX1NLX1JFRElSRUNUIFx1MDAyNlx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVx1MDAzZXNrKVxuJiM0MztcdFx0dmVyZGljdCA9IF9fU0tfUEFTUztcbiYjNDM7XG4gXHRzd2l0Y2ggKHZlcmRpY3QpIHtcbiBcdGNhc2UgX19TS19QQVNTOlxuIFx0XHRlcnIgPSAtRUlPO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICAgJiMzNDtza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHZlcmRpY3QgYXBwbGljYXRpb24gbG9naWMgaW4gQlBGIHNvY2ttYXAvcHNvY2sgbWVzc2FnZSBoYW5kbGluZyAobmV0L2NvcmUvc2ttc2cuYyksIHRyZWF0aW5nIGluZ3Jlc3MgcmVkaXJlY3QgdG8gdGhlIHNlbGYgc29ja2V0IGFzIGEgcGFzcyB2ZXJkaWN0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcvQlBGIHBhdGggaXMgZGlyZWN0bHkgZXhlcmNpc2VhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB2aWEgc29ja21hcCB2ZXJkaWN0IHByb2dyYW1zIGFuZCBzb2NrZXQgSS9PLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDAwN2UzN2E1ODA5MDQ2ZTI1ODhjMzkyNWJkNWRiZTUzODdiYzgwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuYwppbmRleCAyNTIxYjY0M2ZhMDVkLi5kZjM4NWE1YTk2MWU4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za21zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmMKQEAgLTEwMDAsNiAmIzQzOzEwMDAsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJaW50IGVyciA9IDA7CiAJdTMyIGxlbiwgb2ZmOwogCiYjNDM7CWlmICh2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgJmFtcDsmYW1wOyBza2JfYnBmX2luZ3Jlc3Moc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stJmd0O3NrKQomIzQzOwkJdmVyZGljdCA9IF9fU0tfUEFTUzsKJiM0MzsKIAlzd2l0Y2ggKHZlcmRpY3QpIHsKIAljYXNlIF9fU0tfUEFTUzoKIAkJZXJyID0gLUVJTzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFNvY2tldCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL3NrbXNnLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRpbmcgYSBuZXcgY29uZGl0aW9uYWwgc3RhdGVtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCByaWdodCBiZWZvcmUgdGhlIHZlcmRpY3Qgc3dpdGNoLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzOgoKYGBgYwoJaWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCAmYW1wOyZhbXA7IHNrYl9icGZfaW5ncmVzcyhza2IpICZhbXA7JmFtcDsKCSAgICBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stJmd0O3NrKQoJCXZlcmRpY3QgPSBfX1NLX1BBU1M7CmBgYAoKRXNzZW50aWFsbHksIGl0JiMzOTtzIGNoZWNraW5nIGZvciBhIHJlZGlyZWN0IHZlcmRpY3QgaW4gYSBzcGVjaWZpYyBzY2VuYXJpby4gSXQgbG9va3MgbGlrZSBpdCBpcyBjaGVja2luZyBpZiB0aGUgcGFja2V0IGlzIGJlaW5nIHJlZGlyZWN0ZWQgdXNpbmcgQlBGIChgc2tiX2JwZl9pbmdyZXNzYCwgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgKSwgYW5kIGFsc28gdGhhdCBpdCYjMzk7cyBiZWluZyByZWRpcmVjdGVkIGJhY2sgdG8gdGhlIHNhbWUgc29ja2V0IChgcHNvY2stJmd0O3NrYCkuIElmIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG1ldCwgdGhlIHZlcmRpY3QgaXMgY2hhbmdlZCBmcm9tIGBfX1NLX1JFRElSRUNUYCB0byBgX19TS19QQVNTYC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IHRyaWdnZXJzIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8/IFdoYXQgaXMgdGhlICppbnRlbmRlZCogYmVoYXZpb3IgYmVpbmcgbW9kaWZpZWQgaGVyZT8gV2hhdCBpcyB0aGUgKmN1cnJlbnQqIGJlaGF2aW9yIHdpdGhvdXQgdGhpcyBjaGFuZ2U/CgpJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byB1c2Ugc29tZSB0b29scyB0byBkbyB0aGlzOgoKMS4gICoqQ29kZSBFeHBsb3JhdGlvbjoqKiBJJiMzOTtsbCB1c2UgdG9vbHMgbGlrZSBgZ3JlcHBlcmAgb3IganVzdCByZWFkaW5nIHRoZSBmaWxlIHdpdGggYHJlYWQtZmlsZWAgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGhvdyBgc2tiX2JwZl9pbmdyZXNzYCBhbmQgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgIHdvcmssIGFuZCB0aGUgcm9sZXMgb2YgYHNrX3Bzb2NrYCBhbmQgYHNrYmAgaW4gdGhlIHByb2Nlc3MuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgKmNhbGxlZCogYW5kIHdoYXQgZGljdGF0ZXMgdGhlIGB2ZXJkaWN0YCB2YWx1ZSB0aGF0JiMzOTtzIGJlaW5nIHBhc3NlZCBpbi4KMi4gICoqQ29uZmlndXJhdGlvbiBDaGVjazoqKiBJJiMzOTtsbCBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhpcyBwYXRoLiBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNvZGUgcGF0aCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGNlcnRhaW4gc2V0dGluZ3MuIEtub3dpbmcgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgKG9yIHdoaWNoIGRpc2FibGUgdGhpcykgaXMgY3JpdGljYWwuCjMuICAqKlJlYWNoYWJpbGl0eToqKiBGaW5hbGx5LCBJJiMzOTtsbCBhc3Nlc3MgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIG5ldyBjb2RlLiBJcyB0aGlzIGEgaG90IHBhdGgsIG9yIGEgcmFyZWx5LXRha2VuIG9uZT8gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBiZWhhdmlvciBpcyB0cmlnZ2VyZWQgaW4gYSBwcmFjdGljYWwgc2V0dGluZy4gUGVyaGFwcyB0cmFjaW5nIG9yIHNvbWUgb3RoZXIgYW5hbHlzaXMgaXMgaW4gb3JkZXIuIFRoaXMgd2lsbCBoZWxwIG1lIGV2YWx1YXRlIHRoZSBjaGFuZ2UmIzM5O3MgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBzeXN0ZW0gYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRcdFx0cmV0dXJuIC1FSU87XG4gOTgxOlx0XHR9XG4gOTgyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5ODM6XHRcdGlmICghc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29ja19vdGhlciwgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcbiA5ODQ6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5ODU6XHRcdFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xuIDk4NjpcdFx0XHRzb2NrX2Ryb3AoZnJvbS1cdTAwM2Vzaywgc2tiKTtcbiA5ODc6XHRcdFx0cmV0dXJuIC1FSU87XG4gOTg4Olx0XHR9XG4gOTg5Olx0XG4gOTkwOlx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcbiA5OTE6XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwc29ja19vdGhlci1cdTAwM2V3b3JrLCAwKTtcbiA5OTI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4gOTkzOlx0XHRyZXR1cm4gMDtcbiA5OTQ6XHR9XG4gOTk1Olx0XG4gOTk2Olx0c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gOTk3Olx0XHRcdFx0XHQgIGludCB2ZXJkaWN0KVxuIDk5ODpcdHtcbiA5OTk6XHRcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcbjEwMDA6XHRcdGludCBlcnIgPSAwO1xuMTAwMTpcdFx0dTMyIGxlbiwgb2ZmO1xuMTAwMjpcdFxuMTAwMzpcdFx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcdTAwMjZcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2XG4xMDA0Olx0XHQgICAgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVx1MDAzZXNrKVxuMTAwNTpcdFx0XHR2ZXJkaWN0ID0gX19TS19QQVNTO1xuMTAwNjpcdFxuMTAwNzpcdFx0c3dpdGNoICh2ZXJkaWN0KSB7XG4xMDA4Olx0XHRjYXNlIF9fU0tfUEFTUzpcbjEwMDk6XHRcdFx0ZXJyID0gLUVJTztcbjEwMTA6XHRcdFx0c2tfb3RoZXIgPSBwc29jay1cdTAwM2VzaztcbjEwMTE6XHRcdFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxuMTAxMjpcdFx0XHQgICAgIXNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKVxuMTAxMzpcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4xMDE0Olx0XG4xMDE1Olx0XHRcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcbjEwMTY6XHRcbjEwMTc6XHRcdFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxuMTAxODpcdFx0XHQgKiBpbnRvIHRoZSBtc2cgcXVldWUuIElmIGl0cyBub3QgZW1wdHkgd2UgaGF2ZSB0b1xuMTAxOTpcdFx0XHQgKiBxdWV1ZSB3b3JrIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IE9PTyBkYXRhLiBPdGhlcndpc2UsXG4xMDIwOlx0XHRcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcbjEwMjE6XHRcdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4xMDIyOlx0XHRcdCAqL1xuMTAyMzpcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkge1xuMTAyNDpcdFx0XHRcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4xMDI1Olx0XHRcdFx0b2ZmID0gMDtcbjEwMjY6XHRcdFx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xuMTAyNzpcdFx0XHRcdFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xuMTAyODpcdFxuMTAyOTpcdFx0XHRcdFx0b2ZmID0gc3RtLVx1MDAzZW9mZnNldDtcbjEwMzA6XHRcdFx0XHRcdGxlbiA9IHN0bS1cdTAwM2VmdWxsX2xlbjtcbjEwMzE6XHRcdFx0XHR9XG4xMDMyOlx0XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpO1xuMTAzMzpcdFx0XHR9XG4xMDM0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEwMzU6XHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19sb2NrKTtcbjEwMzY6XHRcdFx0XHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcbjEwMzc6XHRcdFx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiLCBza2IpO1xuMTAzODpcdFx0XHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBzb2NrLVx1MDAzZXdvcmssIDApO1xuMTAzOTpcdFx0XHRcdFx0ZXJyID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIGFuZCBDb25maWd1cmF0aW9uIG9mIGBuZXQvY29yZS9za21zZy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYG5ldC9jb3JlL3NrbXNnLmNgLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gYSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50LCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBmb3IgaXQgdG8gY29tcGlsZSBhbmQgZnVuY3Rpb24gY29ycmVjdGx5IHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyDigJMgd2hhdCBLY29uZmlnIG9wdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgaXRzIGluY2x1c2lvbiwgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBsaWJyYXJpZXMgaXQgcmVsaWVzIHVwb24uIEVzc2VudGlhbGx5LCBJJiMzOTttIGFpbWluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGJ1aWxkLXRpbWUgZW52aXJvbm1lbnQuIFRoYXQgc2hvdWxkIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBob3cgSSBjYW4sIHBlcmhhcHMsIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3Igd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB0aGUgTWFrZWZpbGUgc3RydWN0dXJlIGluIHRoYXQgZGlyZWN0b3J5Li4uIHByb2JhYmx5IGBuZXQvY29yZS9NYWtlZmlsZWAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBhcmNoaXRlY3R1cmUgb3Iga2VybmVsIHZlcnNpb24gYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza21zZ1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT00Mz1vYmotJChDT05GSUdfRkFJTE9WRVIpICYjNDM7PSBmYWlsb3Zlci5vXG5uZXQvY29yZS9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gc2ttc2cub1xubmV0L2NvcmUvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc29ja19tYXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFJlbGV2YW50IEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbiBjb25jZXJuaW5nIEJQRiBhbmQgbmV0d29ya2luZyBjYXBhYmlsaXRpZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHNvbWUga2V5IG9wdGlvbnMuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gVGhpcyBvbmUgc2VlbXMgaW1wb3J0YW50IOKAkyBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHNvY2tldCBtZXNzYWdpbmcsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIGZvciBhbnkgQlBGLXJlbGF0ZWQgbmV0d29yayBhbmFseXNpcyBvciBtYW5pcHVsYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGRhdGEgcGF0aHMgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBCUEYgcHJvZ3JhbXMuCgpOZXh0LCBJJiMzOTtsbCB0dXJuIG15IGF0dGVudGlvbiB0byBgQ09ORklHX0JQRl9TWVNDQUxMYC4gT2J2aW91c2x5LCB0aGlzIGlzIGNydWNpYWwuIEl0IGRpcmVjdGx5IGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBCUEYgc3lzdGVtIGNhbGwgaXMgZW5hYmxlZCBhdCBhbGwuIFdpdGhvdXQgdGhpcywgdGhlcmUmIzM5O3Mgbm8gd2F5IGFueSBCUEYgcHJvZ3JhbSBjYW4gYmUgbG9hZGVkIG9yIGV4ZWN1dGVkLiBBIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNldHRpbmcsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0IGlzIGFic29sdXRlbHkgZXNzZW50aWFsLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgLiBUaGlzIHNvdW5kcyBpbnRlcmVzdGluZy4gSSBzdXNwZWN0IHRoaXMgaXMgcmVsYXRlZCB0byBzdHJlYW0gcGFyc2luZyBjYXBhYmlsaXRpZXMgd2l0aGluIEJQRiwgcG9zc2libHkgb2ZmZXJpbmcgZnVuY3Rpb25hbGl0eSB0byBhbmFseXplIGFuZCBtYW5pcHVsYXRlIGRhdGEgc3RyZWFtcyBhdCBhIGxvd2VyIGxldmVsIHRoYW4gc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgdGhpcyBjb25maWd1cmF0aW9uIGlzIGtleSB0byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyByZWxhdGlvbnNoaXBzIHdpdGggdGhlIG90aGVyIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgZW5hYmxlIHRoZSBkZXNpcmVkIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXG4tLVxubmV0L0tjb25maWctNDc4LVxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTQ4MC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjQ2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRGVjaXBoZXJpbmcgdGhlIE5FVF9TT0NLX01TRyBTZWxlY3RvcioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBtZW50YWxseSB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzIHRoYXQgYXJlIGdvaW5nIHRvIHBpY2sgdGhlIGBORVRfU09DS19NU0dgIHNlbGVjdG9yLiBXaGF0IGNvbnRleHQgYXJlIHdlIGluPyBJcyBpdCBhIGtlcm5lbCBtb2R1bGU/IFVzZXItc3BhY2UgYXBwbGljYXRpb24/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIHZhc3RseSBkaWZmZXJlbnQuIEkmIzM5O20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zIGluIG15IGhlYWQ6IG5ldHdvcmsgc3RhY2sgaW50ZXJhY3Rpb25zLCBzb2NrZXQgaW1wbGVtZW50YXRpb25zLCBtZXNzYWdlIHF1ZXVpbmcsIGFuZCBzbyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBzZWxlY3Rpb24gaXMgKmhhcHBlbmluZyogYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCAqd2h5Ki4gVGhpcyBzZWxlY3Rpb24gbWVjaGFuaXNtIOKAkyB3aGV0aGVyIGl0JiMzOTtzIGFuIGV2ZW50IGxvb3AsIGludGVycnVwdCBoYW5kbGVyLCBvciBzb21lIG90aGVyIHBvbGxpbmcgc3RyYXRlZ3kg4oCTIGlzIGtleS4gSSYjMzk7bSBhbHJlYWR5IGVudmlzaW9uaW5nIHRoZSBwb3NzaWJsZSBib3R0bGVuZWNrcyBhbmQgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgYXJpc2UgZGVwZW5kaW5nIG9uIHRoZSBjaG9zZW4gY29udGV4dC4gSXMgdGhpcyBhIG5ldyBwaWVjZSBvZiBjb2RlLCBvciBhbSBJIGRlYnVnZ2luZyBhbiBleGlzdGluZyBzeXN0ZW0/IFRoZSBpbXBsaWNhdGlvbnMgY2hhbmdlIHRoZSBhcHByb2FjaCBJJiMzOTtsbCB0YWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVUX1NPQ0tfTVNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0zMT1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzctXHRzZWxlY3QgQklOQVJZX1BSSU5URlxua2VybmVsL2JwZi9LY29uZmlnOjM4Olx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZy0zOS1cdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuLS1cbm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZzozODY6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjg4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYE5FVF9TT0NLX01TR2AgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgZmxvdyBvZiBgTkVUX1NPQ0tfTVNHYCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkga25vdyBpdCYjMzk7cyBzZWxlY3RlZCDigJMgb3IgYXQgbGVhc3QgaW52b2x2ZWQg4oCTIGJ5IHRoaW5ncyBsaWtlIGBCUEZfU1lTQ0FMTGAgd2hlbiBgTkVUYCBpcyBlbmFibGVkLCBgQlBGX1NUUkVBTV9QQVJTRVJgLCBhbmQgZXZlbiBUTFMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcmVhbGx5IHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSB2ZXJkaWN0IGlzIGFwcGxpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2FsbGluZyBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIEnigJltIGdvaW5nIHRvIGV4YW1pbmUgdGhlIGNhbGwgZ3JhcGggYW5kIG90aGVyIGZ1bmN0aW9ucyBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgdG8gc2VlIHRoZSBlbnRpcmUgbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja192ZXJkaWN0X2FwcGx5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9OTU4PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTk5NS1cbm5ldC9jb3JlL3NrbXNnLmM6OTk2OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy05OTctXHRcdFx0XHQgIGludCB2ZXJkaWN0KVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA3OT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTExMDItXHR9XG5uZXQvY29yZS9za21zZy5jOjExMDM6XHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XG5uZXQvY29yZS9za21zZy5jLTExMDQtb3V0OlxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIwMj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjI1LVx0fVxubmV0L2NvcmUvc2ttc2cuYzoxMjI2Olx0cmV0ID0gc2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgYHNrX3Bzb2NrYCBWZXJkaWN0IEFwcGxpY2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIEkgc2VlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kLCBpdCYjMzk7cyBzY29wZWQgYW5kIHN1Z2dlc3RzIGEgc3BlY2lmaWMsIGludGVybmFsIHB1cnBvc2Ugd2l0aGluIHRoaXMgYHNrX3Bzb2NrYCBtb2R1bGUuIFRoZSBjbHVlcyB0ZWxsIG1lIGl0JiMzOTtzIGNhbGxlZCBieSBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAuIFRoYXQmIzM5O3MgdGhlIGltcG9ydGFudCBiaXQgdG8gdW5kZXJzdGFuZC4gU28sIHdoZXJlIGFyZSB0aG9zZSB0d28gZnVuY3Rpb25zLCBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgYmVpbmcgY2FsbGVkIG9yIGVzdGFibGlzaGVkPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRob3NlIHBvaW50cy4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSBzdXNwZWN0IHRoZWlyIHNldHVwIGFuZCBjYWxsIHNpdGVzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoaXMgd2hvbGUgdmVyZGljdCBhcHBsaWNhdGlvbiBpcyBhY3R1YWxseSAqZG9pbmcqIHdpdGhpbiB0aGUgYHNrX3Bzb2NrYCBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIGFueSByZWxhdGVkIGNvbmRpdGlvbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9yZWN2fHNrX3Bzb2NrX3N0cnBfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTEwNjE9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA3OC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jOjEwNzk6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za21zZy5jLTEwODAte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTEwNy1cbm5ldC9jb3JlL3NrbXNnLmM6MTEwODpzdGF0aWMgaW50IHNrX3Bzb2NrX3N0cnBfcmVhZF9kb25lKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpXG5uZXQvY29yZS9za21zZy5jLTExMDkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTE0Nz1pbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTExNTEtXHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnBfY2FsbGJhY2tzIGNiID0ge1xubmV0L2NvcmUvc2ttc2cuYzoxMTUyOlx0XHQucmN2X21zZ1x0PSBza19wc29ja19zdHJwX3JlYWQsXG5uZXQvY29yZS9za21zZy5jOjExNTM6XHRcdC5yZWFkX3NvY2tfZG9uZVx0PSBza19wc29ja19zdHJwX3JlYWRfZG9uZSxcbm5ldC9jb3JlL3NrbXNnLmMtMTE1NC1cdFx0LnBhcnNlX21zZ1x0PSBza19wc29ja19zdHJwX3BhcnNlLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTE5Nz1zdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMDEtXG5uZXQvY29yZS9za21zZy5jOjEyMDI6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMjAzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEyMzQ9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNTAtXG5uZXQvY29yZS9za21zZy5jOjEyNTE6XHRjb3BpZWQgPSBvcHMtXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XG5uZXQvY29yZS9za21zZy5jLTEyNTItXHRpZiAoY29waWVkIFx1MDAzZT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODcxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBTb2NrbWFwL1NvY2toYXNoIFZlcmRpY3QgTG9naWMgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggdGFyZ2V0cyBhIGNyaXRpY2FsIHBpZWNlIG9mIEJQRiBzb2NrbWFwL3NvY2toYXNoIGZ1bmN0aW9uYWxpdHkgd2l0aGluIGBuZXQvY29yZS9za21zZy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBjb25jZXJucyB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBCUEYgcHJvZ3JhbSAodXNpbmcgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgIG9yIHNpbWlsYXIpIGF0dGFjaGVkIHRvIGEgc29ja21hcC9zb2NraGFzaCBtYWtlcyBhIHZlcmRpY3Qgb24gaW5jb21pbmcgc29ja2V0IGRhdGEuIFRoZSBjb3JlIGxvZ2ljIGludm9sdmVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIEJQRiBwcm9ncmFtIHJlZGlyZWN0cyBkYXRhIHRvIHRoZSBpbmdyZXNzIG9mIHRoZSAqc2FtZSogc29ja2V0LCBvciByZXR1cm5zIGBfX1NLX1JFRElSRUNUYCB3aXRoIGluZ3Jlc3MgdG8gYHBzb2NrLSZndDtza2AuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgcmVhbG0gb2Ygc3RhbmRhcmQgbmV0d29ya2luZyBhbmQgQlBGLiBJdCYjMzk7cyBmdWxseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIGBicGYoKWAsIGBzb2NrZXQoKWAsIGBzZW5kKClgLCBhbmQgYHJlY3YoKWAuIFRoZSBrZXkgaXMgcmVkaXJlY3RpbmcgZGF0YSAqYmFjayogdG8gdGhlIG9yaWdpbmFsIHNvY2tldC4KCkZpcnN0LCBsZXQmIzM5O3MgdmVyaWZ5IG15IGFzc3VtcHRpb25zLiBUaGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSBhcHBlYXIgdG8gYmUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCAob3IgcG9zc2libHkgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAsIGFuZCBgQ09ORklHX05FVGApLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBpbiB0aGUgS2NvbmZpZyBmaWxlcy4KClRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZnVuY3Rpb24sIHdoaWNoLCBmb3J0dW5hdGVseSwgaXNuJiMzOTt0IGlubGluZSwgc28gSSBjYW4gZWFzaWx5IHRyYWNlIGl0LiBJIHNlZSB0aGF0IGl0JiMzOTtzIGEgc3RhdGljIEMgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL3NrbXNnLmNgLCB3aXRoIGNhbGxlcnMgaW5jbHVkaW5nIGBza19wc29ja19zdHJwX3JlYWRgLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYW5kIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLgoKTm93LCBsZXQmIzM5O3MgZW5zdXJlIEkmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBiYXNlcy4KCjEuICAqKlJlYWNoYWJsZT8qKiBZZXMsIEJQRiBzb2NrbWFwL3NvY2toYXNoIHdpdGggc3RyZWFtL3NrYiB2ZXJkaWN0IHByb2dyYW1zIHJlZGlyZWN0aW5nIHRyYWZmaWMgdG8gc29ja2V0cyBpcyB2ZXJ5IHRlc3RhYmxlIGZyb20gdXNlci1zcGFjZSwgYW5kIGhhcyBiZWVuIGFjdGl2ZWx5IGZ1enplZCBieSBzeXprYWxsZXIuIE5vIHN1cnByaXNlcyB0aGVyZS4KMi4gICoqTG9naWMgQ2hhbmdlOioqIFRoZSBjcnV4IGlzIHRoaXM6IGlmIGEgQlBGIHZlcmRpY3QgcHJvZ3JhbSwgdXNpbmcgYEJQRl9GX0lOR1JFU1NgIHJlZGlyZWN0cyB0byB0aGUgKnNhbWUqIHNvY2tldCAoYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay0mZ3Q7c2tgKSwgdGhlIHZlcmRpY3Qgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBgX19TS19QQVNTYC4gVGhpcyBieXBhc3NlcyB0aGUgcmVkaXJlY3Rpb24gYW5kIHNlbmRzIGl0IGRpcmVjdGx5IHRvIHRoZSBzb2NrZXQgaW5ncmVzcy4KMy4gICoqRm9jdXMgU3ltYm9sczoqKiBJJiMzOTttIGtlZXBpbmcgbXkgZXllIG9uIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAuCjQuICAqKkVuYWJsZSBDb25maWd1cmF0aW9uczoqKiBgQlBGX1NZU0NBTExgLCBgQlBGX1NUUkVBTV9QQVJTRVJgLCBhbmQgYE5FVF9TT0NLX01TR2AuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhvc2UgY29uZmlnIG5hbWVzIGFuZCBhbnkgZGVwZW5kZW5jaWVzLgoKRXNzZW50aWFsbHksIHRoaXMgaXMgYSB0YXJnZXRlZCB0d2VhayB0byBob3cgc29ja21hcC9zb2NraGFzaCByZWRpcmVjdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaW5ncmVzcyBwYXRoIG9mIHRoZSBzYW1lIHNvY2tldC4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB0byB2ZXJpZnkgYW5kIHRlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoQlBGX1NUUkVBTV9QQVJTRVJ8QlBGX1NZU0NBTEx8TkVUX1NPQ0tfTVNHKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxuLS1cbm5ldC9LY29uZmlnLTM2MC1cbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnLTM2Mi1cdGJvb2wgXCYjMzQ7ZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXCYjMzQ7XG4tLVxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXG4tLVxubmV0L0tjb25maWctNDc4LVxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTQ4MC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIGBCUEZfU1RSRUFNX1BBUlNFUmAgRGVwZW5kZW5jaWVzIGluIGBuZXQvS2NvbmZpZ2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBhZmZlY3RlZCBieSB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBvcHRpb24uIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgYW55IGNvbmZsaWN0cywgYW5kIGdlbmVyYWxseSBqdXN0IG1hcCBvdXQgaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSSB3YW50IHRvIGVuc3VyZSB0aGF0IGlmIHNvbWVvbmUgZW5hYmxlcyBvciBkaXNhYmxlcyBgQlBGX1NUUkVBTV9QQVJTRVJgLCB0aGUgY29ycmVjdCBvdGhlciBvcHRpb25zIGFyZSBhbHNvIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB0aGVyZSBhcmUgbm8gdW5leHBlY3RlZCBjb25mbGljdHMgdGhhdCB3b3VsZCBicmVhayB0aGluZ3MuIEdvdHRhIG1ha2Ugc3VyZSBpdCBwbGF5cyBuaWNlbHkgd2l0aCBldmVyeXRoaW5nIGVsc2UsIGZyb20gYSBLY29uZmlnIHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGZvciBtYWludGFpbmFiaWxpdHkgYW5kIHRvIHByZXZlbnQgcmVncmVzc2lvbnMuIExldCYjMzk7cyBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2MDpcdFxuIDM2MTpcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuIDM2MjpcdFx0Ym9vbCBcJiMzNDtlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcJiMzNDtcbiAzNjM6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDM2NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDM2NTpcdFx0ZGVwZW5kcyBvbiBDR1JPVVBfQlBGXG4gMzY2Olx0XHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxuIDM2NzpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuIDM2ODpcdFx0aGVscFxuIDM2OTpcdFx0ICBFbmFibGluZyB0aGlzIGFsbG93cyBhIFRDUCBzdHJlYW0gcGFyc2VyIHRvIGJlIHVzZWQgd2l0aFxuIDM3MDpcdFx0ICBCUEZfTUFQX1RZUEVfU09DS01BUC5cbiAzNzE6XHRcbiAzNzI6XHRjb25maWcgTkVUX0ZMT1dfTElNSVRcbiAzNzM6XHRcdGJvb2wgXCYjMzQ7TmV0IGZsb3cgbGltaXRcJiMzNDtcbiAzNzQ6XHRcdGRlcGVuZHMgb24gUlBTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqQlBGX1NZU0NBTEwgQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGxzLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhvc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgYSBrZXkgY29tcG9uZW50LCBzbyBpdCBzaG91bGQgYmUgZGVmaW5lZCB3aXRoaW4uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWUsIGFuZCBoZWxwIHRleHQuIFNwZWNpZmljYWxseSBJIHNob3VsZCBiZSBhYmxlIHRvIGRldGVybWluZSBpZiBpdCBpcyBlbmFibGVkIHdpdGggYW55IG90aGVyIG9wdGlvbnMuIEFuZCBmcm9tIHRoZXJlLCBkZXRlcm1pbmUgaG93IHRoYXQgbWlnaHQgaW1wYWN0IG15IGN1cnJlbnQgZGV2ZWxvcG1lbnQgZWZmb3J0cyBhbmQgZGVidWdnaW5nIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFxuICAzMTpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAzMjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMzM6XHRcdHNlbGVjdCBCUEZcbiAgMzQ6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzNTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDM2Olx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDM3Olx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzODpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzk6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICA0MDpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgNDE6XHRcdGRlZmF1bHQgblxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQ0Olx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBCUEZfSklUXG4gIDQ3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0OTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyODUKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEEgUXVpY2sgUmVjYXAqKgoKT2theSwgc28gdGhlIHBsYW4gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSBuZWVkIHRvIGdldCBgc2V0LXJlc3VsdHNgIHJ1bm5pbmcsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEnigJltIHNldHRpbmcgaXQgdXAgY29ycmVjdGx5IGZvciBmdXp6aW5nIHRoaXMgcGFydGljdWxhciB0YXJnZXQuIExldCYjMzk7cyBtYWtlIGEgbWVudGFsIGNoZWNrbGlzdC4gRmlyc3QsIHRoZSBgRW5hYmxlQ29uZmlnc2A6IEkgbmVlZCBgQlBGX1NZU0NBTExgLCBgQlBGX1NUUkVBTV9QQVJTRVJgLCBhbmQgYE5FVGAgKG9yLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcywgcG9zc2libHkgYENHUk9VUF9CUEZgIG9yIGBJTkVUYCkuIEkgc2hvdWxkIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgb2J2aW91c2x5LiBHb29kLgoKVGhlIGZ1enppbmcgaXRzZWxmIGlzIGRlZW1lZCAmIzM0O1dvcnRoRnV6emluZywmIzM0OyBzbyB0aGF0IGZsYWcgaXMgc2V0IHRvIHRydWUuIE5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19zdHJwX3JlYWRgLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYW5kIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLiBUaG9zZSBmdW5jdGlvbnMgYXJlIG15IHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyBqdXN0IHJ1biB0aHJvdWdoIHRoZSBzZXR1cCByZXF1aXJlbWVudHMgb25lIG1vcmUgdGltZTogSeKAmWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnM6IHRoZSBjb25maWd1cmF0aW9ucywgdGhlIHN5bWJvbHMsIHRoZSByZWFzb25pbmcsIGFuZCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZy4gVGhhdCYjMzk7cyB0aGUgY29yZS4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IGFzICYjMzQ7dHJ1ZSYjMzQ7IGFuZCBJJiMzOTtsbCByZW1lbWJlciB0byBzdHJpcCB0aGUgYENPTkZJR19gIHByZWZpeCBmcm9tIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEFsc28sIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhvc2UgZm9jdXMgc3ltYm9scyBhcmVuJiMzOTt0IGp1c3QgdW5pdmVyc2FsbHkgYXZhaWxhYmxlIGZ1bmN0aW9uczsgdGhleSBzaG91bGQgYmUgc3BlY2lmaWMgdG8gdGhpcyB1c2UgY2FzZS4KCkFscmlnaHQuIEFzc3VtaW5nIGFsbCBvZiB0aGF0IGNoZWNrcyBvdXQsIGl0JiMzOTtzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBnZXQgdGhpcyBmdXp6aW5nIHJ1biBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9hcHBseSYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdHJwX3JlYWQmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9yZWN2JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdmVyZGljdCBhcHBsaWNhdGlvbiBsb2dpYyBpbiBCUEYgc29ja21hcC9wc29jayBtZXNzYWdlIGhhbmRsaW5nIChuZXQvY29yZS9za21zZy5jKSwgdHJlYXRpbmcgaW5ncmVzcyByZWRpcmVjdCB0byB0aGUgc2VsZiBzb2NrZXQgYXMgYSBwYXNzIHZlcmRpY3QuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZy9CUEYgcGF0aCBpcyBkaXJlY3RseSBleGVyY2lzZWFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIHZpYSBzb2NrbWFwIHZlcmRpY3QgcHJvZ3JhbXMgYW5kIHNvY2tldCBJL08uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICAgJiMzNDtza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHZlcmRpY3QgYXBwbGljYXRpb24gbG9naWMgaW4gQlBGIHNvY2ttYXAvcHNvY2sgbWVzc2FnZSBoYW5kbGluZyAobmV0L2NvcmUvc2ttc2cuYyksIHRyZWF0aW5nIGluZ3Jlc3MgcmVkaXJlY3QgdG8gdGhlIHNlbGYgc29ja2V0IGFzIGEgcGFzcyB2ZXJkaWN0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcvQlBGIHBhdGggaXMgZGlyZWN0bHkgZXhlcmNpc2VhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB2aWEgc29ja21hcCB2ZXJkaWN0IHByb2dyYW1zIGFuZCBzb2NrZXQgSS9PLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgc2tfcHNvY2tfdmVyZGljdF9hcHBseSgpYCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgdG8gdHJlYXQgaW5ncmVzcyByZWRpcmVjdGlvbiB0byB0aGUgc29ja2V0JiMzOTtzIG93biBwc29jayAoYHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcdTAwMjZcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cdTAwM2Vza2ApIGFzIGBfX1NLX1BBU1NgLlxuXG5UaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY29udHJvbCBmbG93IGNoYW5nZSB0aGF0IGRpcmVjdHMgc2VsZi1yZWRpcmVjdGVkIHNrYnMgdG8gdGhlIGBfX1NLX1BBU1NgIGNvZGUgcGF0aCAoYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoKWApIHJhdGhlciB0aGFuIGNhbGxpbmcgYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYWx0ZXIgYnVmZmVyIGxlbmd0aC9vZmZzZXQgYm91bmRzIGluIGFuIHVuaW5pdGlhbGl6ZWQgbWFubmVyLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgc29ja2V0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIGJ1ZmZlciBsaWZlY3ljbGUgaXNzdWVzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IHRyYWNraW5nLiBUaHVzLCBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDAwN2UzN2E1ODA5MDQ2ZTI1ODhjMzkyNWJkNWRiZTUzODdiYzgwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuYwppbmRleCAyNTIxYjY0M2ZhMDVkLi5kZjM4NWE1YTk2MWU4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za21zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmMKQEAgLTEwMDAsNiAmIzQzOzEwMDAsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJaW50IGVyciA9IDA7CiAJdTMyIGxlbiwgb2ZmOwogCiYjNDM7CWlmICh2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgJmFtcDsmYW1wOyBza2JfYnBmX2luZ3Jlc3Moc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stJmd0O3NrKQomIzQzOwkJdmVyZGljdCA9IF9fU0tfUEFTUzsKJiM0MzsKIAlzd2l0Y2ggKHZlcmRpY3QpIHsKIAljYXNlIF9fU0tfUEFTUzoKIAkJZXJyID0gLUVJTzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGxldCYjMzk7cyBnZXQgYSBnb29kIGxvb2sgYXQgdGhpcyBkaWZmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGlzIGNydWNpYWwgZm9yIGNvbnRleHQuIFRoZSBkaWZmIGlzIHBvaW50ZWQgdG8gYG5ldC9jb3JlL3NrbXNnLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZvY3VzLiBHaXZlbiB0aGlzIGxvY2F0aW9uLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgbWVzc2FnaW5nIGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSByZWxldmFudCBzZWN0aW9ucyBvZiB0aGlzIGZpbGUg4oCTIHNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgMTAwMC4gTGV0IG1lIHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoYXQgc2VjdGlvbiBvZiBgbmV0L2NvcmUvc2ttc2cuY2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBsb2NhbCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRcdFx0cmV0dXJuIC1FSU87XG4gOTgxOlx0XHR9XG4gOTgyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5ODM6XHRcdGlmICghc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29ja19vdGhlciwgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcbiA5ODQ6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5ODU6XHRcdFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xuIDk4NjpcdFx0XHRzb2NrX2Ryb3AoZnJvbS1cdTAwM2Vzaywgc2tiKTtcbiA5ODc6XHRcdFx0cmV0dXJuIC1FSU87XG4gOTg4Olx0XHR9XG4gOTg5Olx0XG4gOTkwOlx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcbiA5OTE6XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwc29ja19vdGhlci1cdTAwM2V3b3JrLCAwKTtcbiA5OTI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4gOTkzOlx0XHRyZXR1cm4gMDtcbiA5OTQ6XHR9XG4gOTk1Olx0XG4gOTk2Olx0c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gOTk3Olx0XHRcdFx0XHQgIGludCB2ZXJkaWN0KVxuIDk5ODpcdHtcbiA5OTk6XHRcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcbjEwMDA6XHRcdGludCBlcnIgPSAwO1xuMTAwMTpcdFx0dTMyIGxlbiwgb2ZmO1xuMTAwMjpcdFxuMTAwMzpcdFx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcdTAwMjZcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2XG4xMDA0Olx0XHQgICAgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVx1MDAzZXNrKVxuMTAwNTpcdFx0XHR2ZXJkaWN0ID0gX19TS19QQVNTO1xuMTAwNjpcdFxuMTAwNzpcdFx0c3dpdGNoICh2ZXJkaWN0KSB7XG4xMDA4Olx0XHRjYXNlIF9fU0tfUEFTUzpcbjEwMDk6XHRcdFx0ZXJyID0gLUVJTztcbjEwMTA6XHRcdFx0c2tfb3RoZXIgPSBwc29jay1cdTAwM2VzaztcbjEwMTE6XHRcdFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxuMTAxMjpcdFx0XHQgICAgIXNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKVxuMTAxMzpcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4xMDE0Olx0XG4xMDE1Olx0XHRcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcbjEwMTY6XHRcbjEwMTc6XHRcdFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxuMTAxODpcdFx0XHQgKiBpbnRvIHRoZSBtc2cgcXVldWUuIElmIGl0cyBub3QgZW1wdHkgd2UgaGF2ZSB0b1xuMTAxOTpcdFx0XHQgKiBxdWV1ZSB3b3JrIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IE9PTyBkYXRhLiBPdGhlcndpc2UsXG4xMDIwOlx0XHRcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcbjEwMjE6XHRcdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4xMDIyOlx0XHRcdCAqL1xuMTAyMzpcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkge1xuMTAyNDpcdFx0XHRcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4xMDI1Olx0XHRcdFx0b2ZmID0gMDtcbjEwMjY6XHRcdFx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xuMTAyNzpcdFx0XHRcdFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xuMTAyODpcdFxuMTAyOTpcdFx0XHRcdFx0b2ZmID0gc3RtLVx1MDAzZW9mZnNldDtcbjEwMzA6XHRcdFx0XHRcdGxlbiA9IHN0bS1cdTAwM2VmdWxsX2xlbjtcbjEwMzE6XHRcdFx0XHR9XG4xMDMyOlx0XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpO1xuMTAzMzpcdFx0XHR9XG4xMDM0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEwMzU6XHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19sb2NrKTtcbjEwMzY6XHRcdFx0XHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcbjEwMzc6XHRcdFx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiLCBza2IpO1xuMTAzODpcdFx0XHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBzb2NrLVx1MDAzZXdvcmssIDApO1xuMTAzOTpcdFx0XHRcdFx0ZXJyID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGFuZCBSZWRpcmVjdHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgY29udGV4dCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYF9fU0tfUkVESVJFQ1RgIG1lY2hhbmlzbS4gV2hlcmUgZXhhY3RseSBpcyB0aGlzIHJlZGlyZWN0aW9uIGhhbmRsZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyB2ZXJkaWN0IGFwcGxpY2F0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGZsb3cgb2YgdHJhZmZpYz8gSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHNlZSB0aGUgb3RoZXIgcGllY2VzIGludm9sdmVkIGluIHJlZGlyZWN0aW5nIHNvY2tldCB0cmFmZmljLiBJJiMzOTttIGltYWdpbmluZyBob3cgYWxsIG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlZ3JhdGVkLiBJIGtub3cgdGhhdCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDA6XHRcdFx0XHR9XG4xMDQxOlx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19sb2NrKTtcbjEwNDI6XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTA0MzpcdFx0XHRcdFx0Z290byBvdXRfZnJlZTtcbjEwNDQ6XHRcdFx0fVxuMTA0NTpcdFx0XHRicmVhaztcbjEwNDY6XHRcdGNhc2UgX19TS19SRURJUkVDVDpcbjEwNDc6XHRcdFx0dGNwX2VhdF9za2IocHNvY2stXHUwMDNlc2ssIHNrYik7XG4xMDQ4Olx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcbjEwNDk6XHRcdFx0YnJlYWs7XG4xMDUwOlx0XHRjYXNlIF9fU0tfRFJPUDpcbjEwNTE6XHRcdGRlZmF1bHQ6XG4xMDUyOlx0b3V0X2ZyZWU6XG4xMDUzOlx0XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbjEwNTQ6XHRcdFx0dGNwX2VhdF9za2IocHNvY2stXHUwMDNlc2ssIHNrYik7XG4xMDU1Olx0XHRcdHNvY2tfZHJvcChwc29jay1cdTAwM2Vzaywgc2tiKTtcbjEwNTY6XHRcdH1cbjEwNTc6XHRcbjEwNTg6XHRcdHJldHVybiBlcnI7XG4xMDU5Olx0fVxuMTA2MDpcdFxuMTA2MTpcdHN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbjEwNjI6XHR7XG4xMDYzOlx0XHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuMTA2NDpcdFx0dm9pZCAoKndyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqc2spID0gTlVMTDtcbjEwNjU6XHRcbjEwNjY6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjEwNjc6XHRcdHBzb2NrID0gc2tfcHNvY2soc2spO1xuMTA2ODpcdFx0aWYgKGxpa2VseShwc29jaykpIHtcbjEwNjk6XHRcdFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKVxuMTA3MDpcdFx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwc29jay1cdTAwM2V3b3JrLCAwKTtcbjEwNzE6XHRcdFx0d3JpdGVfc3BhY2UgPSBwc29jay1cdTAwM2VzYXZlZF93cml0ZV9zcGFjZTtcbjEwNzI6XHRcdH1cbjEwNzM6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTA3NDpcdFx0aWYgKHdyaXRlX3NwYWNlKVxuMTA3NTpcdFx0XHR3cml0ZV9zcGFjZShzayk7XG4xMDc2Olx0fVxuMTA3NzpcdFxuMTA3ODpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbjEwNzk6XHRzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwODA6XHR7XG4xMDgxOlx0XHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuMTA4MjpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMTA4MzpcdFx0aW50IHJldCA9IF9fU0tfRFJPUDtcbjEwODQ6XHRcdHN0cnVjdCBzb2NrICpzaztcbjEwODU6XHRcbjEwODY6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjEwODc6XHRcdHNrID0gc3RycC1cdTAwM2VzaztcbjEwODg6XHRcdHBzb2NrID0gc2tfcHNvY2soc2spO1xuMTA4OTpcdFx0aWYgKHVubGlrZWx5KCFwc29jaykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIGBza19wc29ja19za2JfcmVkaXJlY3RgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyIGFyb3VuZCBsaW5lcyA5NTAtOTgwLiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgY29kZSwgbWF5YmUgcmVsYXRlZCB0byBzb21lIGVkZ2UgY2FzZSwgb3IgYSBjcnVjaWFsIGludGVyYWN0aW9uLiBJJiMzOTttIGhvcGluZyB0byBwaW5wb2ludCBob3cgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHBhY2tldCByZWRpcmVjdGlvbiBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgYXJlYSB0byB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUsIHdoYXQgdHJpZ2dlcmVkIGl0LCBhbmQgd2hhdCYjMzk7cyBuZXh0IGluIHRoZSBwcm9jZXNzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlZ21lbnQgdG8gcHJvdmlkZSB0aGUgY3JpdGljYWwgY29udGV4dC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG51YW5jZXMgaXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcdFx0XHRyZXQgPSBfX1NLX0RST1A7XG4gOTQ2Olx0XHRcdFx0Z290byBvdXQ7XG4gOTQ3Olx0XHRcdH1cbiA5NDg6XHRcdFx0cHNvY2stXHUwMDNlcmVkaXJfaW5ncmVzcyA9IHNrX21zZ190b19pbmdyZXNzKG1zZyk7XG4gOTQ5Olx0XHRcdHBzb2NrLVx1MDAzZXNrX3JlZGlyID0gbXNnLVx1MDAzZXNrX3JlZGlyO1xuIDk1MDpcdFx0XHRzb2NrX2hvbGQocHNvY2stXHUwMDNlc2tfcmVkaXIpO1xuIDk1MTpcdFx0fVxuIDk1MjpcdG91dDpcbiA5NTM6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDk1NDpcdFx0cmV0dXJuIHJldDtcbiA5NTU6XHR9XG4gOTU2Olx0RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfbXNnX3ZlcmRpY3QpO1xuIDk1NzpcdFxuIDk1ODpcdHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5NTk6XHR7XG4gOTYwOlx0XHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrX290aGVyO1xuIDk2MTpcdFx0c3RydWN0IHNvY2sgKnNrX290aGVyO1xuIDk2MjpcdFxuIDk2MzpcdFx0c2tfb3RoZXIgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XG4gOTY0Olx0XHQvKiBUaGlzIGVycm9yIGlzIGEgYnVnZ3kgQlBGIHByb2dyYW0sIGl0IHJldHVybmVkIGEgcmVkaXJlY3RcbiA5NjU6XHRcdCAqIHJldHVybiBjb2RlLCBidXQgdGhlbiBkaWRuJiMzOTt0IHNldCBhIHJlZGlyZWN0IGludGVyZmFjZS5cbiA5NjY6XHRcdCAqL1xuIDk2NzpcdFx0aWYgKHVubGlrZWx5KCFza19vdGhlcikpIHtcbiA5Njg6XHRcdFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xuIDk2OTpcdFx0XHRzb2NrX2Ryb3AoZnJvbS1cdTAwM2Vzaywgc2tiKTtcbiA5NzA6XHRcdFx0cmV0dXJuIC1FSU87XG4gOTcxOlx0XHR9XG4gOTcyOlx0XHRwc29ja19vdGhlciA9IHNrX3Bzb2NrKHNrX290aGVyKTtcbiA5NzM6XHRcdC8qIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoZSBzb2NrZXQgaXMgYmVpbmcgdG9ybiBkb3duIG9yIGhhZCBhbm90aGVyXG4gOTc0Olx0XHQgKiBlcnJvciB0aGF0IGNhdXNlZCB0aGUgcGlwZSB0byBicmVhay4gV2UgY2FuJiMzOTt0IHNlbmQgYSBwYWNrZXQgb25cbiA5NzU6XHRcdCAqIGEgc29ja2V0IHRoYXQgaXMgaW4gdGhpcyBzdGF0ZSBzbyB3ZSBkcm9wIHRoZSBza2IuXG4gOTc2Olx0XHQgKi9cbiA5Nzc6XHRcdGlmICghcHNvY2tfb3RoZXIgfHwgc29ja19mbGFnKHNrX290aGVyLCBTT0NLX0RFQUQpKSB7XG4gOTc4Olx0XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbiA5Nzk6XHRcdFx0c29ja19kcm9wKGZyb20tXHUwMDNlc2ssIHNrYik7XG4gOTgwOlx0XHRcdHJldHVybiAtRUlPO1xuIDk4MTpcdFx0fVxuIDk4MjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4gOTgzOlx0XHRpZiAoIXNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2tfb3RoZXIsIFNLX1BTT0NLX1RYX0VOQUJMRUQpKSB7XG4gOTg0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTIKCQkJCQkJCW91dHB1dDogMjMxCgkJCQkJCQl0aG91Z2h0czogODY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb24gb2YgU2VsZi1SZWRpcmVjdCBJbmdyZXNzIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgaW50cm9kdWNlcyBhIGNoZWNrIHdpdGhpbiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseSgpYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHNheWluZyB0aGF0IGlmIGEgQlBGIHByb2dyYW0gZGVjaWRlcyB0byByZWRpcmVjdCBhIHBhY2tldCAoYF9fU0tfUkVESVJFQ1RgKSBiYWNrIHRvIHRoZSAqc2FtZSogc29ja2V0IChgcHNvY2stJmd0O3NrYCksIGFuZCB0aGlzIGlzIGhhcHBlbmluZyBpbiBpbmdyZXNzIG1vZGUsIHRoZW4gd2Ugc2hvdWxkIHRyZWF0IHRoYXQgdmVyZGljdCBhcyBhIHNpbXBsZSBwYXNzIChgX19TS19QQVNTYCkuIFRoZSByYXRpb25hbGUgaXMgdGhhdCByZWRpcmVjdGluZyBhIHBhY2tldCB0byBpdHNlbGYgaW4gaW5ncmVzcyBpcyBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsIHRvIGp1c3QgcGFzc2luZyBpdCBkaXJlY3RseSB0byB0aGUgc29ja2V0JiMzOTtzIGluZ3Jlc3MgcXVldWUgKHVzaW5nIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmKClgKSwgd2hpY2ggYXZvaWRzIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBsb2NraW5nIG9yIHF1ZXVpbmcgcHJvYmxlbXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZSByZWRpcmVjdCBwYXRoLgoKTm93LCBmb3IgdGhlIGNyaXRpY2FsIEtNU0FOIGFzc2Vzc21lbnQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeToKCiogICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgY29weWluZyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuCiogICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUtZGVwZW5kZW50IGNvbmRpdGlvbmFsIGxvZ2ljPyoqIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGB2ZXJkaWN0YCwgYHNrYmAsIGBwc29ja2ApIGFyZSBhbGwgZnVsbHkgaW5pdGlhbGl6ZWQuIGB2ZXJkaWN0YCBpcyBhbiBleHBsaWNpdCBpbnRlZ2VyIGFyZ3VtZW50IGFuZCBgc2tiYCBhbmQgYHBzb2NrYCBhcmUgcG9pbnRlcnMgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLgoqICAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24/KiogTm8gbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggaW5pdGlhbGl6YXRpb25zIGhlcmUuCiogICAqKkJvdW5kcyBjaGVja3MvbG9naWMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlcz8qKiBObyBtYW5pcHVsYXRpb24gb2YgYnVmZmVyIGxlbmd0aCBvciBvZmZzZXRzIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2gganVzdCBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB0aGUgdmVyZGljdCwgbm90IHRoZSBkYXRhIGl0c2VsZi4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhhY2VyYmF0ZSBhbnkgS01TQU4tcmVsZXZhbnQgcmlza3MuIFRoZSBjaGFuZ2UgaXMgc2ltcGx5IGEgY29udHJvbCBmbG93IG1vZGlmaWNhdGlvbiwgY2hhbmdpbmcgdGhlIGhhbmRsaW5nIG9mIGEgc3BlY2lmaWMsIHNlbGYtcmVkaXJlY3RpbmcgaW5ncmVzcyBzY2VuYXJpby4gTWVtb3J5IHNhZmV0eSBjb25jZXJucywgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcywgYXJlIHNxdWFyZWx5IGluIHRoZSByZWFsbSBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLgoKVGhlcmVmb3JlLCBubyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5lY2Vzc2FyeS4gVGhpcyBpcyBhIGNsZWFyIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGF0IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKWAgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIHRvIHRyZWF0IGluZ3Jlc3MgcmVkaXJlY3Rpb24gdG8gdGhlIHNvY2tldCYjMzk7cyBvd24gcHNvY2sgKGB2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXHUwMDI2XHUwMDI2IHNrYl9icGZfaW5ncmVzcyhza2IpIFx1MDAyNlx1MDAyNiBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stXHUwMDNlc2tgKSBhcyBgX19TS19QQVNTYC5cblxuVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNvbnRyb2wgZmxvdyBjaGFuZ2UgdGhhdCBkaXJlY3RzIHNlbGYtcmVkaXJlY3RlZCBza2JzIHRvIHRoZSBgX19TS19QQVNTYCBjb2RlIHBhdGggKGBza19wc29ja19za2JfaW5ncmVzc19zZWxmKClgKSByYXRoZXIgdGhhbiBjYWxsaW5nIGBza19wc29ja19za2JfcmVkaXJlY3QoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvb2Zmc2V0IGJvdW5kcyBpbiBhbiB1bmluaXRpYWxpemVkIG1hbm5lciwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHNvY2tldCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBidWZmZXIgbGlmZWN5Y2xlIGlzc3VlcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gVGh1cywgS01TQU4gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKWAgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIHRvIHRyZWF0IGluZ3Jlc3MgcmVkaXJlY3Rpb24gdG8gdGhlIHNvY2tldCYjMzk7cyBvd24gcHNvY2sgKGB2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXHUwMDI2XHUwMDI2IHNrYl9icGZfaW5ncmVzcyhza2IpIFx1MDAyNlx1MDAyNiBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stXHUwMDNlc2tgKSBhcyBgX19TS19QQVNTYC5cblxuVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNvbnRyb2wgZmxvdyBjaGFuZ2UgdGhhdCBkaXJlY3RzIHNlbGYtcmVkaXJlY3RlZCBza2JzIHRvIHRoZSBgX19TS19QQVNTYCBjb2RlIHBhdGggKGBza19wc29ja19za2JfaW5ncmVzc19zZWxmKClgKSByYXRoZXIgdGhhbiBjYWxsaW5nIGBza19wc29ja19za2JfcmVkaXJlY3QoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvb2Zmc2V0IGJvdW5kcyBpbiBhbiB1bmluaXRpYWxpemVkIG1hbm5lciwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHNvY2tldCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBidWZmZXIgbGlmZWN5Y2xlIGlzc3VlcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gVGh1cywgS01TQU4gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6MzIuNjM5MzA2NTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0NDAzMjIzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19wc29ja192ZXJkaWN0X2FwcGx5XCIsXG4gICAgXCJza19wc29ja19zdHJwX3JlYWRcIixcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfcmVjdlwiLFxuICAgIFwic2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBza19wc29ja192ZXJkaWN0X2FwcGx5KClgIGluIGBuZXQvY29yZS9za21zZy5jYCB0byB0cmVhdCBpbmdyZXNzIHJlZGlyZWN0aW9uIHRvIHRoZSBzb2NrZXQncyBvd24gcHNvY2sgKGB2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXFx1MDAyNlxcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXFx1MDAyNlxcdTAwMjYgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVxcdTAwM2Vza2ApIGFzIGBfX1NLX1BBU1NgLlxcblxcblRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjb250cm9sIGZsb3cgY2hhbmdlIHRoYXQgZGlyZWN0cyBzZWxmLXJlZGlyZWN0ZWQgc2ticyB0byB0aGUgYF9fU0tfUEFTU2AgY29kZSBwYXRoIChgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZigpYCkgcmF0aGVyIHRoYW4gY2FsbGluZyBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbHRlciBidWZmZXIgbGVuZ3RoL29mZnNldCBib3VuZHMgaW4gYW4gdW5pbml0aWFsaXplZCBtYW5uZXIsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgYnVmZmVyIGxpZmVjeWNsZSBpc3N1ZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcuIFRodXMsIEtNU0FOIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHZlcmRpY3QgYXBwbGljYXRpb24gbG9naWMgaW4gQlBGIHNvY2ttYXAvcHNvY2sgbWVzc2FnZSBoYW5kbGluZyAobmV0L2NvcmUvc2ttc2cuYyksIHRyZWF0aW5nIGluZ3Jlc3MgcmVkaXJlY3QgdG8gdGhlIHNlbGYgc29ja2V0IGFzIGEgcGFzcyB2ZXJkaWN0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcvQlBGIHBhdGggaXMgZGlyZWN0bHkgZXhlcmNpc2VhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB2aWEgc29ja21hcCB2ZXJkaWN0IHByb2dyYW1zIGFuZCBzb2NrZXQgSS9PLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTozMi42MzkzMTM5MzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDAxNzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQwMDdlMzdhNTgwOTA0NmUyNTg4YzM5MjViZDVkYmU1Mzg3YmM4MDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAxMTo1NTozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xcbmluZGV4IDI1MjFiNjQzZmEwNWQuLmRmMzg1YTVhOTYxZTggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xcbisrKyBiL25ldC9jb3JlL3NrbXNnLmNcXG5AQCAtMTAwMCw2ICsxMDAwLDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFx0dTMyIGxlbiwgb2ZmO1xcbiBcXG4rXFx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcXHUwMDI2XFx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVxcdTAwM2VzaylcXG4rXFx0XFx0dmVyZGljdCA9IF9fU0tfUEFTUztcXG4rXFxuIFxcdHN3aXRjaCAodmVyZGljdCkge1xcbiBcXHRjYXNlIF9fU0tfUEFTUzpcXG4gXFx0XFx0ZXJyID0gLUVJTztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6MzMuMzYwMjIxOTAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNTk0ODY1MzE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIk5FVF9TT0NLX01TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlcIixcbiAgICBcInNrX3Bzb2NrX3N0cnBfcmVhZFwiLFxuICAgIFwic2tfcHNvY2tfdmVyZGljdF9yZWN2XCIsXG4gICAgXCJza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdmVyZGljdCBhcHBsaWNhdGlvbiBsb2dpYyBpbiBCUEYgc29ja21hcC9wc29jayBtZXNzYWdlIGhhbmRsaW5nIChuZXQvY29yZS9za21zZy5jKSwgdHJlYXRpbmcgaW5ncmVzcyByZWRpcmVjdCB0byB0aGUgc2VsZiBzb2NrZXQgYXMgYSBwYXNzIHZlcmRpY3QuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZy9CUEYgcGF0aCBpcyBkaXJlY3RseSBleGVyY2lzZWFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIHZpYSBzb2NrbWFwIHZlcmRpY3QgcHJvZ3JhbXMgYW5kIHNvY2tldCBJL08uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDAwN2UzN2E1ODA5MDQ2ZTI1ODhjMzkyNWJkNWRiZTUzODdiYzgwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xuaW5kZXggMjUyMWI2NDNmYTA1ZC4uZGYzODVhNWE5NjFlOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcbisrKyBiL25ldC9jb3JlL3NrbXNnLmNcbkBAIC0xMDAwLDYgKzEwMDAsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpbnQgZXJyID0gMDtcbiBcdHUzMiBsZW4sIG9mZjtcbiBcbitcdGlmICh2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXHUwMDI2XHUwMDI2IHNrYl9icGZfaW5ncmVzcyhza2IpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cdTAwM2VzaylcbitcdFx0dmVyZGljdCA9IF9fU0tfUEFTUztcbitcbiBcdHN3aXRjaCAodmVyZGljdCkge1xuIFx0Y2FzZSBfX1NLX1BBU1M6XG4gXHRcdGVyciA9IC1FSU87XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTozMy4zNjAyMjQ2MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzEzNTIzOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgU29ja2V0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL3NrbXNnLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCdzIGFkZGluZyBhIG5ldyBjb25kaXRpb25hbCBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24sIHJpZ2h0IGJlZm9yZSB0aGUgdmVyZGljdCBzd2l0Y2guIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXM6XG5cbmBgYGNcblx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcdTAwMjZcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2XG5cdCAgICBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stXHUwMDNlc2spXG5cdFx0dmVyZGljdCA9IF9fU0tfUEFTUztcbmBgYFxuXG5Fc3NlbnRpYWxseSwgaXQncyBjaGVja2luZyBmb3IgYSByZWRpcmVjdCB2ZXJkaWN0IGluIGEgc3BlY2lmaWMgc2NlbmFyaW8uIEl0IGxvb2tzIGxpa2UgaXQgaXMgY2hlY2tpbmcgaWYgdGhlIHBhY2tldCBpcyBiZWluZyByZWRpcmVjdGVkIHVzaW5nIEJQRiAoYHNrYl9icGZfaW5ncmVzc2AsIGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoYCksIGFuZCBhbHNvIHRoYXQgaXQncyBiZWluZyByZWRpcmVjdGVkIGJhY2sgdG8gdGhlIHNhbWUgc29ja2V0IChgcHNvY2stXHUwMDNlc2tgKS4gSWYgdGhlc2UgY29uZGl0aW9ucyBhcmUgbWV0LCB0aGUgdmVyZGljdCBpcyBjaGFuZ2VkIGZyb20gYF9fU0tfUkVESVJFQ1RgIHRvIGBfX1NLX1BBU1NgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIHNwZWNpZmljIHNjZW5hcmlvPyBXaGF0IGlzIHRoZSAqaW50ZW5kZWQqIGJlaGF2aW9yIGJlaW5nIG1vZGlmaWVkIGhlcmU/IFdoYXQgaXMgdGhlICpjdXJyZW50KiBiZWhhdmlvciB3aXRob3V0IHRoaXMgY2hhbmdlP1xuXG5JIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xzIHRvIGRvIHRoaXM6XG5cbjEuICAqKkNvZGUgRXhwbG9yYXRpb246KiogSSdsbCB1c2UgdG9vbHMgbGlrZSBgZ3JlcHBlcmAgb3IganVzdCByZWFkaW5nIHRoZSBmaWxlIHdpdGggYHJlYWQtZmlsZWAgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGhvdyBgc2tiX2JwZl9pbmdyZXNzYCBhbmQgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgIHdvcmssIGFuZCB0aGUgcm9sZXMgb2YgYHNrX3Bzb2NrYCBhbmQgYHNrYmAgaW4gdGhlIHByb2Nlc3MuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgKmNhbGxlZCogYW5kIHdoYXQgZGljdGF0ZXMgdGhlIGB2ZXJkaWN0YCB2YWx1ZSB0aGF0J3MgYmVpbmcgcGFzc2VkIGluLlxuMi4gICoqQ29uZmlndXJhdGlvbiBDaGVjazoqKiBJJ2xsIGFsc28gY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGlzIHBhdGguIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgY29kZSBwYXRoIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gY2VydGFpbiBzZXR0aW5ncy4gS25vd2luZyB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCAob3Igd2hpY2ggZGlzYWJsZSB0aGlzKSBpcyBjcml0aWNhbC5cbjMuICAqKlJlYWNoYWJpbGl0eToqKiBGaW5hbGx5LCBJJ2xsIGFzc2VzcyB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoaXMgbmV3IGNvZGUuIElzIHRoaXMgYSBob3QgcGF0aCwgb3IgYSByYXJlbHktdGFrZW4gb25lPyBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgYmVoYXZpb3IgaXMgdHJpZ2dlcmVkIGluIGEgcHJhY3RpY2FsIHNldHRpbmcuIFBlcmhhcHMgdHJhY2luZyBvciBzb21lIG90aGVyIGFuYWx5c2lzIGlzIGluIG9yZGVyLiBUaGlzIHdpbGwgaGVscCBtZSBldmFsdWF0ZSB0aGUgY2hhbmdlJ3MgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBzeXN0ZW0gYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTozOS4wNzM3NTExODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk4MTpcXHRcXHR9XFxuIDk4MjpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbiA5ODM6XFx0XFx0aWYgKCFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrX290aGVyLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbiA5ODQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbiA5ODU6XFx0XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbiA5ODY6XFx0XFx0XFx0c29ja19kcm9wKGZyb20tXFx1MDAzZXNrLCBza2IpO1xcbiA5ODc6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk4ODpcXHRcXHR9XFxuIDk4OTpcXHRcXG4gOTkwOlxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XFxuIDk5MTpcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2V3b3JrLCAwKTtcXG4gOTkyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4gOTkzOlxcdFxcdHJldHVybiAwO1xcbiA5OTQ6XFx0fVxcbiA5OTU6XFx0XFxuIDk5NjpcXHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gOTk3OlxcdFxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuIDk5ODpcXHR7XFxuIDk5OTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfb3RoZXI7XFxuMTAwMDpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMDAxOlxcdFxcdHUzMiBsZW4sIG9mZjtcXG4xMDAyOlxcdFxcbjEwMDM6XFx0XFx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcXHUwMDI2XFx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcXHUwMDI2XFx1MDAyNlxcbjEwMDQ6XFx0XFx0ICAgIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cXHUwMDNlc2spXFxuMTAwNTpcXHRcXHRcXHR2ZXJkaWN0ID0gX19TS19QQVNTO1xcbjEwMDY6XFx0XFxuMTAwNzpcXHRcXHRzd2l0Y2ggKHZlcmRpY3QpIHtcXG4xMDA4OlxcdFxcdGNhc2UgX19TS19QQVNTOlxcbjEwMDk6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4xMDEwOlxcdFxcdFxcdHNrX290aGVyID0gcHNvY2stXFx1MDAzZXNrO1xcbjEwMTE6XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxcbjEwMTI6XFx0XFx0XFx0ICAgICFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSlcXG4xMDEzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTAxNDpcXHRcXG4xMDE1OlxcdFxcdFxcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcXG4xMDE2OlxcdFxcbjEwMTc6XFx0XFx0XFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxcbjEwMTg6XFx0XFx0XFx0ICogaW50byB0aGUgbXNnIHF1ZXVlLiBJZiBpdHMgbm90IGVtcHR5IHdlIGhhdmUgdG9cXG4xMDE5OlxcdFxcdFxcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcXG4xMDIwOlxcdFxcdFxcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcXG4xMDIxOlxcdFxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbjEwMjI6XFx0XFx0XFx0ICovXFxuMTAyMzpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuMTAyNDpcXHRcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDI1OlxcdFxcdFxcdFxcdG9mZiA9IDA7XFxuMTAyNjpcXHRcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbjEwMjc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xcbjEwMjg6XFx0XFxuMTAyOTpcXHRcXHRcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG4xMDMwOlxcdFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuMTAzMTpcXHRcXHRcXHRcXHR9XFxuMTAzMjpcXHRcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuMTAzMzpcXHRcXHRcXHR9XFxuMTAzNDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjEwMzU6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDM2OlxcdFxcdFxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbjEwMzc6XFx0XFx0XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmssIDApO1xcbjEwMzk6XFx0XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6MzkuMDczODg4ODM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE2MDExOTMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIGFuZCBDb25maWd1cmF0aW9uIG9mIGBuZXQvY29yZS9za21zZy5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBwcm9jZXNzIGZvciBgbmV0L2NvcmUvc2ttc2cuY2AuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGEgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudCwgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIGl0IHRvIGNvbXBpbGUgYW5kIGZ1bmN0aW9uIGNvcnJlY3RseSB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IEtjb25maWcgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBpdHMgaW5jbHVzaW9uLCBhbmQgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGxpYnJhcmllcyBpdCByZWxpZXMgdXBvbi4gRXNzZW50aWFsbHksIEknbSBhaW1pbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBidWlsZC10aW1lIGVudmlyb25tZW50LiBUaGF0IHNob3VsZCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgaG93IEkgY2FuLCBwZXJoYXBzLCBpbmZsdWVuY2UgaXRzIGJlaGF2aW9yIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB0aGUgTWFrZWZpbGUgc3RydWN0dXJlIGluIHRoYXQgZGlyZWN0b3J5Li4uIHByb2JhYmx5IGBuZXQvY29yZS9NYWtlZmlsZWAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGFyY2hpdGVjdHVyZSBvciBrZXJuZWwgdmVyc2lvbiBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo0Mi4yMzQwMTEwODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NTUyNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrbXNnXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6NDIuMzUyNTcyOTEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5OTgxODQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgUmVsZXZhbnQgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gY29uY2VybmluZyBCUEYgYW5kIG5ldHdvcmtpbmcgY2FwYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBzb21lIGtleSBvcHRpb25zLiBGaXJzdCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gVGhpcyBvbmUgc2VlbXMgaW1wb3J0YW50IOKAkyBpdCdzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgc29ja2V0IG1lc3NhZ2luZywgd2hpY2ggaXMgZnVuZGFtZW50YWwgZm9yIGFueSBCUEYtcmVsYXRlZCBuZXR3b3JrIGFuYWx5c2lzIG9yIG1hbmlwdWxhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBwYXRocyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIEJQRiBwcm9ncmFtcy5cblxuTmV4dCwgSSdsbCB0dXJuIG15IGF0dGVudGlvbiB0byBgQ09ORklHX0JQRl9TWVNDQUxMYC4gT2J2aW91c2x5LCB0aGlzIGlzIGNydWNpYWwuIEl0IGRpcmVjdGx5IGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBCUEYgc3lzdGVtIGNhbGwgaXMgZW5hYmxlZCBhdCBhbGwuIFdpdGhvdXQgdGhpcywgdGhlcmUncyBubyB3YXkgYW55IEJQRiBwcm9ncmFtIGNhbiBiZSBsb2FkZWQgb3IgZXhlY3V0ZWQuIEEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc2V0dGluZywgaXRzIGRlcGVuZGVuY2llcywgYW5kIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgLiBUaGlzIHNvdW5kcyBpbnRlcmVzdGluZy4gSSBzdXNwZWN0IHRoaXMgaXMgcmVsYXRlZCB0byBzdHJlYW0gcGFyc2luZyBjYXBhYmlsaXRpZXMgd2l0aGluIEJQRiwgcG9zc2libHkgb2ZmZXJpbmcgZnVuY3Rpb25hbGl0eSB0byBhbmFseXplIGFuZCBtYW5pcHVsYXRlIGRhdGEgc3RyZWFtcyBhdCBhIGxvd2VyIGxldmVsIHRoYW4gc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgdGhpcyBjb25maWd1cmF0aW9uIGlzIGtleSB0byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyByZWxhdGlvbnNoaXBzIHdpdGggdGhlIG90aGVyIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgZW5hYmxlIHRoZSBkZXNpcmVkIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjA2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6NDUuNDUyMzk1MjM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDczNzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NPQ0tfTVNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ3OC1cXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTQ4MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU1OjQ1LjU4NzEzOTM4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTU2NDgzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERlY2lwaGVyaW5nIHRoZSBORVRfU09DS19NU0cgU2VsZWN0b3IqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIG1lbnRhbGx5IHRyYWNpbmcgdGhlIGNvZGUgcGF0aHMgdGhhdCBhcmUgZ29pbmcgdG8gcGljayB0aGUgYE5FVF9TT0NLX01TR2Agc2VsZWN0b3IuIFdoYXQgY29udGV4dCBhcmUgd2UgaW4/IElzIGl0IGEga2VybmVsIG1vZHVsZT8gVXNlci1zcGFjZSBhcHBsaWNhdGlvbj8gVGhlIGltcGxpY2F0aW9ucyBhcmUgdmFzdGx5IGRpZmZlcmVudC4gSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgbGlrZWx5IHNjZW5hcmlvcyBpbiBteSBoZWFkOiBuZXR3b3JrIHN0YWNrIGludGVyYWN0aW9ucywgc29ja2V0IGltcGxlbWVudGF0aW9ucywgbWVzc2FnZSBxdWV1aW5nLCBhbmQgc28gb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgc2VsZWN0aW9uIGlzICpoYXBwZW5pbmcqIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHVuZGVyc3RhbmQgKndoeSouIFRoaXMgc2VsZWN0aW9uIG1lY2hhbmlzbSDigJMgd2hldGhlciBpdCdzIGFuIGV2ZW50IGxvb3AsIGludGVycnVwdCBoYW5kbGVyLCBvciBzb21lIG90aGVyIHBvbGxpbmcgc3RyYXRlZ3kg4oCTIGlzIGtleS4gSSdtIGFscmVhZHkgZW52aXNpb25pbmcgdGhlIHBvc3NpYmxlIGJvdHRsZW5lY2tzIGFuZCByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBhcmlzZSBkZXBlbmRpbmcgb24gdGhlIGNob3NlbiBjb250ZXh0LiBJcyB0aGlzIGEgbmV3IHBpZWNlIG9mIGNvZGUsIG9yIGFtIEkgZGVidWdnaW5nIGFuIGV4aXN0aW5nIHN5c3RlbT8gVGhlIGltcGxpY2F0aW9ucyBjaGFuZ2UgdGhlIGFwcHJvYWNoIEknbGwgdGFrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY0NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU1OjQ3Ljg4Mjc5MjYwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzMTA5OTcxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVUX1NPQ0tfTVNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0zMT1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0zNy1cXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbmtlcm5lbC9icGYvS2NvbmZpZzozODpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbmtlcm5lbC9icGYvS2NvbmZpZy0zOS1cXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4tLVxcbm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4tLVxcbm5ldC9LY29uZmlnLTM2Ni1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnOjM2NzpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctMzY4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY0L0tjb25maWc6Mzg2OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTMtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2Ni9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19HQ01cXG5uZXQvdGxzL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC90bHMvS2NvbmZpZy0xMi1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6NTEuMjEzODk5NzMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODQ1MDcwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIGBORVRfU09DS19NU0dgIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBmbG93IG9mIGBORVRfU09DS19NU0dgIGFuZCBob3cgaXQncyBiZWluZyB1c2VkLiBJIGtub3cgaXQncyBzZWxlY3RlZCDigJMgb3IgYXQgbGVhc3QgaW52b2x2ZWQg4oCTIGJ5IHRoaW5ncyBsaWtlIGBCUEZfU1lTQ0FMTGAgd2hlbiBgTkVUYCBpcyBlbmFibGVkLCBgQlBGX1NUUkVBTV9QQVJTRVJgLCBhbmQgZXZlbiBUTFMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcmVhbGx5IHVuZGVyc3RhbmQgKmhvdyogaXQncyBiZWluZyB1c2VkIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIHZlcmRpY3QgaXMgYXBwbGllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNhbGxpbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBJ4oCZbSBnb2luZyB0byBleGFtaW5lIHRoZSBjYWxsIGdyYXBoIGFuZCBvdGhlciBmdW5jdGlvbnMgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIHRvIHNlZSB0aGUgZW50aXJlIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI4OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU1OjUzLjA5ODQxMTM0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MDk1MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9OTU4PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTk1LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTk2OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtOTk3LVxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEwNzk9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExMDItXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTEwMzpcXHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMTA0LW91dDpcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIwMj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMjUtXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIyNjpcXHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo1My4yNjY1MTI1NzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIzMTk4NTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBgc2tfcHNvY2tgIFZlcmRpY3QgQXBwbGljYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMuIEkgc2VlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGdvb2QsIGl0J3Mgc2NvcGVkIGFuZCBzdWdnZXN0cyBhIHNwZWNpZmljLCBpbnRlcm5hbCBwdXJwb3NlIHdpdGhpbiB0aGlzIGBza19wc29ja2AgbW9kdWxlLiBUaGUgY2x1ZXMgdGVsbCBtZSBpdCdzIGNhbGxlZCBieSBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAuIFRoYXQncyB0aGUgaW1wb3J0YW50IGJpdCB0byB1bmRlcnN0YW5kLiBTbywgd2hlcmUgYXJlIHRob3NlIHR3byBmdW5jdGlvbnMsIGBza19wc29ja19zdHJwX3JlYWRgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCBiZWluZyBjYWxsZWQgb3IgZXN0YWJsaXNoZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhvc2UgcG9pbnRzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aG9zZSB0d28gZnVuY3Rpb25zLiBJIHN1c3BlY3QgdGhlaXIgc2V0dXAgYW5kIGNhbGwgc2l0ZXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhpcyB3aG9sZSB2ZXJkaWN0IGFwcGxpY2F0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyogd2l0aGluIHRoZSBgc2tfcHNvY2tgIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgYW55IHJlbGF0ZWQgY29uZGl0aW9ucyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTMxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6NTUuNDk4NTAzMjYzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEwMDg3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfcHNvY2tfdmVyZGljdF9yZWN2fHNrX3Bzb2NrX3N0cnBfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz0xMDYxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA3OC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc2ttc2cuYzoxMDc5OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA4MC17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExMDctXFxubmV0L2NvcmUvc2ttc2cuYzoxMTA4OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgaW50IGVycilcXG5uZXQvY29yZS9za21zZy5jLTExMDkte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMTQ3PWludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTUxLVxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RycF9jYWxsYmFja3MgY2IgPSB7XFxubmV0L2NvcmUvc2ttc2cuYzoxMTUyOlxcdFxcdC5yY3ZfbXNnXFx0PSBza19wc29ja19zdHJwX3JlYWQsXFxubmV0L2NvcmUvc2ttc2cuYzoxMTUzOlxcdFxcdC5yZWFkX3NvY2tfZG9uZVxcdD0gc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUsXFxubmV0L2NvcmUvc2ttc2cuYy0xMTU0LVxcdFxcdC5wYXJzZV9tc2dcXHQ9IHNrX3Bzb2NrX3N0cnBfcGFyc2UsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTExOTc9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMDEtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjAyOnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za21zZy5jLTEyMDMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjM0PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNTAtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjUxOlxcdGNvcGllZCA9IG9wcy1cXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjUyLVxcdGlmIChjb3BpZWQgXFx1MDAzZT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo1NS43Mjk1MjA0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjMxMDE5OTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBTb2NrbWFwL1NvY2toYXNoIFZlcmRpY3QgTG9naWMgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHRhcmdldHMgYSBjcml0aWNhbCBwaWVjZSBvZiBCUEYgc29ja21hcC9zb2NraGFzaCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgbmV0L2NvcmUvc2ttc2cuY2AuIFNwZWNpZmljYWxseSwgaXQgY29uY2VybnMgdGhlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBmdW5jdGlvbiwgd2hpY2ggaXMgaW52b2tlZCB3aGVuIGEgQlBGIHByb2dyYW0gKHVzaW5nIGBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUYCBvciBzaW1pbGFyKSBhdHRhY2hlZCB0byBhIHNvY2ttYXAvc29ja2hhc2ggbWFrZXMgYSB2ZXJkaWN0IG9uIGluY29taW5nIHNvY2tldCBkYXRhLiBUaGUgY29yZSBsb2dpYyBpbnZvbHZlcyBzaXR1YXRpb25zIHdoZXJlIHRoZSBCUEYgcHJvZ3JhbSByZWRpcmVjdHMgZGF0YSB0byB0aGUgaW5ncmVzcyBvZiB0aGUgKnNhbWUqIHNvY2tldCwgb3IgcmV0dXJucyBgX19TS19SRURJUkVDVGAgd2l0aCBpbmdyZXNzIHRvIGBwc29jay1cdTAwM2Vza2AuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBzdGFuZGFyZCBuZXR3b3JraW5nIGFuZCBCUEYuIEl0J3MgZnVsbHkgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHMgbGlrZSBgYnBmKClgLCBgc29ja2V0KClgLCBgc2VuZCgpYCwgYW5kIGByZWN2KClgLiBUaGUga2V5IGlzIHJlZGlyZWN0aW5nIGRhdGEgKmJhY2sqIHRvIHRoZSBvcmlnaW5hbCBzb2NrZXQuXG5cbkZpcnN0LCBsZXQncyB2ZXJpZnkgbXkgYXNzdW1wdGlvbnMuIFRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGFwcGVhciB0byBiZSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19ORVRfU09DS19NU0dgIChvciBwb3NzaWJseSBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBDT05GSUdfTkVUYCkuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgaW4gdGhlIEtjb25maWcgZmlsZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZnVuY3Rpb24sIHdoaWNoLCBmb3J0dW5hdGVseSwgaXNuJ3QgaW5saW5lLCBzbyBJIGNhbiBlYXNpbHkgdHJhY2UgaXQuIEkgc2VlIHRoYXQgaXQncyBhIHN0YXRpYyBDIGZ1bmN0aW9uIGluIGBuZXQvY29yZS9za21zZy5jYCwgd2l0aCBjYWxsZXJzIGluY2x1ZGluZyBgc2tfcHNvY2tfc3RycF9yZWFkYCwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YC5cblxuTm93LCBsZXQncyBlbnN1cmUgSSd2ZSBjb3ZlcmVkIGFsbCB0aGUgYmFzZXMuXG5cbjEuICAqKlJlYWNoYWJsZT8qKiBZZXMsIEJQRiBzb2NrbWFwL3NvY2toYXNoIHdpdGggc3RyZWFtL3NrYiB2ZXJkaWN0IHByb2dyYW1zIHJlZGlyZWN0aW5nIHRyYWZmaWMgdG8gc29ja2V0cyBpcyB2ZXJ5IHRlc3RhYmxlIGZyb20gdXNlci1zcGFjZSwgYW5kIGhhcyBiZWVuIGFjdGl2ZWx5IGZ1enplZCBieSBzeXprYWxsZXIuIE5vIHN1cnByaXNlcyB0aGVyZS5cbjIuICAqKkxvZ2ljIENoYW5nZToqKiBUaGUgY3J1eCBpcyB0aGlzOiBpZiBhIEJQRiB2ZXJkaWN0IHByb2dyYW0sIHVzaW5nIGBCUEZfRl9JTkdSRVNTYCByZWRpcmVjdHMgdG8gdGhlICpzYW1lKiBzb2NrZXQgKGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stXHUwMDNlc2tgKSwgdGhlIHZlcmRpY3Qgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBgX19TS19QQVNTYC4gVGhpcyBieXBhc3NlcyB0aGUgcmVkaXJlY3Rpb24gYW5kIHNlbmRzIGl0IGRpcmVjdGx5IHRvIHRoZSBzb2NrZXQgaW5ncmVzcy5cbjMuICAqKkZvY3VzIFN5bWJvbHM6KiogSSdtIGtlZXBpbmcgbXkgZXllIG9uIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAuXG40LiAgKipFbmFibGUgQ29uZmlndXJhdGlvbnM6KiogYEJQRl9TWVNDQUxMYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBORVRfU09DS19NU0dgLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRob3NlIGNvbmZpZyBuYW1lcyBhbmQgYW55IGRlcGVuZGVuY2llcy5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSB0YXJnZXRlZCB0d2VhayB0byBob3cgc29ja21hcC9zb2NraGFzaCByZWRpcmVjdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaW5ncmVzcyBwYXRoIG9mIHRoZSBzYW1lIHNvY2tldC4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB0byB2ZXJpZnkgYW5kIHRlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NzEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MDEuMzYwNTQzODU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA2MzI2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChCUEZfU1RSRUFNX1BBUlNFUnxCUEZfU1lTQ0FMTHxORVRfU09DS19NU0cpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxcbi0tXFxubmV0L0tjb25maWctMzYwLVxcbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZy0zNjItXFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcbi0tXFxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXFxuLS1cXG5uZXQvS2NvbmZpZy00NzgtXFxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy00ODAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowMS42MTExODU1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgxNDc3OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBgQlBGX1NUUkVBTV9QQVJTRVJgIERlcGVuZGVuY2llcyBpbiBgbmV0L0tjb25maWdgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBhZmZlY3RlZCBieSB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBvcHRpb24uIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzLCBhbnkgY29uZmxpY3RzLCBhbmQgZ2VuZXJhbGx5IGp1c3QgbWFwIG91dCBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBJIHdhbnQgdG8gZW5zdXJlIHRoYXQgaWYgc29tZW9uZSBlbmFibGVzIG9yIGRpc2FibGVzIGBCUEZfU1RSRUFNX1BBUlNFUmAsIHRoZSBjb3JyZWN0IG90aGVyIG9wdGlvbnMgYXJlIGFsc28gZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHRoZXJlIGFyZSBubyB1bmV4cGVjdGVkIGNvbmZsaWN0cyB0aGF0IHdvdWxkIGJyZWFrIHRoaW5ncy4gR290dGEgbWFrZSBzdXJlIGl0IHBsYXlzIG5pY2VseSB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSwgZnJvbSBhIEtjb25maWcgcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgdG8gcHJldmVudCByZWdyZXNzaW9ucy4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzcxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MDMuNDkyNjY4NTM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjA6XFx0XFxuIDM2MTpcXHRjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4gMzYyOlxcdFxcdGJvb2wgXFxcImVuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlxcXCJcXG4gMzYzOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAzNjQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAzNjU6XFx0XFx0ZGVwZW5kcyBvbiBDR1JPVVBfQlBGXFxuIDM2NjpcXHRcXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbiAzNjc6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbiAzNjg6XFx0XFx0aGVscFxcbiAzNjk6XFx0XFx0ICBFbmFibGluZyB0aGlzIGFsbG93cyBhIFRDUCBzdHJlYW0gcGFyc2VyIHRvIGJlIHVzZWQgd2l0aFxcbiAzNzA6XFx0XFx0ICBCUEZfTUFQX1RZUEVfU09DS01BUC5cXG4gMzcxOlxcdFxcbiAzNzI6XFx0Y29uZmlnIE5FVF9GTE9XX0xJTUlUXFxuIDM3MzpcXHRcXHRib29sIFxcXCJOZXQgZmxvdyBsaW1pdFxcXCJcXG4gMzc0OlxcdFxcdGRlcGVuZHMgb24gUlBTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjAzLjQ5MjgyMTE2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjY1NzYzODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqQlBGX1NZU0NBTEwgQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIEJQRiBzeXNjYWxscy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRob3NlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgQlBGX1NZU0NBTExgIGlzIGEga2V5IGNvbXBvbmVudCwgc28gaXQgc2hvdWxkIGJlIGRlZmluZWQgd2l0aGluLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWUsIGFuZCBoZWxwIHRleHQuIFNwZWNpZmljYWxseSBJIHNob3VsZCBiZSBhYmxlIHRvIGRldGVybWluZSBpZiBpdCBpcyBlbmFibGVkIHdpdGggYW55IG90aGVyIG9wdGlvbnMuIEFuZCBmcm9tIHRoZXJlLCBkZXRlcm1pbmUgaG93IHRoYXQgbWlnaHQgaW1wYWN0IG15IGN1cnJlbnQgZGV2ZWxvcG1lbnQgZWZmb3J0cyBhbmQgZGVidWdnaW5nIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjA1Ljc1ODU4OTgwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAzMjpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAzMzpcXHRcXHRzZWxlY3QgQlBGXFxuICAzNDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDM1OlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzY6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzc6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM4OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzOTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDQwOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICA0MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDQyOlxcdFxcdGhlbHBcXG4gIDQzOlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDQ6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQ3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjA1Ljc1ODcxMTc3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzU4NTI1Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEEgUXVpY2sgUmVjYXAqKlxuXG5Pa2F5LCBzbyB0aGUgcGxhbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gZ2V0IGBzZXQtcmVzdWx0c2AgcnVubmluZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSeKAmW0gc2V0dGluZyBpdCB1cCBjb3JyZWN0bHkgZm9yIGZ1enppbmcgdGhpcyBwYXJ0aWN1bGFyIHRhcmdldC4gTGV0J3MgbWFrZSBhIG1lbnRhbCBjaGVja2xpc3QuIEZpcnN0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBJIG5lZWQgYEJQRl9TWVNDQUxMYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBORVRgIChvciwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpY3MsIHBvc3NpYmx5IGBDR1JPVVBfQlBGYCBvciBgSU5FVGApLiBJIHNob3VsZCBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIG9idmlvdXNseS4gR29vZC5cblxuVGhlIGZ1enppbmcgaXRzZWxmIGlzIGRlZW1lZCBcIldvcnRoRnV6emluZyxcIiBzbyB0aGF0IGZsYWcgaXMgc2V0IHRvIHRydWUuIE5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19zdHJwX3JlYWRgLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYW5kIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLiBUaG9zZSBmdW5jdGlvbnMgYXJlIG15IHRhcmdldHMuXG5cbk5vdywgbGV0J3MganVzdCBydW4gdGhyb3VnaCB0aGUgc2V0dXAgcmVxdWlyZW1lbnRzIG9uZSBtb3JlIHRpbWU6IEnigJlsbCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzOiB0aGUgY29uZmlndXJhdGlvbnMsIHRoZSBzeW1ib2xzLCB0aGUgcmVhc29uaW5nLCBhbmQgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcuIFRoYXQncyB0aGUgY29yZS4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IGFzIFwidHJ1ZVwiIGFuZCBJJ2xsIHJlbWVtYmVyIHRvIHN0cmlwIHRoZSBgQ09ORklHX2AgcHJlZml4IGZyb20gdGhlIGBFbmFibGVDb25maWdzYC4gQWxzbywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aG9zZSBmb2N1cyBzeW1ib2xzIGFyZW4ndCBqdXN0IHVuaXZlcnNhbGx5IGF2YWlsYWJsZSBmdW5jdGlvbnM7IHRoZXkgc2hvdWxkIGJlIHNwZWNpZmljIHRvIHRoaXMgdXNlIGNhc2UuXG5cbkFscmlnaHQuIEFzc3VtaW5nIGFsbCBvZiB0aGF0IGNoZWNrcyBvdXQsIGl0J3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGdldCB0aGlzIGZ1enppbmcgcnVuIHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjg1LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjA5LjExNzI0MTA1OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTYyNjczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19wc29ja192ZXJkaWN0X2FwcGx5XCIsXG4gICAgXCJza19wc29ja19zdHJwX3JlYWRcIixcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfcmVjdlwiLFxuICAgIFwic2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHZlcmRpY3QgYXBwbGljYXRpb24gbG9naWMgaW4gQlBGIHNvY2ttYXAvcHNvY2sgbWVzc2FnZSBoYW5kbGluZyAobmV0L2NvcmUvc2ttc2cuYyksIHRyZWF0aW5nIGluZ3Jlc3MgcmVkaXJlY3QgdG8gdGhlIHNlbGYgc29ja2V0IGFzIGEgcGFzcyB2ZXJkaWN0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcvQlBGIHBhdGggaXMgZGlyZWN0bHkgZXhlcmNpc2VhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB2aWEgc29ja21hcCB2ZXJkaWN0IHByb2dyYW1zIGFuZCBzb2NrZXQgSS9PLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tfcHNvY2tfdmVyZGljdF9hcHBseVwiLFxuICAgIFwic2tfcHNvY2tfc3RycF9yZWFkXCIsXG4gICAgXCJza19wc29ja192ZXJkaWN0X3JlY3ZcIixcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB2ZXJkaWN0IGFwcGxpY2F0aW9uIGxvZ2ljIGluIEJQRiBzb2NrbWFwL3Bzb2NrIG1lc3NhZ2UgaGFuZGxpbmcgKG5ldC9jb3JlL3NrbXNnLmMpLCB0cmVhdGluZyBpbmdyZXNzIHJlZGlyZWN0IHRvIHRoZSBzZWxmIHNvY2tldCBhcyBhIHBhc3MgdmVyZGljdC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nL0JQRiBwYXRoIGlzIGRpcmVjdGx5IGV4ZXJjaXNlYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgdmlhIHNvY2ttYXAgdmVyZGljdCBwcm9ncmFtcyBhbmQgc29ja2V0IEkvTy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MDkuMzA4ODg0ODE2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc3MDcyNzAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjA5LjMxMDExMDI4NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NzY5NDk0MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBza19wc29ja192ZXJkaWN0X2FwcGx5KClgIGluIGBuZXQvY29yZS9za21zZy5jYCB0byB0cmVhdCBpbmdyZXNzIHJlZGlyZWN0aW9uIHRvIHRoZSBzb2NrZXQncyBvd24gcHNvY2sgKGB2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXFx1MDAyNlxcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXFx1MDAyNlxcdTAwMjYgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVxcdTAwM2Vza2ApIGFzIGBfX1NLX1BBU1NgLlxcblxcblRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjb250cm9sIGZsb3cgY2hhbmdlIHRoYXQgZGlyZWN0cyBzZWxmLXJlZGlyZWN0ZWQgc2ticyB0byB0aGUgYF9fU0tfUEFTU2AgY29kZSBwYXRoIChgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZigpYCkgcmF0aGVyIHRoYW4gY2FsbGluZyBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbHRlciBidWZmZXIgbGVuZ3RoL29mZnNldCBib3VuZHMgaW4gYW4gdW5pbml0aWFsaXplZCBtYW5uZXIsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgYnVmZmVyIGxpZmVjeWNsZSBpc3N1ZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcuIFRodXMsIEtNU0FOIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDAwN2UzN2E1ODA5MDQ2ZTI1ODhjMzkyNWJkNWRiZTUzODdiYzgwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xuaW5kZXggMjUyMWI2NDNmYTA1ZC4uZGYzODVhNWE5NjFlOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcbisrKyBiL25ldC9jb3JlL3NrbXNnLmNcbkBAIC0xMDAwLDYgKzEwMDAsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpbnQgZXJyID0gMDtcbiBcdHUzMiBsZW4sIG9mZjtcbiBcbitcdGlmICh2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXHUwMDI2XHUwMDI2IHNrYl9icGZfaW5ncmVzcyhza2IpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cdTAwM2VzaylcbitcdFx0dmVyZGljdCA9IF9fU0tfUEFTUztcbitcbiBcdHN3aXRjaCAodmVyZGljdCkge1xuIFx0Y2FzZSBfX1NLX1BBU1M6XG4gXHRcdGVyciA9IC1FSU87XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowOS4zMTAxMTMxMjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY4ODg3NDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEZpcnN0IHRoaW5ncyBmaXJzdDogbGV0J3MgZ2V0IGEgZ29vZCBsb29rIGF0IHRoaXMgZGlmZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpcyBjcnVjaWFsIGZvciBjb250ZXh0LiBUaGUgZGlmZiBpcyBwb2ludGVkIHRvIGBuZXQvY29yZS9za21zZy5jYCwgc28gdGhhdCdzIHdoZXJlIEknbGwgZm9jdXMuIEdpdmVuIHRoaXMgbG9jYXRpb24sIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBtZXNzYWdpbmcgYW5kIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoaXMgZmlsZSDigJMgc3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAxMDAwLiBMZXQgbWUgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhhdCBzZWN0aW9uIG9mIGBuZXQvY29yZS9za21zZy5jYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxvY2FsIGVudmlyb25tZW50LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MTQuOTk4OTkxNDI5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDg2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk4MTpcXHRcXHR9XFxuIDk4MjpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbiA5ODM6XFx0XFx0aWYgKCFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrX290aGVyLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbiA5ODQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbiA5ODU6XFx0XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbiA5ODY6XFx0XFx0XFx0c29ja19kcm9wKGZyb20tXFx1MDAzZXNrLCBza2IpO1xcbiA5ODc6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk4ODpcXHRcXHR9XFxuIDk4OTpcXHRcXG4gOTkwOlxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XFxuIDk5MTpcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2V3b3JrLCAwKTtcXG4gOTkyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4gOTkzOlxcdFxcdHJldHVybiAwO1xcbiA5OTQ6XFx0fVxcbiA5OTU6XFx0XFxuIDk5NjpcXHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gOTk3OlxcdFxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuIDk5ODpcXHR7XFxuIDk5OTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfb3RoZXI7XFxuMTAwMDpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMDAxOlxcdFxcdHUzMiBsZW4sIG9mZjtcXG4xMDAyOlxcdFxcbjEwMDM6XFx0XFx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcXHUwMDI2XFx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcXHUwMDI2XFx1MDAyNlxcbjEwMDQ6XFx0XFx0ICAgIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cXHUwMDNlc2spXFxuMTAwNTpcXHRcXHRcXHR2ZXJkaWN0ID0gX19TS19QQVNTO1xcbjEwMDY6XFx0XFxuMTAwNzpcXHRcXHRzd2l0Y2ggKHZlcmRpY3QpIHtcXG4xMDA4OlxcdFxcdGNhc2UgX19TS19QQVNTOlxcbjEwMDk6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4xMDEwOlxcdFxcdFxcdHNrX290aGVyID0gcHNvY2stXFx1MDAzZXNrO1xcbjEwMTE6XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxcbjEwMTI6XFx0XFx0XFx0ICAgICFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSlcXG4xMDEzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTAxNDpcXHRcXG4xMDE1OlxcdFxcdFxcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcXG4xMDE2OlxcdFxcbjEwMTc6XFx0XFx0XFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxcbjEwMTg6XFx0XFx0XFx0ICogaW50byB0aGUgbXNnIHF1ZXVlLiBJZiBpdHMgbm90IGVtcHR5IHdlIGhhdmUgdG9cXG4xMDE5OlxcdFxcdFxcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcXG4xMDIwOlxcdFxcdFxcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcXG4xMDIxOlxcdFxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbjEwMjI6XFx0XFx0XFx0ICovXFxuMTAyMzpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuMTAyNDpcXHRcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDI1OlxcdFxcdFxcdFxcdG9mZiA9IDA7XFxuMTAyNjpcXHRcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbjEwMjc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xcbjEwMjg6XFx0XFxuMTAyOTpcXHRcXHRcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG4xMDMwOlxcdFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuMTAzMTpcXHRcXHRcXHRcXHR9XFxuMTAzMjpcXHRcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuMTAzMzpcXHRcXHRcXHR9XFxuMTAzNDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjEwMzU6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDM2OlxcdFxcdFxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbjEwMzc6XFx0XFx0XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmssIDApO1xcbjEwMzk6XFx0XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MTUuMDAwMjQzNzM4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzYwOTM4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBhbmQgUmVkaXJlY3RzKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgX19TS19SRURJUkVDVGAgbWVjaGFuaXNtLiBXaGVyZSBleGFjdGx5IGlzIHRoaXMgcmVkaXJlY3Rpb24gaGFuZGxlZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHZlcmRpY3QgYXBwbGljYXRpb24gaW4gcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgZmxvdyBvZiB0cmFmZmljPyBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIHRoZSBvdGhlciBwaWVjZXMgaW52b2x2ZWQgaW4gcmVkaXJlY3Rpbmcgc29ja2V0IHRyYWZmaWMuIEknbSBpbWFnaW5pbmcgaG93IGFsbCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZWdyYXRlZC4gSSBrbm93IHRoYXQgSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjoxNi44MzYzNDI0MzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0MDpcXHRcXHRcXHRcXHR9XFxuMTA0MTpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuMTA0MjpcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDQzOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTA0NDpcXHRcXHRcXHR9XFxuMTA0NTpcXHRcXHRcXHRicmVhaztcXG4xMDQ2OlxcdFxcdGNhc2UgX19TS19SRURJUkVDVDpcXG4xMDQ3OlxcdFxcdFxcdHRjcF9lYXRfc2tiKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG4xMDQ4OlxcdFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcXG4xMDQ5OlxcdFxcdFxcdGJyZWFrO1xcbjEwNTA6XFx0XFx0Y2FzZSBfX1NLX0RST1A6XFxuMTA1MTpcXHRcXHRkZWZhdWx0OlxcbjEwNTI6XFx0b3V0X2ZyZWU6XFxuMTA1MzpcXHRcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxuMTA1NDpcXHRcXHRcXHR0Y3BfZWF0X3NrYihwc29jay1cXHUwMDNlc2ssIHNrYik7XFxuMTA1NTpcXHRcXHRcXHRzb2NrX2Ryb3AocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbjEwNTY6XFx0XFx0fVxcbjEwNTc6XFx0XFxuMTA1ODpcXHRcXHRyZXR1cm4gZXJyO1xcbjEwNTk6XFx0fVxcbjEwNjA6XFx0XFxuMTA2MTpcXHRzdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuMTA2MjpcXHR7XFxuMTA2MzpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbjEwNjQ6XFx0XFx0dm9pZCAoKndyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqc2spID0gTlVMTDtcXG4xMDY1OlxcdFxcbjEwNjY6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEwNjc6XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTA2ODpcXHRcXHRpZiAobGlrZWx5KHBzb2NrKSkge1xcbjEwNjk6XFx0XFx0XFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKVxcbjEwNzA6XFx0XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZwc29jay1cXHUwMDNld29yaywgMCk7XFxuMTA3MTpcXHRcXHRcXHR3cml0ZV9zcGFjZSA9IHBzb2NrLVxcdTAwM2VzYXZlZF93cml0ZV9zcGFjZTtcXG4xMDcyOlxcdFxcdH1cXG4xMDczOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjEwNzQ6XFx0XFx0aWYgKHdyaXRlX3NwYWNlKVxcbjEwNzU6XFx0XFx0XFx0d3JpdGVfc3BhY2Uoc2spO1xcbjEwNzY6XFx0fVxcbjEwNzc6XFx0XFxuMTA3ODpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxuMTA3OTpcXHRzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMDgwOlxcdHtcXG4xMDgxOlxcdFxcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XFxuMTA4MjpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuMTA4MzpcXHRcXHRpbnQgcmV0ID0gX19TS19EUk9QO1xcbjEwODQ6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjEwODU6XFx0XFxuMTA4NjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTA4NzpcXHRcXHRzayA9IHN0cnAtXFx1MDAzZXNrO1xcbjEwODg6XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTA4OTpcXHRcXHRpZiAodW5saWtlbHkoIXBzb2NrKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjoxNi44MzY1OTIxNTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY2NTQxMjA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhpcyBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW91ciBhcm91bmQgbGluZXMgOTUwLTk4MC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGNvZGUsIG1heWJlIHJlbGF0ZWQgdG8gc29tZSBlZGdlIGNhc2UsIG9yIGEgY3J1Y2lhbCBpbnRlcmFjdGlvbi4gSSdtIGhvcGluZyB0byBwaW5wb2ludCBob3cgaXQncyBoYW5kbGluZyB0aGUgcGFja2V0IHJlZGlyZWN0aW9uIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBhcmVhIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBoYXBwZW5pbmcgaGVyZSwgd2hhdCB0cmlnZ2VyZWQgaXQsIGFuZCB3aGF0J3MgbmV4dCBpbiB0aGUgcHJvY2Vzcy4gSSdtIGV4cGVjdGluZyB0aGlzIHNlZ21lbnQgdG8gcHJvdmlkZSB0aGUgY3JpdGljYWwgY29udGV4dC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG51YW5jZXMgaXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MTguNTAyMDEwMzUxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3OTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za21zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk0NTpcXHRcXHRcXHRcXHRyZXQgPSBfX1NLX0RST1A7XFxuIDk0NjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTQ3OlxcdFxcdFxcdH1cXG4gOTQ4OlxcdFxcdFxcdHBzb2NrLVxcdTAwM2VyZWRpcl9pbmdyZXNzID0gc2tfbXNnX3RvX2luZ3Jlc3MobXNnKTtcXG4gOTQ5OlxcdFxcdFxcdHBzb2NrLVxcdTAwM2Vza19yZWRpciA9IG1zZy1cXHUwMDNlc2tfcmVkaXI7XFxuIDk1MDpcXHRcXHRcXHRzb2NrX2hvbGQocHNvY2stXFx1MDAzZXNrX3JlZGlyKTtcXG4gOTUxOlxcdFxcdH1cXG4gOTUyOlxcdG91dDpcXG4gOTUzOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA5NTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gOTU1OlxcdH1cXG4gOTU2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX21zZ192ZXJkaWN0KTtcXG4gOTU3OlxcdFxcbiA5NTg6XFx0c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5NTk6XFx0e1xcbiA5NjA6XFx0XFx0c3RydWN0IHNrX3Bzb2NrICpwc29ja19vdGhlcjtcXG4gOTYxOlxcdFxcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcXG4gOTYyOlxcdFxcbiA5NjM6XFx0XFx0c2tfb3RoZXIgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XFxuIDk2NDpcXHRcXHQvKiBUaGlzIGVycm9yIGlzIGEgYnVnZ3kgQlBGIHByb2dyYW0sIGl0IHJldHVybmVkIGEgcmVkaXJlY3RcXG4gOTY1OlxcdFxcdCAqIHJldHVybiBjb2RlLCBidXQgdGhlbiBkaWRuJ3Qgc2V0IGEgcmVkaXJlY3QgaW50ZXJmYWNlLlxcbiA5NjY6XFx0XFx0ICovXFxuIDk2NzpcXHRcXHRpZiAodW5saWtlbHkoIXNrX290aGVyKSkge1xcbiA5Njg6XFx0XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbiA5Njk6XFx0XFx0XFx0c29ja19kcm9wKGZyb20tXFx1MDAzZXNrLCBza2IpO1xcbiA5NzA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk3MTpcXHRcXHR9XFxuIDk3MjpcXHRcXHRwc29ja19vdGhlciA9IHNrX3Bzb2NrKHNrX290aGVyKTtcXG4gOTczOlxcdFxcdC8qIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoZSBzb2NrZXQgaXMgYmVpbmcgdG9ybiBkb3duIG9yIGhhZCBhbm90aGVyXFxuIDk3NDpcXHRcXHQgKiBlcnJvciB0aGF0IGNhdXNlZCB0aGUgcGlwZSB0byBicmVhay4gV2UgY2FuJ3Qgc2VuZCBhIHBhY2tldCBvblxcbiA5NzU6XFx0XFx0ICogYSBzb2NrZXQgdGhhdCBpcyBpbiB0aGlzIHN0YXRlIHNvIHdlIGRyb3AgdGhlIHNrYi5cXG4gOTc2OlxcdFxcdCAqL1xcbiA5Nzc6XFx0XFx0aWYgKCFwc29ja19vdGhlciB8fCBzb2NrX2ZsYWcoc2tfb3RoZXIsIFNPQ0tfREVBRCkpIHtcXG4gOTc4OlxcdFxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG4gOTc5OlxcdFxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4gOTgwOlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA5ODE6XFx0XFx0fVxcbiA5ODI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4gOTgzOlxcdFxcdGlmICghc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29ja19vdGhlciwgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcXG4gOTg0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MTguNTAyMzkzNDgxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1NzcxNjg1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBvZiBTZWxmLVJlZGlyZWN0IEluZ3Jlc3MgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgaW50cm9kdWNlcyBhIGNoZWNrIHdpdGhpbiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseSgpYC4gRXNzZW50aWFsbHksIGl0J3Mgc2F5aW5nIHRoYXQgaWYgYSBCUEYgcHJvZ3JhbSBkZWNpZGVzIHRvIHJlZGlyZWN0IGEgcGFja2V0IChgX19TS19SRURJUkVDVGApIGJhY2sgdG8gdGhlICpzYW1lKiBzb2NrZXQgKGBwc29jay1cdTAwM2Vza2ApLCBhbmQgdGhpcyBpcyBoYXBwZW5pbmcgaW4gaW5ncmVzcyBtb2RlLCB0aGVuIHdlIHNob3VsZCB0cmVhdCB0aGF0IHZlcmRpY3QgYXMgYSBzaW1wbGUgcGFzcyAoYF9fU0tfUEFTU2ApLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgcmVkaXJlY3RpbmcgYSBwYWNrZXQgdG8gaXRzZWxmIGluIGluZ3Jlc3MgaXMgc2VtYW50aWNhbGx5IGlkZW50aWNhbCB0byBqdXN0IHBhc3NpbmcgaXQgZGlyZWN0bHkgdG8gdGhlIHNvY2tldCdzIGluZ3Jlc3MgcXVldWUgKHVzaW5nIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmKClgKSwgd2hpY2ggYXZvaWRzIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBsb2NraW5nIG9yIHF1ZXVpbmcgcHJvYmxlbXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZSByZWRpcmVjdCBwYXRoLlxuXG5Ob3csIGZvciB0aGUgY3JpdGljYWwgS01TQU4gYXNzZXNzbWVudC4gTGV0J3Mgc2VlIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgcmlza3Mgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk6XG5cbiogICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBjb3B5aW5nIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cbiogICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUtZGVwZW5kZW50IGNvbmRpdGlvbmFsIGxvZ2ljPyoqIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGB2ZXJkaWN0YCwgYHNrYmAsIGBwc29ja2ApIGFyZSBhbGwgZnVsbHkgaW5pdGlhbGl6ZWQuIGB2ZXJkaWN0YCBpcyBhbiBleHBsaWNpdCBpbnRlZ2VyIGFyZ3VtZW50IGFuZCBgc2tiYCBhbmQgYHBzb2NrYCBhcmUgcG9pbnRlcnMgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLlxuKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uPyoqIE5vIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGluaXRpYWxpemF0aW9ucyBoZXJlLlxuKiAgICoqQm91bmRzIGNoZWNrcy9sb2dpYyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vIG1hbmlwdWxhdGlvbiBvZiBidWZmZXIgbGVuZ3RoIG9yIG9mZnNldHMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBqdXN0IGFsdGVycyB0aGUgY29udHJvbCBmbG93IGJhc2VkIG9uIHRoZSB2ZXJkaWN0LCBub3QgdGhlIGRhdGEgaXRzZWxmLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2Ugb3IgZXhhY2VyYmF0ZSBhbnkgS01TQU4tcmVsZXZhbnQgcmlza3MuIFRoZSBjaGFuZ2UgaXMgc2ltcGx5IGEgY29udHJvbCBmbG93IG1vZGlmaWNhdGlvbiwgY2hhbmdpbmcgdGhlIGhhbmRsaW5nIG9mIGEgc3BlY2lmaWMsIHNlbGYtcmVkaXJlY3RpbmcgaW5ncmVzcyBzY2VuYXJpby4gTWVtb3J5IHNhZmV0eSBjb25jZXJucywgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcywgYXJlIHNxdWFyZWx5IGluIHRoZSByZWFsbSBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIG5vIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5LiBUaGlzIGlzIGEgY2xlYXIgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjUyLCJPdXRwdXRUb2tlbnMiOjIzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjI4LjA3OTU2NzY3MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgc2tfcHNvY2tfdmVyZGljdF9hcHBseSgpYCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgdG8gdHJlYXQgaW5ncmVzcyByZWRpcmVjdGlvbiB0byB0aGUgc29ja2V0J3Mgb3duIHBzb2NrIChgdmVyZGljdCA9PSBfX1NLX1JFRElSRUNUIFxcdTAwMjZcXHUwMDI2IHNrYl9icGZfaW5ncmVzcyhza2IpIFxcdTAwMjZcXHUwMDI2IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cXHUwMDNlc2tgKSBhcyBgX19TS19QQVNTYC5cXG5cXG5UaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY29udHJvbCBmbG93IGNoYW5nZSB0aGF0IGRpcmVjdHMgc2VsZi1yZWRpcmVjdGVkIHNrYnMgdG8gdGhlIGBfX1NLX1BBU1NgIGNvZGUgcGF0aCAoYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoKWApIHJhdGhlciB0aGFuIGNhbGxpbmcgYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYWx0ZXIgYnVmZmVyIGxlbmd0aC9vZmZzZXQgYm91bmRzIGluIGFuIHVuaW5pdGlhbGl6ZWQgbWFubmVyLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgc29ja2V0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIGJ1ZmZlciBsaWZlY3ljbGUgaXNzdWVzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IHRyYWNraW5nLiBUaHVzLCBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKWAgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIHRvIHRyZWF0IGluZ3Jlc3MgcmVkaXJlY3Rpb24gdG8gdGhlIHNvY2tldCdzIG93biBwc29jayAoYHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcXHUwMDI2XFx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcXHUwMDI2XFx1MDAyNiBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stXFx1MDAzZXNrYCkgYXMgYF9fU0tfUEFTU2AuXFxuXFxuVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNvbnRyb2wgZmxvdyBjaGFuZ2UgdGhhdCBkaXJlY3RzIHNlbGYtcmVkaXJlY3RlZCBza2JzIHRvIHRoZSBgX19TS19QQVNTYCBjb2RlIHBhdGggKGBza19wc29ja19za2JfaW5ncmVzc19zZWxmKClgKSByYXRoZXIgdGhhbiBjYWxsaW5nIGBza19wc29ja19za2JfcmVkaXJlY3QoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvb2Zmc2V0IGJvdW5kcyBpbiBhbiB1bmluaXRpYWxpemVkIG1hbm5lciwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHNvY2tldCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBidWZmZXIgbGlmZWN5Y2xlIGlzc3VlcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gVGh1cywgS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q82d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 11:17:27 +0000 UTC FinishedAt: 2026-09-06 11:56:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3ccdb07813829ba9487273e75d1cb238cfa774c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3ccdb07813829ba9487273e75d1cb238cfa774c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG" ], "series_id": "cd97a7b8-210c-42f4-98fa-ddd875683581" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sk_psock_verdict_apply", "sk_psock_strp_read", "sk_psock_verdict_recv", "sk_psock_verdict_data_ready" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICAgJiMzNDtza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBza19wc29ja192ZXJkaWN0X2FwcGx5KClgIGluIGBuZXQvY29yZS9za21zZy5jYCB0byB0cmVhdCBpbmdyZXNzIHJlZGlyZWN0aW9uIHRvIHRoZSBzb2NrZXQmIzM5O3Mgb3duIHBzb2NrIChgdmVyZGljdCA9PSBfX1NLX1JFRElSRUNUIFx1MDAyNlx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcdTAwMjZcdTAwMjYgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVx1MDAzZXNrYCkgYXMgYF9fU0tfUEFTU2AuXG5cblRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjb250cm9sIGZsb3cgY2hhbmdlIHRoYXQgZGlyZWN0cyBzZWxmLXJlZGlyZWN0ZWQgc2ticyB0byB0aGUgYF9fU0tfUEFTU2AgY29kZSBwYXRoIChgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZigpYCkgcmF0aGVyIHRoYW4gY2FsbGluZyBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbHRlciBidWZmZXIgbGVuZ3RoL29mZnNldCBib3VuZHMgaW4gYW4gdW5pbml0aWFsaXplZCBtYW5uZXIsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgYnVmZmVyIGxpZmVjeWNsZSBpc3N1ZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcuIFRodXMsIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB2ZXJkaWN0IGFwcGxpY2F0aW9uIGxvZ2ljIGluIEJQRiBzb2NrbWFwL3Bzb2NrIG1lc3NhZ2UgaGFuZGxpbmcgKG5ldC9jb3JlL3NrbXNnLmMpLCB0cmVhdGluZyBpbmdyZXNzIHJlZGlyZWN0IHRvIHRoZSBzZWxmIHNvY2tldCBhcyBhIHBhc3MgdmVyZGljdC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nL0JQRiBwYXRoIGlzIGRpcmVjdGx5IGV4ZXJjaXNlYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgdmlhIHNvY2ttYXAgdmVyZGljdCBwcm9ncmFtcyBhbmQgc29ja2V0IEkvTy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQwMDdlMzdhNTgwOTA0NmUyNTg4YzM5MjViZDVkYmU1Mzg3YmM4MDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDExOjU1OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi5kZjM4NWE1YTk2MWU4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTEwMDAsNiAmIzQzOzEwMDAsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpbnQgZXJyID0gMDtcbiBcdHUzMiBsZW4sIG9mZjtcbiBcbiYjNDM7XHRpZiAodmVyZGljdCA9PSBfX1NLX1JFRElSRUNUIFx1MDAyNlx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVx1MDAzZXNrKVxuJiM0MztcdFx0dmVyZGljdCA9IF9fU0tfUEFTUztcbiYjNDM7XG4gXHRzd2l0Y2ggKHZlcmRpY3QpIHtcbiBcdGNhc2UgX19TS19QQVNTOlxuIFx0XHRlcnIgPSAtRUlPO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICAgJiMzNDtza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHZlcmRpY3QgYXBwbGljYXRpb24gbG9naWMgaW4gQlBGIHNvY2ttYXAvcHNvY2sgbWVzc2FnZSBoYW5kbGluZyAobmV0L2NvcmUvc2ttc2cuYyksIHRyZWF0aW5nIGluZ3Jlc3MgcmVkaXJlY3QgdG8gdGhlIHNlbGYgc29ja2V0IGFzIGEgcGFzcyB2ZXJkaWN0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcvQlBGIHBhdGggaXMgZGlyZWN0bHkgZXhlcmNpc2VhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB2aWEgc29ja21hcCB2ZXJkaWN0IHByb2dyYW1zIGFuZCBzb2NrZXQgSS9PLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDAwN2UzN2E1ODA5MDQ2ZTI1ODhjMzkyNWJkNWRiZTUzODdiYzgwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuYwppbmRleCAyNTIxYjY0M2ZhMDVkLi5kZjM4NWE1YTk2MWU4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za21zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmMKQEAgLTEwMDAsNiAmIzQzOzEwMDAsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJaW50IGVyciA9IDA7CiAJdTMyIGxlbiwgb2ZmOwogCiYjNDM7CWlmICh2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgJmFtcDsmYW1wOyBza2JfYnBmX2luZ3Jlc3Moc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stJmd0O3NrKQomIzQzOwkJdmVyZGljdCA9IF9fU0tfUEFTUzsKJiM0MzsKIAlzd2l0Y2ggKHZlcmRpY3QpIHsKIAljYXNlIF9fU0tfUEFTUzoKIAkJZXJyID0gLUVJTzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFNvY2tldCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL3NrbXNnLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRpbmcgYSBuZXcgY29uZGl0aW9uYWwgc3RhdGVtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCByaWdodCBiZWZvcmUgdGhlIHZlcmRpY3Qgc3dpdGNoLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzOgoKYGBgYwoJaWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCAmYW1wOyZhbXA7IHNrYl9icGZfaW5ncmVzcyhza2IpICZhbXA7JmFtcDsKCSAgICBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stJmd0O3NrKQoJCXZlcmRpY3QgPSBfX1NLX1BBU1M7CmBgYAoKRXNzZW50aWFsbHksIGl0JiMzOTtzIGNoZWNraW5nIGZvciBhIHJlZGlyZWN0IHZlcmRpY3QgaW4gYSBzcGVjaWZpYyBzY2VuYXJpby4gSXQgbG9va3MgbGlrZSBpdCBpcyBjaGVja2luZyBpZiB0aGUgcGFja2V0IGlzIGJlaW5nIHJlZGlyZWN0ZWQgdXNpbmcgQlBGIChgc2tiX2JwZl9pbmdyZXNzYCwgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgKSwgYW5kIGFsc28gdGhhdCBpdCYjMzk7cyBiZWluZyByZWRpcmVjdGVkIGJhY2sgdG8gdGhlIHNhbWUgc29ja2V0IChgcHNvY2stJmd0O3NrYCkuIElmIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG1ldCwgdGhlIHZlcmRpY3QgaXMgY2hhbmdlZCBmcm9tIGBfX1NLX1JFRElSRUNUYCB0byBgX19TS19QQVNTYC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IHRyaWdnZXJzIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8/IFdoYXQgaXMgdGhlICppbnRlbmRlZCogYmVoYXZpb3IgYmVpbmcgbW9kaWZpZWQgaGVyZT8gV2hhdCBpcyB0aGUgKmN1cnJlbnQqIGJlaGF2aW9yIHdpdGhvdXQgdGhpcyBjaGFuZ2U/CgpJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byB1c2Ugc29tZSB0b29scyB0byBkbyB0aGlzOgoKMS4gICoqQ29kZSBFeHBsb3JhdGlvbjoqKiBJJiMzOTtsbCB1c2UgdG9vbHMgbGlrZSBgZ3JlcHBlcmAgb3IganVzdCByZWFkaW5nIHRoZSBmaWxlIHdpdGggYHJlYWQtZmlsZWAgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGhvdyBgc2tiX2JwZl9pbmdyZXNzYCBhbmQgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgIHdvcmssIGFuZCB0aGUgcm9sZXMgb2YgYHNrX3Bzb2NrYCBhbmQgYHNrYmAgaW4gdGhlIHByb2Nlc3MuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgKmNhbGxlZCogYW5kIHdoYXQgZGljdGF0ZXMgdGhlIGB2ZXJkaWN0YCB2YWx1ZSB0aGF0JiMzOTtzIGJlaW5nIHBhc3NlZCBpbi4KMi4gICoqQ29uZmlndXJhdGlvbiBDaGVjazoqKiBJJiMzOTtsbCBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhpcyBwYXRoLiBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNvZGUgcGF0aCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGNlcnRhaW4gc2V0dGluZ3MuIEtub3dpbmcgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgKG9yIHdoaWNoIGRpc2FibGUgdGhpcykgaXMgY3JpdGljYWwuCjMuICAqKlJlYWNoYWJpbGl0eToqKiBGaW5hbGx5LCBJJiMzOTtsbCBhc3Nlc3MgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIG5ldyBjb2RlLiBJcyB0aGlzIGEgaG90IHBhdGgsIG9yIGEgcmFyZWx5LXRha2VuIG9uZT8gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBiZWhhdmlvciBpcyB0cmlnZ2VyZWQgaW4gYSBwcmFjdGljYWwgc2V0dGluZy4gUGVyaGFwcyB0cmFjaW5nIG9yIHNvbWUgb3RoZXIgYW5hbHlzaXMgaXMgaW4gb3JkZXIuIFRoaXMgd2lsbCBoZWxwIG1lIGV2YWx1YXRlIHRoZSBjaGFuZ2UmIzM5O3MgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBzeXN0ZW0gYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRcdFx0cmV0dXJuIC1FSU87XG4gOTgxOlx0XHR9XG4gOTgyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5ODM6XHRcdGlmICghc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29ja19vdGhlciwgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcbiA5ODQ6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5ODU6XHRcdFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xuIDk4NjpcdFx0XHRzb2NrX2Ryb3AoZnJvbS1cdTAwM2Vzaywgc2tiKTtcbiA5ODc6XHRcdFx0cmV0dXJuIC1FSU87XG4gOTg4Olx0XHR9XG4gOTg5Olx0XG4gOTkwOlx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcbiA5OTE6XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwc29ja19vdGhlci1cdTAwM2V3b3JrLCAwKTtcbiA5OTI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4gOTkzOlx0XHRyZXR1cm4gMDtcbiA5OTQ6XHR9XG4gOTk1Olx0XG4gOTk2Olx0c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gOTk3Olx0XHRcdFx0XHQgIGludCB2ZXJkaWN0KVxuIDk5ODpcdHtcbiA5OTk6XHRcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcbjEwMDA6XHRcdGludCBlcnIgPSAwO1xuMTAwMTpcdFx0dTMyIGxlbiwgb2ZmO1xuMTAwMjpcdFxuMTAwMzpcdFx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcdTAwMjZcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2XG4xMDA0Olx0XHQgICAgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVx1MDAzZXNrKVxuMTAwNTpcdFx0XHR2ZXJkaWN0ID0gX19TS19QQVNTO1xuMTAwNjpcdFxuMTAwNzpcdFx0c3dpdGNoICh2ZXJkaWN0KSB7XG4xMDA4Olx0XHRjYXNlIF9fU0tfUEFTUzpcbjEwMDk6XHRcdFx0ZXJyID0gLUVJTztcbjEwMTA6XHRcdFx0c2tfb3RoZXIgPSBwc29jay1cdTAwM2VzaztcbjEwMTE6XHRcdFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxuMTAxMjpcdFx0XHQgICAgIXNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKVxuMTAxMzpcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4xMDE0Olx0XG4xMDE1Olx0XHRcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcbjEwMTY6XHRcbjEwMTc6XHRcdFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxuMTAxODpcdFx0XHQgKiBpbnRvIHRoZSBtc2cgcXVldWUuIElmIGl0cyBub3QgZW1wdHkgd2UgaGF2ZSB0b1xuMTAxOTpcdFx0XHQgKiBxdWV1ZSB3b3JrIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IE9PTyBkYXRhLiBPdGhlcndpc2UsXG4xMDIwOlx0XHRcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcbjEwMjE6XHRcdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4xMDIyOlx0XHRcdCAqL1xuMTAyMzpcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkge1xuMTAyNDpcdFx0XHRcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4xMDI1Olx0XHRcdFx0b2ZmID0gMDtcbjEwMjY6XHRcdFx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xuMTAyNzpcdFx0XHRcdFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xuMTAyODpcdFxuMTAyOTpcdFx0XHRcdFx0b2ZmID0gc3RtLVx1MDAzZW9mZnNldDtcbjEwMzA6XHRcdFx0XHRcdGxlbiA9IHN0bS1cdTAwM2VmdWxsX2xlbjtcbjEwMzE6XHRcdFx0XHR9XG4xMDMyOlx0XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpO1xuMTAzMzpcdFx0XHR9XG4xMDM0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEwMzU6XHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19sb2NrKTtcbjEwMzY6XHRcdFx0XHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcbjEwMzc6XHRcdFx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiLCBza2IpO1xuMTAzODpcdFx0XHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBzb2NrLVx1MDAzZXdvcmssIDApO1xuMTAzOTpcdFx0XHRcdFx0ZXJyID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIGFuZCBDb25maWd1cmF0aW9uIG9mIGBuZXQvY29yZS9za21zZy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYG5ldC9jb3JlL3NrbXNnLmNgLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gYSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50LCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBmb3IgaXQgdG8gY29tcGlsZSBhbmQgZnVuY3Rpb24gY29ycmVjdGx5IHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyDigJMgd2hhdCBLY29uZmlnIG9wdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgaXRzIGluY2x1c2lvbiwgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBsaWJyYXJpZXMgaXQgcmVsaWVzIHVwb24uIEVzc2VudGlhbGx5LCBJJiMzOTttIGFpbWluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGJ1aWxkLXRpbWUgZW52aXJvbm1lbnQuIFRoYXQgc2hvdWxkIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBob3cgSSBjYW4sIHBlcmhhcHMsIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3Igd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB0aGUgTWFrZWZpbGUgc3RydWN0dXJlIGluIHRoYXQgZGlyZWN0b3J5Li4uIHByb2JhYmx5IGBuZXQvY29yZS9NYWtlZmlsZWAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBhcmNoaXRlY3R1cmUgb3Iga2VybmVsIHZlcnNpb24gYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza21zZ1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT00Mz1vYmotJChDT05GSUdfRkFJTE9WRVIpICYjNDM7PSBmYWlsb3Zlci5vXG5uZXQvY29yZS9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gc2ttc2cub1xubmV0L2NvcmUvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc29ja19tYXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFJlbGV2YW50IEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbiBjb25jZXJuaW5nIEJQRiBhbmQgbmV0d29ya2luZyBjYXBhYmlsaXRpZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHNvbWUga2V5IG9wdGlvbnMuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gVGhpcyBvbmUgc2VlbXMgaW1wb3J0YW50IOKAkyBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHNvY2tldCBtZXNzYWdpbmcsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIGZvciBhbnkgQlBGLXJlbGF0ZWQgbmV0d29yayBhbmFseXNpcyBvciBtYW5pcHVsYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGRhdGEgcGF0aHMgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBCUEYgcHJvZ3JhbXMuCgpOZXh0LCBJJiMzOTtsbCB0dXJuIG15IGF0dGVudGlvbiB0byBgQ09ORklHX0JQRl9TWVNDQUxMYC4gT2J2aW91c2x5LCB0aGlzIGlzIGNydWNpYWwuIEl0IGRpcmVjdGx5IGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBCUEYgc3lzdGVtIGNhbGwgaXMgZW5hYmxlZCBhdCBhbGwuIFdpdGhvdXQgdGhpcywgdGhlcmUmIzM5O3Mgbm8gd2F5IGFueSBCUEYgcHJvZ3JhbSBjYW4gYmUgbG9hZGVkIG9yIGV4ZWN1dGVkLiBBIGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNldHRpbmcsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0IGlzIGFic29sdXRlbHkgZXNzZW50aWFsLgoKRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgLiBUaGlzIHNvdW5kcyBpbnRlcmVzdGluZy4gSSBzdXNwZWN0IHRoaXMgaXMgcmVsYXRlZCB0byBzdHJlYW0gcGFyc2luZyBjYXBhYmlsaXRpZXMgd2l0aGluIEJQRiwgcG9zc2libHkgb2ZmZXJpbmcgZnVuY3Rpb25hbGl0eSB0byBhbmFseXplIGFuZCBtYW5pcHVsYXRlIGRhdGEgc3RyZWFtcyBhdCBhIGxvd2VyIGxldmVsIHRoYW4gc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgdGhpcyBjb25maWd1cmF0aW9uIGlzIGtleSB0byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyByZWxhdGlvbnNoaXBzIHdpdGggdGhlIG90aGVyIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgZW5hYmxlIHRoZSBkZXNpcmVkIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXG4tLVxubmV0L0tjb25maWctNDc4LVxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTQ4MC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjQ2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRGVjaXBoZXJpbmcgdGhlIE5FVF9TT0NLX01TRyBTZWxlY3RvcioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBtZW50YWxseSB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzIHRoYXQgYXJlIGdvaW5nIHRvIHBpY2sgdGhlIGBORVRfU09DS19NU0dgIHNlbGVjdG9yLiBXaGF0IGNvbnRleHQgYXJlIHdlIGluPyBJcyBpdCBhIGtlcm5lbCBtb2R1bGU/IFVzZXItc3BhY2UgYXBwbGljYXRpb24/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIHZhc3RseSBkaWZmZXJlbnQuIEkmIzM5O20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zIGluIG15IGhlYWQ6IG5ldHdvcmsgc3RhY2sgaW50ZXJhY3Rpb25zLCBzb2NrZXQgaW1wbGVtZW50YXRpb25zLCBtZXNzYWdlIHF1ZXVpbmcsIGFuZCBzbyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBzZWxlY3Rpb24gaXMgKmhhcHBlbmluZyogYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCAqd2h5Ki4gVGhpcyBzZWxlY3Rpb24gbWVjaGFuaXNtIOKAkyB3aGV0aGVyIGl0JiMzOTtzIGFuIGV2ZW50IGxvb3AsIGludGVycnVwdCBoYW5kbGVyLCBvciBzb21lIG90aGVyIHBvbGxpbmcgc3RyYXRlZ3kg4oCTIGlzIGtleS4gSSYjMzk7bSBhbHJlYWR5IGVudmlzaW9uaW5nIHRoZSBwb3NzaWJsZSBib3R0bGVuZWNrcyBhbmQgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgYXJpc2UgZGVwZW5kaW5nIG9uIHRoZSBjaG9zZW4gY29udGV4dC4gSXMgdGhpcyBhIG5ldyBwaWVjZSBvZiBjb2RlLCBvciBhbSBJIGRlYnVnZ2luZyBhbiBleGlzdGluZyBzeXN0ZW0/IFRoZSBpbXBsaWNhdGlvbnMgY2hhbmdlIHRoZSBhcHByb2FjaCBJJiMzOTtsbCB0YWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVUX1NPQ0tfTVNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0zMT1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzctXHRzZWxlY3QgQklOQVJZX1BSSU5URlxua2VybmVsL2JwZi9LY29uZmlnOjM4Olx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZy0zOS1cdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuLS1cbm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZzozODY6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjg4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYE5FVF9TT0NLX01TR2AgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgZmxvdyBvZiBgTkVUX1NPQ0tfTVNHYCBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkga25vdyBpdCYjMzk7cyBzZWxlY3RlZCDigJMgb3IgYXQgbGVhc3QgaW52b2x2ZWQg4oCTIGJ5IHRoaW5ncyBsaWtlIGBCUEZfU1lTQ0FMTGAgd2hlbiBgTkVUYCBpcyBlbmFibGVkLCBgQlBGX1NUUkVBTV9QQVJTRVJgLCBhbmQgZXZlbiBUTFMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcmVhbGx5IHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSB2ZXJkaWN0IGlzIGFwcGxpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2FsbGluZyBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIEnigJltIGdvaW5nIHRvIGV4YW1pbmUgdGhlIGNhbGwgZ3JhcGggYW5kIG90aGVyIGZ1bmN0aW9ucyBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgdG8gc2VlIHRoZSBlbnRpcmUgbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19wc29ja192ZXJkaWN0X2FwcGx5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmM9OTU4PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTk5NS1cbm5ldC9jb3JlL3NrbXNnLmM6OTk2OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy05OTctXHRcdFx0XHQgIGludCB2ZXJkaWN0KVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA3OT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTExMDItXHR9XG5uZXQvY29yZS9za21zZy5jOjExMDM6XHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XG5uZXQvY29yZS9za21zZy5jLTExMDQtb3V0OlxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTIwMj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjI1LVx0fVxubmV0L2NvcmUvc2ttc2cuYzoxMjI2Olx0cmV0ID0gc2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgYHNrX3Bzb2NrYCBWZXJkaWN0IEFwcGxpY2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIEkgc2VlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kLCBpdCYjMzk7cyBzY29wZWQgYW5kIHN1Z2dlc3RzIGEgc3BlY2lmaWMsIGludGVybmFsIHB1cnBvc2Ugd2l0aGluIHRoaXMgYHNrX3Bzb2NrYCBtb2R1bGUuIFRoZSBjbHVlcyB0ZWxsIG1lIGl0JiMzOTtzIGNhbGxlZCBieSBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAuIFRoYXQmIzM5O3MgdGhlIGltcG9ydGFudCBiaXQgdG8gdW5kZXJzdGFuZC4gU28sIHdoZXJlIGFyZSB0aG9zZSB0d28gZnVuY3Rpb25zLCBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgYmVpbmcgY2FsbGVkIG9yIGVzdGFibGlzaGVkPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRob3NlIHBvaW50cy4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSBzdXNwZWN0IHRoZWlyIHNldHVwIGFuZCBjYWxsIHNpdGVzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoaXMgd2hvbGUgdmVyZGljdCBhcHBsaWNhdGlvbiBpcyBhY3R1YWxseSAqZG9pbmcqIHdpdGhpbiB0aGUgYHNrX3Bzb2NrYCBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIGFueSByZWxhdGVkIGNvbmRpdGlvbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9yZWN2fHNrX3Bzb2NrX3N0cnBfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTEwNjE9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA3OC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jOjEwNzk6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za21zZy5jLTEwODAte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTEwNy1cbm5ldC9jb3JlL3NrbXNnLmM6MTEwODpzdGF0aWMgaW50IHNrX3Bzb2NrX3N0cnBfcmVhZF9kb25lKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpXG5uZXQvY29yZS9za21zZy5jLTExMDkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTE0Nz1pbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTExNTEtXHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnBfY2FsbGJhY2tzIGNiID0ge1xubmV0L2NvcmUvc2ttc2cuYzoxMTUyOlx0XHQucmN2X21zZ1x0PSBza19wc29ja19zdHJwX3JlYWQsXG5uZXQvY29yZS9za21zZy5jOjExNTM6XHRcdC5yZWFkX3NvY2tfZG9uZVx0PSBza19wc29ja19zdHJwX3JlYWRfZG9uZSxcbm5ldC9jb3JlL3NrbXNnLmMtMTE1NC1cdFx0LnBhcnNlX21zZ1x0PSBza19wc29ja19zdHJwX3BhcnNlLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTE5Nz1zdGF0aWMgdm9pZCBza19wc29ja19kb25lX3N0cnAoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMDEtXG5uZXQvY29yZS9za21zZy5jOjEyMDI6c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMjAzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEyMzQ9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNTAtXG5uZXQvY29yZS9za21zZy5jOjEyNTE6XHRjb3BpZWQgPSBvcHMtXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XG5uZXQvY29yZS9za21zZy5jLTEyNTItXHRpZiAoY29waWVkIFx1MDAzZT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODcxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBTb2NrbWFwL1NvY2toYXNoIFZlcmRpY3QgTG9naWMgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggdGFyZ2V0cyBhIGNyaXRpY2FsIHBpZWNlIG9mIEJQRiBzb2NrbWFwL3NvY2toYXNoIGZ1bmN0aW9uYWxpdHkgd2l0aGluIGBuZXQvY29yZS9za21zZy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBjb25jZXJucyB0aGUgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnZva2VkIHdoZW4gYSBCUEYgcHJvZ3JhbSAodXNpbmcgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgIG9yIHNpbWlsYXIpIGF0dGFjaGVkIHRvIGEgc29ja21hcC9zb2NraGFzaCBtYWtlcyBhIHZlcmRpY3Qgb24gaW5jb21pbmcgc29ja2V0IGRhdGEuIFRoZSBjb3JlIGxvZ2ljIGludm9sdmVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIEJQRiBwcm9ncmFtIHJlZGlyZWN0cyBkYXRhIHRvIHRoZSBpbmdyZXNzIG9mIHRoZSAqc2FtZSogc29ja2V0LCBvciByZXR1cm5zIGBfX1NLX1JFRElSRUNUYCB3aXRoIGluZ3Jlc3MgdG8gYHBzb2NrLSZndDtza2AuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgcmVhbG0gb2Ygc3RhbmRhcmQgbmV0d29ya2luZyBhbmQgQlBGLiBJdCYjMzk7cyBmdWxseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIGBicGYoKWAsIGBzb2NrZXQoKWAsIGBzZW5kKClgLCBhbmQgYHJlY3YoKWAuIFRoZSBrZXkgaXMgcmVkaXJlY3RpbmcgZGF0YSAqYmFjayogdG8gdGhlIG9yaWdpbmFsIHNvY2tldC4KCkZpcnN0LCBsZXQmIzM5O3MgdmVyaWZ5IG15IGFzc3VtcHRpb25zLiBUaGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSBhcHBlYXIgdG8gYmUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCAob3IgcG9zc2libHkgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAsIGFuZCBgQ09ORklHX05FVGApLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBpbiB0aGUgS2NvbmZpZyBmaWxlcy4KClRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZnVuY3Rpb24sIHdoaWNoLCBmb3J0dW5hdGVseSwgaXNuJiMzOTt0IGlubGluZSwgc28gSSBjYW4gZWFzaWx5IHRyYWNlIGl0LiBJIHNlZSB0aGF0IGl0JiMzOTtzIGEgc3RhdGljIEMgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL3NrbXNnLmNgLCB3aXRoIGNhbGxlcnMgaW5jbHVkaW5nIGBza19wc29ja19zdHJwX3JlYWRgLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYW5kIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLgoKTm93LCBsZXQmIzM5O3MgZW5zdXJlIEkmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBiYXNlcy4KCjEuICAqKlJlYWNoYWJsZT8qKiBZZXMsIEJQRiBzb2NrbWFwL3NvY2toYXNoIHdpdGggc3RyZWFtL3NrYiB2ZXJkaWN0IHByb2dyYW1zIHJlZGlyZWN0aW5nIHRyYWZmaWMgdG8gc29ja2V0cyBpcyB2ZXJ5IHRlc3RhYmxlIGZyb20gdXNlci1zcGFjZSwgYW5kIGhhcyBiZWVuIGFjdGl2ZWx5IGZ1enplZCBieSBzeXprYWxsZXIuIE5vIHN1cnByaXNlcyB0aGVyZS4KMi4gICoqTG9naWMgQ2hhbmdlOioqIFRoZSBjcnV4IGlzIHRoaXM6IGlmIGEgQlBGIHZlcmRpY3QgcHJvZ3JhbSwgdXNpbmcgYEJQRl9GX0lOR1JFU1NgIHJlZGlyZWN0cyB0byB0aGUgKnNhbWUqIHNvY2tldCAoYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay0mZ3Q7c2tgKSwgdGhlIHZlcmRpY3Qgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBgX19TS19QQVNTYC4gVGhpcyBieXBhc3NlcyB0aGUgcmVkaXJlY3Rpb24gYW5kIHNlbmRzIGl0IGRpcmVjdGx5IHRvIHRoZSBzb2NrZXQgaW5ncmVzcy4KMy4gICoqRm9jdXMgU3ltYm9sczoqKiBJJiMzOTttIGtlZXBpbmcgbXkgZXllIG9uIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAuCjQuICAqKkVuYWJsZSBDb25maWd1cmF0aW9uczoqKiBgQlBGX1NZU0NBTExgLCBgQlBGX1NUUkVBTV9QQVJTRVJgLCBhbmQgYE5FVF9TT0NLX01TR2AuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhvc2UgY29uZmlnIG5hbWVzIGFuZCBhbnkgZGVwZW5kZW5jaWVzLgoKRXNzZW50aWFsbHksIHRoaXMgaXMgYSB0YXJnZXRlZCB0d2VhayB0byBob3cgc29ja21hcC9zb2NraGFzaCByZWRpcmVjdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaW5ncmVzcyBwYXRoIG9mIHRoZSBzYW1lIHNvY2tldC4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB0byB2ZXJpZnkgYW5kIHRlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoQlBGX1NUUkVBTV9QQVJTRVJ8QlBGX1NZU0NBTEx8TkVUX1NPQ0tfTVNHKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxuLS1cbm5ldC9LY29uZmlnLTM2MC1cbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnLTM2Mi1cdGJvb2wgXCYjMzQ7ZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXCYjMzQ7XG4tLVxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXG4tLVxubmV0L0tjb25maWctNDc4LVxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTQ4MC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIGBCUEZfU1RSRUFNX1BBUlNFUmAgRGVwZW5kZW5jaWVzIGluIGBuZXQvS2NvbmZpZ2AqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBhZmZlY3RlZCBieSB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBvcHRpb24uIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgYW55IGNvbmZsaWN0cywgYW5kIGdlbmVyYWxseSBqdXN0IG1hcCBvdXQgaXRzIHBvc2l0aW9uIHdpdGhpbiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSSB3YW50IHRvIGVuc3VyZSB0aGF0IGlmIHNvbWVvbmUgZW5hYmxlcyBvciBkaXNhYmxlcyBgQlBGX1NUUkVBTV9QQVJTRVJgLCB0aGUgY29ycmVjdCBvdGhlciBvcHRpb25zIGFyZSBhbHNvIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB0aGVyZSBhcmUgbm8gdW5leHBlY3RlZCBjb25mbGljdHMgdGhhdCB3b3VsZCBicmVhayB0aGluZ3MuIEdvdHRhIG1ha2Ugc3VyZSBpdCBwbGF5cyBuaWNlbHkgd2l0aCBldmVyeXRoaW5nIGVsc2UsIGZyb20gYSBLY29uZmlnIHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGZvciBtYWludGFpbmFiaWxpdHkgYW5kIHRvIHByZXZlbnQgcmVncmVzc2lvbnMuIExldCYjMzk7cyBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2MDpcdFxuIDM2MTpcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuIDM2MjpcdFx0Ym9vbCBcJiMzNDtlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcJiMzNDtcbiAzNjM6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDM2NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDM2NTpcdFx0ZGVwZW5kcyBvbiBDR1JPVVBfQlBGXG4gMzY2Olx0XHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxuIDM2NzpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuIDM2ODpcdFx0aGVscFxuIDM2OTpcdFx0ICBFbmFibGluZyB0aGlzIGFsbG93cyBhIFRDUCBzdHJlYW0gcGFyc2VyIHRvIGJlIHVzZWQgd2l0aFxuIDM3MDpcdFx0ICBCUEZfTUFQX1RZUEVfU09DS01BUC5cbiAzNzE6XHRcbiAzNzI6XHRjb25maWcgTkVUX0ZMT1dfTElNSVRcbiAzNzM6XHRcdGJvb2wgXCYjMzQ7TmV0IGZsb3cgbGltaXRcJiMzNDtcbiAzNzQ6XHRcdGRlcGVuZHMgb24gUlBTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqQlBGX1NZU0NBTEwgQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gQlBGIHN5c2NhbGxzLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhvc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgYSBrZXkgY29tcG9uZW50LCBzbyBpdCBzaG91bGQgYmUgZGVmaW5lZCB3aXRoaW4uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWUsIGFuZCBoZWxwIHRleHQuIFNwZWNpZmljYWxseSBJIHNob3VsZCBiZSBhYmxlIHRvIGRldGVybWluZSBpZiBpdCBpcyBlbmFibGVkIHdpdGggYW55IG90aGVyIG9wdGlvbnMuIEFuZCBmcm9tIHRoZXJlLCBkZXRlcm1pbmUgaG93IHRoYXQgbWlnaHQgaW1wYWN0IG15IGN1cnJlbnQgZGV2ZWxvcG1lbnQgZWZmb3J0cyBhbmQgZGVidWdnaW5nIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFxuICAzMTpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAzMjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMzM6XHRcdHNlbGVjdCBCUEZcbiAgMzQ6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzNTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDM2Olx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDM3Olx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzODpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzk6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICA0MDpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgNDE6XHRcdGRlZmF1bHQgblxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQ0Olx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBCUEZfSklUXG4gIDQ3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0OTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyODUKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEEgUXVpY2sgUmVjYXAqKgoKT2theSwgc28gdGhlIHBsYW4gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSBuZWVkIHRvIGdldCBgc2V0LXJlc3VsdHNgIHJ1bm5pbmcsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEnigJltIHNldHRpbmcgaXQgdXAgY29ycmVjdGx5IGZvciBmdXp6aW5nIHRoaXMgcGFydGljdWxhciB0YXJnZXQuIExldCYjMzk7cyBtYWtlIGEgbWVudGFsIGNoZWNrbGlzdC4gRmlyc3QsIHRoZSBgRW5hYmxlQ29uZmlnc2A6IEkgbmVlZCBgQlBGX1NZU0NBTExgLCBgQlBGX1NUUkVBTV9QQVJTRVJgLCBhbmQgYE5FVGAgKG9yLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcywgcG9zc2libHkgYENHUk9VUF9CUEZgIG9yIGBJTkVUYCkuIEkgc2hvdWxkIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgb2J2aW91c2x5LiBHb29kLgoKVGhlIGZ1enppbmcgaXRzZWxmIGlzIGRlZW1lZCAmIzM0O1dvcnRoRnV6emluZywmIzM0OyBzbyB0aGF0IGZsYWcgaXMgc2V0IHRvIHRydWUuIE5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19zdHJwX3JlYWRgLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYW5kIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLiBUaG9zZSBmdW5jdGlvbnMgYXJlIG15IHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyBqdXN0IHJ1biB0aHJvdWdoIHRoZSBzZXR1cCByZXF1aXJlbWVudHMgb25lIG1vcmUgdGltZTogSeKAmWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnM6IHRoZSBjb25maWd1cmF0aW9ucywgdGhlIHN5bWJvbHMsIHRoZSByZWFzb25pbmcsIGFuZCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZy4gVGhhdCYjMzk7cyB0aGUgY29yZS4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IGFzICYjMzQ7dHJ1ZSYjMzQ7IGFuZCBJJiMzOTtsbCByZW1lbWJlciB0byBzdHJpcCB0aGUgYENPTkZJR19gIHByZWZpeCBmcm9tIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEFsc28sIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhvc2UgZm9jdXMgc3ltYm9scyBhcmVuJiMzOTt0IGp1c3QgdW5pdmVyc2FsbHkgYXZhaWxhYmxlIGZ1bmN0aW9uczsgdGhleSBzaG91bGQgYmUgc3BlY2lmaWMgdG8gdGhpcyB1c2UgY2FzZS4KCkFscmlnaHQuIEFzc3VtaW5nIGFsbCBvZiB0aGF0IGNoZWNrcyBvdXQsIGl0JiMzOTtzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBnZXQgdGhpcyBmdXp6aW5nIHJ1biBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9hcHBseSYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdHJwX3JlYWQmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9yZWN2JiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdmVyZGljdCBhcHBsaWNhdGlvbiBsb2dpYyBpbiBCUEYgc29ja21hcC9wc29jayBtZXNzYWdlIGhhbmRsaW5nIChuZXQvY29yZS9za21zZy5jKSwgdHJlYXRpbmcgaW5ncmVzcyByZWRpcmVjdCB0byB0aGUgc2VsZiBzb2NrZXQgYXMgYSBwYXNzIHZlcmRpY3QuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZy9CUEYgcGF0aCBpcyBkaXJlY3RseSBleGVyY2lzZWFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIHZpYSBzb2NrbWFwIHZlcmRpY3QgcHJvZ3JhbXMgYW5kIHNvY2tldCBJL08uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RycF9yZWFkJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICAgJiMzNDtza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHZlcmRpY3QgYXBwbGljYXRpb24gbG9naWMgaW4gQlBGIHNvY2ttYXAvcHNvY2sgbWVzc2FnZSBoYW5kbGluZyAobmV0L2NvcmUvc2ttc2cuYyksIHRyZWF0aW5nIGluZ3Jlc3MgcmVkaXJlY3QgdG8gdGhlIHNlbGYgc29ja2V0IGFzIGEgcGFzcyB2ZXJkaWN0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcvQlBGIHBhdGggaXMgZGlyZWN0bHkgZXhlcmNpc2VhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB2aWEgc29ja21hcCB2ZXJkaWN0IHByb2dyYW1zIGFuZCBzb2NrZXQgSS9PLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBgc2tfcHNvY2tfdmVyZGljdF9hcHBseSgpYCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgdG8gdHJlYXQgaW5ncmVzcyByZWRpcmVjdGlvbiB0byB0aGUgc29ja2V0JiMzOTtzIG93biBwc29jayAoYHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcdTAwMjZcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cdTAwM2Vza2ApIGFzIGBfX1NLX1BBU1NgLlxuXG5UaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY29udHJvbCBmbG93IGNoYW5nZSB0aGF0IGRpcmVjdHMgc2VsZi1yZWRpcmVjdGVkIHNrYnMgdG8gdGhlIGBfX1NLX1BBU1NgIGNvZGUgcGF0aCAoYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoKWApIHJhdGhlciB0aGFuIGNhbGxpbmcgYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYWx0ZXIgYnVmZmVyIGxlbmd0aC9vZmZzZXQgYm91bmRzIGluIGFuIHVuaW5pdGlhbGl6ZWQgbWFubmVyLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgc29ja2V0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIGJ1ZmZlciBsaWZlY3ljbGUgaXNzdWVzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IHRyYWNraW5nLiBUaHVzLCBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDAwN2UzN2E1ODA5MDQ2ZTI1ODhjMzkyNWJkNWRiZTUzODdiYzgwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuYwppbmRleCAyNTIxYjY0M2ZhMDVkLi5kZjM4NWE1YTk2MWU4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za21zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmMKQEAgLTEwMDAsNiAmIzQzOzEwMDAsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJaW50IGVyciA9IDA7CiAJdTMyIGxlbiwgb2ZmOwogCiYjNDM7CWlmICh2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgJmFtcDsmYW1wOyBza2JfYnBmX2luZ3Jlc3Moc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stJmd0O3NrKQomIzQzOwkJdmVyZGljdCA9IF9fU0tfUEFTUzsKJiM0MzsKIAlzd2l0Y2ggKHZlcmRpY3QpIHsKIAljYXNlIF9fU0tfUEFTUzoKIAkJZXJyID0gLUVJTzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGxldCYjMzk7cyBnZXQgYSBnb29kIGxvb2sgYXQgdGhpcyBkaWZmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGlzIGNydWNpYWwgZm9yIGNvbnRleHQuIFRoZSBkaWZmIGlzIHBvaW50ZWQgdG8gYG5ldC9jb3JlL3NrbXNnLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZvY3VzLiBHaXZlbiB0aGlzIGxvY2F0aW9uLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgbWVzc2FnaW5nIGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSByZWxldmFudCBzZWN0aW9ucyBvZiB0aGlzIGZpbGUg4oCTIHNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgMTAwMC4gTGV0IG1lIHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoYXQgc2VjdGlvbiBvZiBgbmV0L2NvcmUvc2ttc2cuY2AgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBsb2NhbCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRcdFx0cmV0dXJuIC1FSU87XG4gOTgxOlx0XHR9XG4gOTgyOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5ODM6XHRcdGlmICghc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29ja19vdGhlciwgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcbiA5ODQ6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbiA5ODU6XHRcdFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xuIDk4NjpcdFx0XHRzb2NrX2Ryb3AoZnJvbS1cdTAwM2Vzaywgc2tiKTtcbiA5ODc6XHRcdFx0cmV0dXJuIC1FSU87XG4gOTg4Olx0XHR9XG4gOTg5Olx0XG4gOTkwOlx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwc29ja19vdGhlci1cdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcbiA5OTE6XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwc29ja19vdGhlci1cdTAwM2V3b3JrLCAwKTtcbiA5OTI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4gOTkzOlx0XHRyZXR1cm4gMDtcbiA5OTQ6XHR9XG4gOTk1Olx0XG4gOTk2Olx0c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gOTk3Olx0XHRcdFx0XHQgIGludCB2ZXJkaWN0KVxuIDk5ODpcdHtcbiA5OTk6XHRcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcbjEwMDA6XHRcdGludCBlcnIgPSAwO1xuMTAwMTpcdFx0dTMyIGxlbiwgb2ZmO1xuMTAwMjpcdFxuMTAwMzpcdFx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcdTAwMjZcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2XG4xMDA0Olx0XHQgICAgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVx1MDAzZXNrKVxuMTAwNTpcdFx0XHR2ZXJkaWN0ID0gX19TS19QQVNTO1xuMTAwNjpcdFxuMTAwNzpcdFx0c3dpdGNoICh2ZXJkaWN0KSB7XG4xMDA4Olx0XHRjYXNlIF9fU0tfUEFTUzpcbjEwMDk6XHRcdFx0ZXJyID0gLUVJTztcbjEwMTA6XHRcdFx0c2tfb3RoZXIgPSBwc29jay1cdTAwM2VzaztcbjEwMTE6XHRcdFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxuMTAxMjpcdFx0XHQgICAgIXNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKVxuMTAxMzpcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4xMDE0Olx0XG4xMDE1Olx0XHRcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcbjEwMTY6XHRcbjEwMTc6XHRcdFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxuMTAxODpcdFx0XHQgKiBpbnRvIHRoZSBtc2cgcXVldWUuIElmIGl0cyBub3QgZW1wdHkgd2UgaGF2ZSB0b1xuMTAxOTpcdFx0XHQgKiBxdWV1ZSB3b3JrIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IE9PTyBkYXRhLiBPdGhlcndpc2UsXG4xMDIwOlx0XHRcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcbjEwMjE6XHRcdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4xMDIyOlx0XHRcdCAqL1xuMTAyMzpcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkge1xuMTAyNDpcdFx0XHRcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4xMDI1Olx0XHRcdFx0b2ZmID0gMDtcbjEwMjY6XHRcdFx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xuMTAyNzpcdFx0XHRcdFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xuMTAyODpcdFxuMTAyOTpcdFx0XHRcdFx0b2ZmID0gc3RtLVx1MDAzZW9mZnNldDtcbjEwMzA6XHRcdFx0XHRcdGxlbiA9IHN0bS1cdTAwM2VmdWxsX2xlbjtcbjEwMzE6XHRcdFx0XHR9XG4xMDMyOlx0XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpO1xuMTAzMzpcdFx0XHR9XG4xMDM0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEwMzU6XHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19sb2NrKTtcbjEwMzY6XHRcdFx0XHRpZiAoc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29jaywgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcbjEwMzc6XHRcdFx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiLCBza2IpO1xuMTAzODpcdFx0XHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnBzb2NrLVx1MDAzZXdvcmssIDApO1xuMTAzOTpcdFx0XHRcdFx0ZXJyID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGFuZCBSZWRpcmVjdHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgY29udGV4dCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYF9fU0tfUkVESVJFQ1RgIG1lY2hhbmlzbS4gV2hlcmUgZXhhY3RseSBpcyB0aGlzIHJlZGlyZWN0aW9uIGhhbmRsZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyB2ZXJkaWN0IGFwcGxpY2F0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGZsb3cgb2YgdHJhZmZpYz8gSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHNlZSB0aGUgb3RoZXIgcGllY2VzIGludm9sdmVkIGluIHJlZGlyZWN0aW5nIHNvY2tldCB0cmFmZmljLiBJJiMzOTttIGltYWdpbmluZyBob3cgYWxsIG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlZ3JhdGVkLiBJIGtub3cgdGhhdCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDA6XHRcdFx0XHR9XG4xMDQxOlx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19sb2NrKTtcbjEwNDI6XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTA0MzpcdFx0XHRcdFx0Z290byBvdXRfZnJlZTtcbjEwNDQ6XHRcdFx0fVxuMTA0NTpcdFx0XHRicmVhaztcbjEwNDY6XHRcdGNhc2UgX19TS19SRURJUkVDVDpcbjEwNDc6XHRcdFx0dGNwX2VhdF9za2IocHNvY2stXHUwMDNlc2ssIHNrYik7XG4xMDQ4Olx0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcbjEwNDk6XHRcdFx0YnJlYWs7XG4xMDUwOlx0XHRjYXNlIF9fU0tfRFJPUDpcbjEwNTE6XHRcdGRlZmF1bHQ6XG4xMDUyOlx0b3V0X2ZyZWU6XG4xMDUzOlx0XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbjEwNTQ6XHRcdFx0dGNwX2VhdF9za2IocHNvY2stXHUwMDNlc2ssIHNrYik7XG4xMDU1Olx0XHRcdHNvY2tfZHJvcChwc29jay1cdTAwM2Vzaywgc2tiKTtcbjEwNTY6XHRcdH1cbjEwNTc6XHRcbjEwNTg6XHRcdHJldHVybiBlcnI7XG4xMDU5Olx0fVxuMTA2MDpcdFxuMTA2MTpcdHN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbjEwNjI6XHR7XG4xMDYzOlx0XHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuMTA2NDpcdFx0dm9pZCAoKndyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqc2spID0gTlVMTDtcbjEwNjU6XHRcbjEwNjY6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjEwNjc6XHRcdHBzb2NrID0gc2tfcHNvY2soc2spO1xuMTA2ODpcdFx0aWYgKGxpa2VseShwc29jaykpIHtcbjEwNjk6XHRcdFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKVxuMTA3MDpcdFx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwc29jay1cdTAwM2V3b3JrLCAwKTtcbjEwNzE6XHRcdFx0d3JpdGVfc3BhY2UgPSBwc29jay1cdTAwM2VzYXZlZF93cml0ZV9zcGFjZTtcbjEwNzI6XHRcdH1cbjEwNzM6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTA3NDpcdFx0aWYgKHdyaXRlX3NwYWNlKVxuMTA3NTpcdFx0XHR3cml0ZV9zcGFjZShzayk7XG4xMDc2Olx0fVxuMTA3NzpcdFxuMTA3ODpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcbjEwNzk6XHRzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwODA6XHR7XG4xMDgxOlx0XHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuMTA4MjpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuMTA4MzpcdFx0aW50IHJldCA9IF9fU0tfRFJPUDtcbjEwODQ6XHRcdHN0cnVjdCBzb2NrICpzaztcbjEwODU6XHRcbjEwODY6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjEwODc6XHRcdHNrID0gc3RycC1cdTAwM2VzaztcbjEwODg6XHRcdHBzb2NrID0gc2tfcHNvY2soc2spO1xuMTA4OTpcdFx0aWYgKHVubGlrZWx5KCFwc29jaykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGlzIGBza19wc29ja19za2JfcmVkaXJlY3RgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyIGFyb3VuZCBsaW5lcyA5NTAtOTgwLiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgY29kZSwgbWF5YmUgcmVsYXRlZCB0byBzb21lIGVkZ2UgY2FzZSwgb3IgYSBjcnVjaWFsIGludGVyYWN0aW9uLiBJJiMzOTttIGhvcGluZyB0byBwaW5wb2ludCBob3cgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHBhY2tldCByZWRpcmVjdGlvbiBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgYXJlYSB0byB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUsIHdoYXQgdHJpZ2dlcmVkIGl0LCBhbmQgd2hhdCYjMzk7cyBuZXh0IGluIHRoZSBwcm9jZXNzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlZ21lbnQgdG8gcHJvdmlkZSB0aGUgY3JpdGljYWwgY29udGV4dC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG51YW5jZXMgaXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcdFx0XHRyZXQgPSBfX1NLX0RST1A7XG4gOTQ2Olx0XHRcdFx0Z290byBvdXQ7XG4gOTQ3Olx0XHRcdH1cbiA5NDg6XHRcdFx0cHNvY2stXHUwMDNlcmVkaXJfaW5ncmVzcyA9IHNrX21zZ190b19pbmdyZXNzKG1zZyk7XG4gOTQ5Olx0XHRcdHBzb2NrLVx1MDAzZXNrX3JlZGlyID0gbXNnLVx1MDAzZXNrX3JlZGlyO1xuIDk1MDpcdFx0XHRzb2NrX2hvbGQocHNvY2stXHUwMDNlc2tfcmVkaXIpO1xuIDk1MTpcdFx0fVxuIDk1MjpcdG91dDpcbiA5NTM6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDk1NDpcdFx0cmV0dXJuIHJldDtcbiA5NTU6XHR9XG4gOTU2Olx0RVhQT1JUX1NZTUJPTF9HUEwoc2tfcHNvY2tfbXNnX3ZlcmRpY3QpO1xuIDk1NzpcdFxuIDk1ODpcdHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5NTk6XHR7XG4gOTYwOlx0XHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrX290aGVyO1xuIDk2MTpcdFx0c3RydWN0IHNvY2sgKnNrX290aGVyO1xuIDk2MjpcdFxuIDk2MzpcdFx0c2tfb3RoZXIgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XG4gOTY0Olx0XHQvKiBUaGlzIGVycm9yIGlzIGEgYnVnZ3kgQlBGIHByb2dyYW0sIGl0IHJldHVybmVkIGEgcmVkaXJlY3RcbiA5NjU6XHRcdCAqIHJldHVybiBjb2RlLCBidXQgdGhlbiBkaWRuJiMzOTt0IHNldCBhIHJlZGlyZWN0IGludGVyZmFjZS5cbiA5NjY6XHRcdCAqL1xuIDk2NzpcdFx0aWYgKHVubGlrZWx5KCFza19vdGhlcikpIHtcbiA5Njg6XHRcdFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xuIDk2OTpcdFx0XHRzb2NrX2Ryb3AoZnJvbS1cdTAwM2Vzaywgc2tiKTtcbiA5NzA6XHRcdFx0cmV0dXJuIC1FSU87XG4gOTcxOlx0XHR9XG4gOTcyOlx0XHRwc29ja19vdGhlciA9IHNrX3Bzb2NrKHNrX290aGVyKTtcbiA5NzM6XHRcdC8qIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoZSBzb2NrZXQgaXMgYmVpbmcgdG9ybiBkb3duIG9yIGhhZCBhbm90aGVyXG4gOTc0Olx0XHQgKiBlcnJvciB0aGF0IGNhdXNlZCB0aGUgcGlwZSB0byBicmVhay4gV2UgY2FuJiMzOTt0IHNlbmQgYSBwYWNrZXQgb25cbiA5NzU6XHRcdCAqIGEgc29ja2V0IHRoYXQgaXMgaW4gdGhpcyBzdGF0ZSBzbyB3ZSBkcm9wIHRoZSBza2IuXG4gOTc2Olx0XHQgKi9cbiA5Nzc6XHRcdGlmICghcHNvY2tfb3RoZXIgfHwgc29ja19mbGFnKHNrX290aGVyLCBTT0NLX0RFQUQpKSB7XG4gOTc4Olx0XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbiA5Nzk6XHRcdFx0c29ja19kcm9wKGZyb20tXHUwMDNlc2ssIHNrYik7XG4gOTgwOlx0XHRcdHJldHVybiAtRUlPO1xuIDk4MTpcdFx0fVxuIDk4MjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4gOTgzOlx0XHRpZiAoIXNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2tfb3RoZXIsIFNLX1BTT0NLX1RYX0VOQUJMRUQpKSB7XG4gOTg0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBzb2NrX290aGVyLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTIKCQkJCQkJCW91dHB1dDogMjMxCgkJCQkJCQl0aG91Z2h0czogODY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb24gb2YgU2VsZi1SZWRpcmVjdCBJbmdyZXNzIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgaW50cm9kdWNlcyBhIGNoZWNrIHdpdGhpbiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseSgpYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHNheWluZyB0aGF0IGlmIGEgQlBGIHByb2dyYW0gZGVjaWRlcyB0byByZWRpcmVjdCBhIHBhY2tldCAoYF9fU0tfUkVESVJFQ1RgKSBiYWNrIHRvIHRoZSAqc2FtZSogc29ja2V0IChgcHNvY2stJmd0O3NrYCksIGFuZCB0aGlzIGlzIGhhcHBlbmluZyBpbiBpbmdyZXNzIG1vZGUsIHRoZW4gd2Ugc2hvdWxkIHRyZWF0IHRoYXQgdmVyZGljdCBhcyBhIHNpbXBsZSBwYXNzIChgX19TS19QQVNTYCkuIFRoZSByYXRpb25hbGUgaXMgdGhhdCByZWRpcmVjdGluZyBhIHBhY2tldCB0byBpdHNlbGYgaW4gaW5ncmVzcyBpcyBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsIHRvIGp1c3QgcGFzc2luZyBpdCBkaXJlY3RseSB0byB0aGUgc29ja2V0JiMzOTtzIGluZ3Jlc3MgcXVldWUgKHVzaW5nIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmKClgKSwgd2hpY2ggYXZvaWRzIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBsb2NraW5nIG9yIHF1ZXVpbmcgcHJvYmxlbXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZSByZWRpcmVjdCBwYXRoLgoKTm93LCBmb3IgdGhlIGNyaXRpY2FsIEtNU0FOIGFzc2Vzc21lbnQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSByaXNrcyBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeToKCiogICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgY29weWluZyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuCiogICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUtZGVwZW5kZW50IGNvbmRpdGlvbmFsIGxvZ2ljPyoqIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGB2ZXJkaWN0YCwgYHNrYmAsIGBwc29ja2ApIGFyZSBhbGwgZnVsbHkgaW5pdGlhbGl6ZWQuIGB2ZXJkaWN0YCBpcyBhbiBleHBsaWNpdCBpbnRlZ2VyIGFyZ3VtZW50IGFuZCBgc2tiYCBhbmQgYHBzb2NrYCBhcmUgcG9pbnRlcnMgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLgoqICAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24/KiogTm8gbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggaW5pdGlhbGl6YXRpb25zIGhlcmUuCiogICAqKkJvdW5kcyBjaGVja3MvbG9naWMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlcz8qKiBObyBtYW5pcHVsYXRpb24gb2YgYnVmZmVyIGxlbmd0aCBvciBvZmZzZXRzIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2gganVzdCBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB0aGUgdmVyZGljdCwgbm90IHRoZSBkYXRhIGl0c2VsZi4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhhY2VyYmF0ZSBhbnkgS01TQU4tcmVsZXZhbnQgcmlza3MuIFRoZSBjaGFuZ2UgaXMgc2ltcGx5IGEgY29udHJvbCBmbG93IG1vZGlmaWNhdGlvbiwgY2hhbmdpbmcgdGhlIGhhbmRsaW5nIG9mIGEgc3BlY2lmaWMsIHNlbGYtcmVkaXJlY3RpbmcgaW5ncmVzcyBzY2VuYXJpby4gTWVtb3J5IHNhZmV0eSBjb25jZXJucywgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcywgYXJlIHNxdWFyZWx5IGluIHRoZSByZWFsbSBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLgoKVGhlcmVmb3JlLCBubyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5lY2Vzc2FyeS4gVGhpcyBpcyBhIGNsZWFyIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGF0IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDExOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKWAgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIHRvIHRyZWF0IGluZ3Jlc3MgcmVkaXJlY3Rpb24gdG8gdGhlIHNvY2tldCYjMzk7cyBvd24gcHNvY2sgKGB2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXHUwMDI2XHUwMDI2IHNrYl9icGZfaW5ncmVzcyhza2IpIFx1MDAyNlx1MDAyNiBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stXHUwMDNlc2tgKSBhcyBgX19TS19QQVNTYC5cblxuVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNvbnRyb2wgZmxvdyBjaGFuZ2UgdGhhdCBkaXJlY3RzIHNlbGYtcmVkaXJlY3RlZCBza2JzIHRvIHRoZSBgX19TS19QQVNTYCBjb2RlIHBhdGggKGBza19wc29ja19za2JfaW5ncmVzc19zZWxmKClgKSByYXRoZXIgdGhhbiBjYWxsaW5nIGBza19wc29ja19za2JfcmVkaXJlY3QoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvb2Zmc2V0IGJvdW5kcyBpbiBhbiB1bmluaXRpYWxpemVkIG1hbm5lciwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHNvY2tldCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBidWZmZXIgbGlmZWN5Y2xlIGlzc3VlcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gVGh1cywgS01TQU4gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKWAgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIHRvIHRyZWF0IGluZ3Jlc3MgcmVkaXJlY3Rpb24gdG8gdGhlIHNvY2tldCYjMzk7cyBvd24gcHNvY2sgKGB2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXHUwMDI2XHUwMDI2IHNrYl9icGZfaW5ncmVzcyhza2IpIFx1MDAyNlx1MDAyNiBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stXHUwMDNlc2tgKSBhcyBgX19TS19QQVNTYC5cblxuVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNvbnRyb2wgZmxvdyBjaGFuZ2UgdGhhdCBkaXJlY3RzIHNlbGYtcmVkaXJlY3RlZCBza2JzIHRvIHRoZSBgX19TS19QQVNTYCBjb2RlIHBhdGggKGBza19wc29ja19za2JfaW5ncmVzc19zZWxmKClgKSByYXRoZXIgdGhhbiBjYWxsaW5nIGBza19wc29ja19za2JfcmVkaXJlY3QoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvb2Zmc2V0IGJvdW5kcyBpbiBhbiB1bmluaXRpYWxpemVkIG1hbm5lciwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHNvY2tldCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBidWZmZXIgbGlmZWN5Y2xlIGlzc3VlcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gVGh1cywgS01TQU4gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6MzIuNjM5MzA2NTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0NDAzMjIzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19wc29ja192ZXJkaWN0X2FwcGx5XCIsXG4gICAgXCJza19wc29ja19zdHJwX3JlYWRcIixcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfcmVjdlwiLFxuICAgIFwic2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBza19wc29ja192ZXJkaWN0X2FwcGx5KClgIGluIGBuZXQvY29yZS9za21zZy5jYCB0byB0cmVhdCBpbmdyZXNzIHJlZGlyZWN0aW9uIHRvIHRoZSBzb2NrZXQncyBvd24gcHNvY2sgKGB2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXFx1MDAyNlxcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXFx1MDAyNlxcdTAwMjYgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVxcdTAwM2Vza2ApIGFzIGBfX1NLX1BBU1NgLlxcblxcblRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjb250cm9sIGZsb3cgY2hhbmdlIHRoYXQgZGlyZWN0cyBzZWxmLXJlZGlyZWN0ZWQgc2ticyB0byB0aGUgYF9fU0tfUEFTU2AgY29kZSBwYXRoIChgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZigpYCkgcmF0aGVyIHRoYW4gY2FsbGluZyBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbHRlciBidWZmZXIgbGVuZ3RoL29mZnNldCBib3VuZHMgaW4gYW4gdW5pbml0aWFsaXplZCBtYW5uZXIsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgYnVmZmVyIGxpZmVjeWNsZSBpc3N1ZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcuIFRodXMsIEtNU0FOIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHZlcmRpY3QgYXBwbGljYXRpb24gbG9naWMgaW4gQlBGIHNvY2ttYXAvcHNvY2sgbWVzc2FnZSBoYW5kbGluZyAobmV0L2NvcmUvc2ttc2cuYyksIHRyZWF0aW5nIGluZ3Jlc3MgcmVkaXJlY3QgdG8gdGhlIHNlbGYgc29ja2V0IGFzIGEgcGFzcyB2ZXJkaWN0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcvQlBGIHBhdGggaXMgZGlyZWN0bHkgZXhlcmNpc2VhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB2aWEgc29ja21hcCB2ZXJkaWN0IHByb2dyYW1zIGFuZCBzb2NrZXQgSS9PLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTozMi42MzkzMTM5MzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDAxNzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQwMDdlMzdhNTgwOTA0NmUyNTg4YzM5MjViZDVkYmU1Mzg3YmM4MDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAxMTo1NTozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xcbmluZGV4IDI1MjFiNjQzZmEwNWQuLmRmMzg1YTVhOTYxZTggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xcbisrKyBiL25ldC9jb3JlL3NrbXNnLmNcXG5AQCAtMTAwMCw2ICsxMDAwLDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFx0dTMyIGxlbiwgb2ZmO1xcbiBcXG4rXFx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcXHUwMDI2XFx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVxcdTAwM2VzaylcXG4rXFx0XFx0dmVyZGljdCA9IF9fU0tfUEFTUztcXG4rXFxuIFxcdHN3aXRjaCAodmVyZGljdCkge1xcbiBcXHRjYXNlIF9fU0tfUEFTUzpcXG4gXFx0XFx0ZXJyID0gLUVJTztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6MzMuMzYwMjIxOTAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNTk0ODY1MzE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIk5FVF9TT0NLX01TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlcIixcbiAgICBcInNrX3Bzb2NrX3N0cnBfcmVhZFwiLFxuICAgIFwic2tfcHNvY2tfdmVyZGljdF9yZWN2XCIsXG4gICAgXCJza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdmVyZGljdCBhcHBsaWNhdGlvbiBsb2dpYyBpbiBCUEYgc29ja21hcC9wc29jayBtZXNzYWdlIGhhbmRsaW5nIChuZXQvY29yZS9za21zZy5jKSwgdHJlYXRpbmcgaW5ncmVzcyByZWRpcmVjdCB0byB0aGUgc2VsZiBzb2NrZXQgYXMgYSBwYXNzIHZlcmRpY3QuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZy9CUEYgcGF0aCBpcyBkaXJlY3RseSBleGVyY2lzZWFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzIHZpYSBzb2NrbWFwIHZlcmRpY3QgcHJvZ3JhbXMgYW5kIHNvY2tldCBJL08uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDAwN2UzN2E1ODA5MDQ2ZTI1ODhjMzkyNWJkNWRiZTUzODdiYzgwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xuaW5kZXggMjUyMWI2NDNmYTA1ZC4uZGYzODVhNWE5NjFlOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcbisrKyBiL25ldC9jb3JlL3NrbXNnLmNcbkBAIC0xMDAwLDYgKzEwMDAsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpbnQgZXJyID0gMDtcbiBcdHUzMiBsZW4sIG9mZjtcbiBcbitcdGlmICh2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXHUwMDI2XHUwMDI2IHNrYl9icGZfaW5ncmVzcyhza2IpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cdTAwM2VzaylcbitcdFx0dmVyZGljdCA9IF9fU0tfUEFTUztcbitcbiBcdHN3aXRjaCAodmVyZGljdCkge1xuIFx0Y2FzZSBfX1NLX1BBU1M6XG4gXHRcdGVyciA9IC1FSU87XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTozMy4zNjAyMjQ2MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzEzNTIzOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgU29ja2V0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL3NrbXNnLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCdzIGFkZGluZyBhIG5ldyBjb25kaXRpb25hbCBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24sIHJpZ2h0IGJlZm9yZSB0aGUgdmVyZGljdCBzd2l0Y2guIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXM6XG5cbmBgYGNcblx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcdTAwMjZcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2XG5cdCAgICBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stXHUwMDNlc2spXG5cdFx0dmVyZGljdCA9IF9fU0tfUEFTUztcbmBgYFxuXG5Fc3NlbnRpYWxseSwgaXQncyBjaGVja2luZyBmb3IgYSByZWRpcmVjdCB2ZXJkaWN0IGluIGEgc3BlY2lmaWMgc2NlbmFyaW8uIEl0IGxvb2tzIGxpa2UgaXQgaXMgY2hlY2tpbmcgaWYgdGhlIHBhY2tldCBpcyBiZWluZyByZWRpcmVjdGVkIHVzaW5nIEJQRiAoYHNrYl9icGZfaW5ncmVzc2AsIGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoYCksIGFuZCBhbHNvIHRoYXQgaXQncyBiZWluZyByZWRpcmVjdGVkIGJhY2sgdG8gdGhlIHNhbWUgc29ja2V0IChgcHNvY2stXHUwMDNlc2tgKS4gSWYgdGhlc2UgY29uZGl0aW9ucyBhcmUgbWV0LCB0aGUgdmVyZGljdCBpcyBjaGFuZ2VkIGZyb20gYF9fU0tfUkVESVJFQ1RgIHRvIGBfX1NLX1BBU1NgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIHNwZWNpZmljIHNjZW5hcmlvPyBXaGF0IGlzIHRoZSAqaW50ZW5kZWQqIGJlaGF2aW9yIGJlaW5nIG1vZGlmaWVkIGhlcmU/IFdoYXQgaXMgdGhlICpjdXJyZW50KiBiZWhhdmlvciB3aXRob3V0IHRoaXMgY2hhbmdlP1xuXG5JIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xzIHRvIGRvIHRoaXM6XG5cbjEuICAqKkNvZGUgRXhwbG9yYXRpb246KiogSSdsbCB1c2UgdG9vbHMgbGlrZSBgZ3JlcHBlcmAgb3IganVzdCByZWFkaW5nIHRoZSBmaWxlIHdpdGggYHJlYWQtZmlsZWAgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGhvdyBgc2tiX2JwZl9pbmdyZXNzYCBhbmQgYHNrYl9icGZfcmVkaXJlY3RfZmV0Y2hgIHdvcmssIGFuZCB0aGUgcm9sZXMgb2YgYHNrX3Bzb2NrYCBhbmQgYHNrYmAgaW4gdGhlIHByb2Nlc3MuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgKmNhbGxlZCogYW5kIHdoYXQgZGljdGF0ZXMgdGhlIGB2ZXJkaWN0YCB2YWx1ZSB0aGF0J3MgYmVpbmcgcGFzc2VkIGluLlxuMi4gICoqQ29uZmlndXJhdGlvbiBDaGVjazoqKiBJJ2xsIGFsc28gY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGlzIHBhdGguIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgY29kZSBwYXRoIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gY2VydGFpbiBzZXR0aW5ncy4gS25vd2luZyB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCAob3Igd2hpY2ggZGlzYWJsZSB0aGlzKSBpcyBjcml0aWNhbC5cbjMuICAqKlJlYWNoYWJpbGl0eToqKiBGaW5hbGx5LCBJJ2xsIGFzc2VzcyB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoaXMgbmV3IGNvZGUuIElzIHRoaXMgYSBob3QgcGF0aCwgb3IgYSByYXJlbHktdGFrZW4gb25lPyBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgYmVoYXZpb3IgaXMgdHJpZ2dlcmVkIGluIGEgcHJhY3RpY2FsIHNldHRpbmcuIFBlcmhhcHMgdHJhY2luZyBvciBzb21lIG90aGVyIGFuYWx5c2lzIGlzIGluIG9yZGVyLiBUaGlzIHdpbGwgaGVscCBtZSBldmFsdWF0ZSB0aGUgY2hhbmdlJ3MgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBzeXN0ZW0gYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTozOS4wNzM3NTExODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk4MTpcXHRcXHR9XFxuIDk4MjpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbiA5ODM6XFx0XFx0aWYgKCFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrX290aGVyLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbiA5ODQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbiA5ODU6XFx0XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbiA5ODY6XFx0XFx0XFx0c29ja19kcm9wKGZyb20tXFx1MDAzZXNrLCBza2IpO1xcbiA5ODc6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk4ODpcXHRcXHR9XFxuIDk4OTpcXHRcXG4gOTkwOlxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XFxuIDk5MTpcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2V3b3JrLCAwKTtcXG4gOTkyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4gOTkzOlxcdFxcdHJldHVybiAwO1xcbiA5OTQ6XFx0fVxcbiA5OTU6XFx0XFxuIDk5NjpcXHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gOTk3OlxcdFxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuIDk5ODpcXHR7XFxuIDk5OTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfb3RoZXI7XFxuMTAwMDpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMDAxOlxcdFxcdHUzMiBsZW4sIG9mZjtcXG4xMDAyOlxcdFxcbjEwMDM6XFx0XFx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcXHUwMDI2XFx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcXHUwMDI2XFx1MDAyNlxcbjEwMDQ6XFx0XFx0ICAgIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cXHUwMDNlc2spXFxuMTAwNTpcXHRcXHRcXHR2ZXJkaWN0ID0gX19TS19QQVNTO1xcbjEwMDY6XFx0XFxuMTAwNzpcXHRcXHRzd2l0Y2ggKHZlcmRpY3QpIHtcXG4xMDA4OlxcdFxcdGNhc2UgX19TS19QQVNTOlxcbjEwMDk6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4xMDEwOlxcdFxcdFxcdHNrX290aGVyID0gcHNvY2stXFx1MDAzZXNrO1xcbjEwMTE6XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxcbjEwMTI6XFx0XFx0XFx0ICAgICFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSlcXG4xMDEzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTAxNDpcXHRcXG4xMDE1OlxcdFxcdFxcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcXG4xMDE2OlxcdFxcbjEwMTc6XFx0XFx0XFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxcbjEwMTg6XFx0XFx0XFx0ICogaW50byB0aGUgbXNnIHF1ZXVlLiBJZiBpdHMgbm90IGVtcHR5IHdlIGhhdmUgdG9cXG4xMDE5OlxcdFxcdFxcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcXG4xMDIwOlxcdFxcdFxcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcXG4xMDIxOlxcdFxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbjEwMjI6XFx0XFx0XFx0ICovXFxuMTAyMzpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuMTAyNDpcXHRcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDI1OlxcdFxcdFxcdFxcdG9mZiA9IDA7XFxuMTAyNjpcXHRcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbjEwMjc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xcbjEwMjg6XFx0XFxuMTAyOTpcXHRcXHRcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG4xMDMwOlxcdFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuMTAzMTpcXHRcXHRcXHRcXHR9XFxuMTAzMjpcXHRcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuMTAzMzpcXHRcXHRcXHR9XFxuMTAzNDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjEwMzU6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDM2OlxcdFxcdFxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbjEwMzc6XFx0XFx0XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmssIDApO1xcbjEwMzk6XFx0XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6MzkuMDczODg4ODM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE2MDExOTMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvbXBpbGF0aW9uIGFuZCBDb25maWd1cmF0aW9uIG9mIGBuZXQvY29yZS9za21zZy5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBwcm9jZXNzIGZvciBgbmV0L2NvcmUvc2ttc2cuY2AuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGEgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudCwgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIGl0IHRvIGNvbXBpbGUgYW5kIGZ1bmN0aW9uIGNvcnJlY3RseSB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IEtjb25maWcgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBpdHMgaW5jbHVzaW9uLCBhbmQgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGxpYnJhcmllcyBpdCByZWxpZXMgdXBvbi4gRXNzZW50aWFsbHksIEknbSBhaW1pbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBidWlsZC10aW1lIGVudmlyb25tZW50LiBUaGF0IHNob3VsZCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgaG93IEkgY2FuLCBwZXJoYXBzLCBpbmZsdWVuY2UgaXRzIGJlaGF2aW9yIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB0aGUgTWFrZWZpbGUgc3RydWN0dXJlIGluIHRoYXQgZGlyZWN0b3J5Li4uIHByb2JhYmx5IGBuZXQvY29yZS9NYWtlZmlsZWAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGFyY2hpdGVjdHVyZSBvciBrZXJuZWwgdmVyc2lvbiBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo0Mi4yMzQwMTEwODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NTUyNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrbXNnXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHNrbXNnLm9cXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6NDIuMzUyNTcyOTEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5OTgxODQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgUmVsZXZhbnQgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gY29uY2VybmluZyBCUEYgYW5kIG5ldHdvcmtpbmcgY2FwYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBzb21lIGtleSBvcHRpb25zLiBGaXJzdCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gVGhpcyBvbmUgc2VlbXMgaW1wb3J0YW50IOKAkyBpdCdzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgc29ja2V0IG1lc3NhZ2luZywgd2hpY2ggaXMgZnVuZGFtZW50YWwgZm9yIGFueSBCUEYtcmVsYXRlZCBuZXR3b3JrIGFuYWx5c2lzIG9yIG1hbmlwdWxhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBwYXRocyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIEJQRiBwcm9ncmFtcy5cblxuTmV4dCwgSSdsbCB0dXJuIG15IGF0dGVudGlvbiB0byBgQ09ORklHX0JQRl9TWVNDQUxMYC4gT2J2aW91c2x5LCB0aGlzIGlzIGNydWNpYWwuIEl0IGRpcmVjdGx5IGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBCUEYgc3lzdGVtIGNhbGwgaXMgZW5hYmxlZCBhdCBhbGwuIFdpdGhvdXQgdGhpcywgdGhlcmUncyBubyB3YXkgYW55IEJQRiBwcm9ncmFtIGNhbiBiZSBsb2FkZWQgb3IgZXhlY3V0ZWQuIEEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc2V0dGluZywgaXRzIGRlcGVuZGVuY2llcywgYW5kIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgLiBUaGlzIHNvdW5kcyBpbnRlcmVzdGluZy4gSSBzdXNwZWN0IHRoaXMgaXMgcmVsYXRlZCB0byBzdHJlYW0gcGFyc2luZyBjYXBhYmlsaXRpZXMgd2l0aGluIEJQRiwgcG9zc2libHkgb2ZmZXJpbmcgZnVuY3Rpb25hbGl0eSB0byBhbmFseXplIGFuZCBtYW5pcHVsYXRlIGRhdGEgc3RyZWFtcyBhdCBhIGxvd2VyIGxldmVsIHRoYW4gc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgdGhpcyBjb25maWd1cmF0aW9uIGlzIGtleSB0byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyByZWxhdGlvbnNoaXBzIHdpdGggdGhlIG90aGVyIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgZW5hYmxlIHRoZSBkZXNpcmVkIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjA2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6NDUuNDUyMzk1MjM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDczNzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NPQ0tfTVNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ3OC1cXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTQ4MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU1OjQ1LjU4NzEzOTM4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTU2NDgzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERlY2lwaGVyaW5nIHRoZSBORVRfU09DS19NU0cgU2VsZWN0b3IqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIG1lbnRhbGx5IHRyYWNpbmcgdGhlIGNvZGUgcGF0aHMgdGhhdCBhcmUgZ29pbmcgdG8gcGljayB0aGUgYE5FVF9TT0NLX01TR2Agc2VsZWN0b3IuIFdoYXQgY29udGV4dCBhcmUgd2UgaW4/IElzIGl0IGEga2VybmVsIG1vZHVsZT8gVXNlci1zcGFjZSBhcHBsaWNhdGlvbj8gVGhlIGltcGxpY2F0aW9ucyBhcmUgdmFzdGx5IGRpZmZlcmVudC4gSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgbGlrZWx5IHNjZW5hcmlvcyBpbiBteSBoZWFkOiBuZXR3b3JrIHN0YWNrIGludGVyYWN0aW9ucywgc29ja2V0IGltcGxlbWVudGF0aW9ucywgbWVzc2FnZSBxdWV1aW5nLCBhbmQgc28gb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgc2VsZWN0aW9uIGlzICpoYXBwZW5pbmcqIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHVuZGVyc3RhbmQgKndoeSouIFRoaXMgc2VsZWN0aW9uIG1lY2hhbmlzbSDigJMgd2hldGhlciBpdCdzIGFuIGV2ZW50IGxvb3AsIGludGVycnVwdCBoYW5kbGVyLCBvciBzb21lIG90aGVyIHBvbGxpbmcgc3RyYXRlZ3kg4oCTIGlzIGtleS4gSSdtIGFscmVhZHkgZW52aXNpb25pbmcgdGhlIHBvc3NpYmxlIGJvdHRsZW5lY2tzIGFuZCByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBhcmlzZSBkZXBlbmRpbmcgb24gdGhlIGNob3NlbiBjb250ZXh0LiBJcyB0aGlzIGEgbmV3IHBpZWNlIG9mIGNvZGUsIG9yIGFtIEkgZGVidWdnaW5nIGFuIGV4aXN0aW5nIHN5c3RlbT8gVGhlIGltcGxpY2F0aW9ucyBjaGFuZ2UgdGhlIGFwcHJvYWNoIEknbGwgdGFrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY0NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU1OjQ3Ljg4Mjc5MjYwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzMTA5OTcxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTkVUX1NPQ0tfTVNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0zMT1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0zNy1cXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbmtlcm5lbC9icGYvS2NvbmZpZzozODpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbmtlcm5lbC9icGYvS2NvbmZpZy0zOS1cXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4tLVxcbm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4tLVxcbm5ldC9LY29uZmlnLTM2Ni1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnOjM2NzpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctMzY4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY0L0tjb25maWc6Mzg2OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTMtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2Ni9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19HQ01cXG5uZXQvdGxzL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC90bHMvS2NvbmZpZy0xMi1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6NTEuMjEzODk5NzMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODQ1MDcwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIGBORVRfU09DS19NU0dgIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBmbG93IG9mIGBORVRfU09DS19NU0dgIGFuZCBob3cgaXQncyBiZWluZyB1c2VkLiBJIGtub3cgaXQncyBzZWxlY3RlZCDigJMgb3IgYXQgbGVhc3QgaW52b2x2ZWQg4oCTIGJ5IHRoaW5ncyBsaWtlIGBCUEZfU1lTQ0FMTGAgd2hlbiBgTkVUYCBpcyBlbmFibGVkLCBgQlBGX1NUUkVBTV9QQVJTRVJgLCBhbmQgZXZlbiBUTFMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcmVhbGx5IHVuZGVyc3RhbmQgKmhvdyogaXQncyBiZWluZyB1c2VkIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIHZlcmRpY3QgaXMgYXBwbGllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNhbGxpbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBJ4oCZbSBnb2luZyB0byBleGFtaW5lIHRoZSBjYWxsIGdyYXBoIGFuZCBvdGhlciBmdW5jdGlvbnMgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIHRvIHNlZSB0aGUgZW50aXJlIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI4OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU1OjUzLjA5ODQxMTM0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MDk1MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9OTU4PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTk1LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTk2OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtOTk3LVxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEwNzk9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExMDItXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTEwMzpcXHRza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMTA0LW91dDpcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTIwMj1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMjUtXFx0fVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIyNjpcXHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjI3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo1My4yNjY1MTI1NzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIzMTk4NTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBgc2tfcHNvY2tgIFZlcmRpY3QgQXBwbGljYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMuIEkgc2VlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGdvb2QsIGl0J3Mgc2NvcGVkIGFuZCBzdWdnZXN0cyBhIHNwZWNpZmljLCBpbnRlcm5hbCBwdXJwb3NlIHdpdGhpbiB0aGlzIGBza19wc29ja2AgbW9kdWxlLiBUaGUgY2x1ZXMgdGVsbCBtZSBpdCdzIGNhbGxlZCBieSBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAuIFRoYXQncyB0aGUgaW1wb3J0YW50IGJpdCB0byB1bmRlcnN0YW5kLiBTbywgd2hlcmUgYXJlIHRob3NlIHR3byBmdW5jdGlvbnMsIGBza19wc29ja19zdHJwX3JlYWRgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCBiZWluZyBjYWxsZWQgb3IgZXN0YWJsaXNoZWQ/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhvc2UgcG9pbnRzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aG9zZSB0d28gZnVuY3Rpb25zLiBJIHN1c3BlY3QgdGhlaXIgc2V0dXAgYW5kIGNhbGwgc2l0ZXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhpcyB3aG9sZSB2ZXJkaWN0IGFwcGxpY2F0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyogd2l0aGluIHRoZSBgc2tfcHNvY2tgIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgYW55IHJlbGF0ZWQgY29uZGl0aW9ucyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTMxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTU6NTUuNDk4NTAzMjYzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEwMDg3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfcHNvY2tfdmVyZGljdF9yZWN2fHNrX3Bzb2NrX3N0cnBfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz0xMDYxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA3OC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2NvcmUvc2ttc2cuYzoxMDc5OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTA4MC17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExMDctXFxubmV0L2NvcmUvc2ttc2cuYzoxMTA4OnN0YXRpYyBpbnQgc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgaW50IGVycilcXG5uZXQvY29yZS9za21zZy5jLTExMDkte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMTQ3PWludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTUxLVxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RycF9jYWxsYmFja3MgY2IgPSB7XFxubmV0L2NvcmUvc2ttc2cuYzoxMTUyOlxcdFxcdC5yY3ZfbXNnXFx0PSBza19wc29ja19zdHJwX3JlYWQsXFxubmV0L2NvcmUvc2ttc2cuYzoxMTUzOlxcdFxcdC5yZWFkX3NvY2tfZG9uZVxcdD0gc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUsXFxubmV0L2NvcmUvc2ttc2cuYy0xMTU0LVxcdFxcdC5wYXJzZV9tc2dcXHQ9IHNrX3Bzb2NrX3N0cnBfcGFyc2UsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTExOTc9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMDEtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjAyOnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za21zZy5jLTEyMDMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjM0PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNTAtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjUxOlxcdGNvcGllZCA9IG9wcy1cXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjUyLVxcdGlmIChjb3BpZWQgXFx1MDAzZT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NTo1NS43Mjk1MjA0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjMxMDE5OTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBTb2NrbWFwL1NvY2toYXNoIFZlcmRpY3QgTG9naWMgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHRhcmdldHMgYSBjcml0aWNhbCBwaWVjZSBvZiBCUEYgc29ja21hcC9zb2NraGFzaCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgbmV0L2NvcmUvc2ttc2cuY2AuIFNwZWNpZmljYWxseSwgaXQgY29uY2VybnMgdGhlIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBmdW5jdGlvbiwgd2hpY2ggaXMgaW52b2tlZCB3aGVuIGEgQlBGIHByb2dyYW0gKHVzaW5nIGBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNUYCBvciBzaW1pbGFyKSBhdHRhY2hlZCB0byBhIHNvY2ttYXAvc29ja2hhc2ggbWFrZXMgYSB2ZXJkaWN0IG9uIGluY29taW5nIHNvY2tldCBkYXRhLiBUaGUgY29yZSBsb2dpYyBpbnZvbHZlcyBzaXR1YXRpb25zIHdoZXJlIHRoZSBCUEYgcHJvZ3JhbSByZWRpcmVjdHMgZGF0YSB0byB0aGUgaW5ncmVzcyBvZiB0aGUgKnNhbWUqIHNvY2tldCwgb3IgcmV0dXJucyBgX19TS19SRURJUkVDVGAgd2l0aCBpbmdyZXNzIHRvIGBwc29jay1cdTAwM2Vza2AuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBzdGFuZGFyZCBuZXR3b3JraW5nIGFuZCBCUEYuIEl0J3MgZnVsbHkgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc3lzY2FsbHMgbGlrZSBgYnBmKClgLCBgc29ja2V0KClgLCBgc2VuZCgpYCwgYW5kIGByZWN2KClgLiBUaGUga2V5IGlzIHJlZGlyZWN0aW5nIGRhdGEgKmJhY2sqIHRvIHRoZSBvcmlnaW5hbCBzb2NrZXQuXG5cbkZpcnN0LCBsZXQncyB2ZXJpZnkgbXkgYXNzdW1wdGlvbnMuIFRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGFwcGVhciB0byBiZSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19ORVRfU09DS19NU0dgIChvciBwb3NzaWJseSBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBDT05GSUdfTkVUYCkuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhvc2UgaW4gdGhlIEtjb25maWcgZmlsZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZnVuY3Rpb24sIHdoaWNoLCBmb3J0dW5hdGVseSwgaXNuJ3QgaW5saW5lLCBzbyBJIGNhbiBlYXNpbHkgdHJhY2UgaXQuIEkgc2VlIHRoYXQgaXQncyBhIHN0YXRpYyBDIGZ1bmN0aW9uIGluIGBuZXQvY29yZS9za21zZy5jYCwgd2l0aCBjYWxsZXJzIGluY2x1ZGluZyBgc2tfcHNvY2tfc3RycF9yZWFkYCwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAsIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YC5cblxuTm93LCBsZXQncyBlbnN1cmUgSSd2ZSBjb3ZlcmVkIGFsbCB0aGUgYmFzZXMuXG5cbjEuICAqKlJlYWNoYWJsZT8qKiBZZXMsIEJQRiBzb2NrbWFwL3NvY2toYXNoIHdpdGggc3RyZWFtL3NrYiB2ZXJkaWN0IHByb2dyYW1zIHJlZGlyZWN0aW5nIHRyYWZmaWMgdG8gc29ja2V0cyBpcyB2ZXJ5IHRlc3RhYmxlIGZyb20gdXNlci1zcGFjZSwgYW5kIGhhcyBiZWVuIGFjdGl2ZWx5IGZ1enplZCBieSBzeXprYWxsZXIuIE5vIHN1cnByaXNlcyB0aGVyZS5cbjIuICAqKkxvZ2ljIENoYW5nZToqKiBUaGUgY3J1eCBpcyB0aGlzOiBpZiBhIEJQRiB2ZXJkaWN0IHByb2dyYW0sIHVzaW5nIGBCUEZfRl9JTkdSRVNTYCByZWRpcmVjdHMgdG8gdGhlICpzYW1lKiBzb2NrZXQgKGBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stXHUwMDNlc2tgKSwgdGhlIHZlcmRpY3Qgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBgX19TS19QQVNTYC4gVGhpcyBieXBhc3NlcyB0aGUgcmVkaXJlY3Rpb24gYW5kIHNlbmRzIGl0IGRpcmVjdGx5IHRvIHRoZSBzb2NrZXQgaW5ncmVzcy5cbjMuICAqKkZvY3VzIFN5bWJvbHM6KiogSSdtIGtlZXBpbmcgbXkgZXllIG9uIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgYHNrX3Bzb2NrX3N0cnBfcmVhZGAsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAuXG40LiAgKipFbmFibGUgQ29uZmlndXJhdGlvbnM6KiogYEJQRl9TWVNDQUxMYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBORVRfU09DS19NU0dgLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRob3NlIGNvbmZpZyBuYW1lcyBhbmQgYW55IGRlcGVuZGVuY2llcy5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSB0YXJnZXRlZCB0d2VhayB0byBob3cgc29ja21hcC9zb2NraGFzaCByZWRpcmVjdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaW5ncmVzcyBwYXRoIG9mIHRoZSBzYW1lIHNvY2tldC4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB0byB2ZXJpZnkgYW5kIHRlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NzEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MDEuMzYwNTQzODU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA2MzI2MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChCUEZfU1RSRUFNX1BBUlNFUnxCUEZfU1lTQ0FMTHxORVRfU09DS19NU0cpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxcbi0tXFxubmV0L0tjb25maWctMzYwLVxcbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZy0zNjItXFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcbi0tXFxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXFxuLS1cXG5uZXQvS2NvbmZpZy00NzgtXFxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy00ODAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowMS42MTExODU1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgxNDc3OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBgQlBGX1NUUkVBTV9QQVJTRVJgIERlcGVuZGVuY2llcyBpbiBgbmV0L0tjb25maWdgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBhZmZlY3RlZCBieSB0aGUgYEJQRl9TVFJFQU1fUEFSU0VSYCBvcHRpb24uIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzLCBhbnkgY29uZmxpY3RzLCBhbmQgZ2VuZXJhbGx5IGp1c3QgbWFwIG91dCBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBJIHdhbnQgdG8gZW5zdXJlIHRoYXQgaWYgc29tZW9uZSBlbmFibGVzIG9yIGRpc2FibGVzIGBCUEZfU1RSRUFNX1BBUlNFUmAsIHRoZSBjb3JyZWN0IG90aGVyIG9wdGlvbnMgYXJlIGFsc28gZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHRoZXJlIGFyZSBubyB1bmV4cGVjdGVkIGNvbmZsaWN0cyB0aGF0IHdvdWxkIGJyZWFrIHRoaW5ncy4gR290dGEgbWFrZSBzdXJlIGl0IHBsYXlzIG5pY2VseSB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSwgZnJvbSBhIEtjb25maWcgcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgdG8gcHJldmVudCByZWdyZXNzaW9ucy4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzcxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MDMuNDkyNjY4NTM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjA6XFx0XFxuIDM2MTpcXHRjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4gMzYyOlxcdFxcdGJvb2wgXFxcImVuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlxcXCJcXG4gMzYzOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAzNjQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAzNjU6XFx0XFx0ZGVwZW5kcyBvbiBDR1JPVVBfQlBGXFxuIDM2NjpcXHRcXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbiAzNjc6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbiAzNjg6XFx0XFx0aGVscFxcbiAzNjk6XFx0XFx0ICBFbmFibGluZyB0aGlzIGFsbG93cyBhIFRDUCBzdHJlYW0gcGFyc2VyIHRvIGJlIHVzZWQgd2l0aFxcbiAzNzA6XFx0XFx0ICBCUEZfTUFQX1RZUEVfU09DS01BUC5cXG4gMzcxOlxcdFxcbiAzNzI6XFx0Y29uZmlnIE5FVF9GTE9XX0xJTUlUXFxuIDM3MzpcXHRcXHRib29sIFxcXCJOZXQgZmxvdyBsaW1pdFxcXCJcXG4gMzc0OlxcdFxcdGRlcGVuZHMgb24gUlBTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjAzLjQ5MjgyMTE2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjY1NzYzODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6XG5cbioqQlBGX1NZU0NBTEwgQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIEJQRiBzeXNjYWxscy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRob3NlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgQlBGX1NZU0NBTExgIGlzIGEga2V5IGNvbXBvbmVudCwgc28gaXQgc2hvdWxkIGJlIGRlZmluZWQgd2l0aGluLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWUsIGFuZCBoZWxwIHRleHQuIFNwZWNpZmljYWxseSBJIHNob3VsZCBiZSBhYmxlIHRvIGRldGVybWluZSBpZiBpdCBpcyBlbmFibGVkIHdpdGggYW55IG90aGVyIG9wdGlvbnMuIEFuZCBmcm9tIHRoZXJlLCBkZXRlcm1pbmUgaG93IHRoYXQgbWlnaHQgaW1wYWN0IG15IGN1cnJlbnQgZGV2ZWxvcG1lbnQgZWZmb3J0cyBhbmQgZGVidWdnaW5nIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjA1Ljc1ODU4OTgwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAzMjpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAzMzpcXHRcXHRzZWxlY3QgQlBGXFxuICAzNDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDM1OlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzY6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzc6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM4OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzOTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDQwOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICA0MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDQyOlxcdFxcdGhlbHBcXG4gIDQzOlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDQ6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQ3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjA1Ljc1ODcxMTc3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzU4NTI1Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEEgUXVpY2sgUmVjYXAqKlxuXG5Pa2F5LCBzbyB0aGUgcGxhbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gZ2V0IGBzZXQtcmVzdWx0c2AgcnVubmluZywgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSeKAmW0gc2V0dGluZyBpdCB1cCBjb3JyZWN0bHkgZm9yIGZ1enppbmcgdGhpcyBwYXJ0aWN1bGFyIHRhcmdldC4gTGV0J3MgbWFrZSBhIG1lbnRhbCBjaGVja2xpc3QuIEZpcnN0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBJIG5lZWQgYEJQRl9TWVNDQUxMYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBORVRgIChvciwgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpY3MsIHBvc3NpYmx5IGBDR1JPVVBfQlBGYCBvciBgSU5FVGApLiBJIHNob3VsZCBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIG9idmlvdXNseS4gR29vZC5cblxuVGhlIGZ1enppbmcgaXRzZWxmIGlzIGRlZW1lZCBcIldvcnRoRnV6emluZyxcIiBzbyB0aGF0IGZsYWcgaXMgc2V0IHRvIHRydWUuIE5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAsIGBza19wc29ja19zdHJwX3JlYWRgLCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YCwgYW5kIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLiBUaG9zZSBmdW5jdGlvbnMgYXJlIG15IHRhcmdldHMuXG5cbk5vdywgbGV0J3MganVzdCBydW4gdGhyb3VnaCB0aGUgc2V0dXAgcmVxdWlyZW1lbnRzIG9uZSBtb3JlIHRpbWU6IEnigJlsbCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzOiB0aGUgY29uZmlndXJhdGlvbnMsIHRoZSBzeW1ib2xzLCB0aGUgcmVhc29uaW5nLCBhbmQgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcuIFRoYXQncyB0aGUgY29yZS4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IGFzIFwidHJ1ZVwiIGFuZCBJJ2xsIHJlbWVtYmVyIHRvIHN0cmlwIHRoZSBgQ09ORklHX2AgcHJlZml4IGZyb20gdGhlIGBFbmFibGVDb25maWdzYC4gQWxzbywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aG9zZSBmb2N1cyBzeW1ib2xzIGFyZW4ndCBqdXN0IHVuaXZlcnNhbGx5IGF2YWlsYWJsZSBmdW5jdGlvbnM7IHRoZXkgc2hvdWxkIGJlIHNwZWNpZmljIHRvIHRoaXMgdXNlIGNhc2UuXG5cbkFscmlnaHQuIEFzc3VtaW5nIGFsbCBvZiB0aGF0IGNoZWNrcyBvdXQsIGl0J3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGdldCB0aGlzIGZ1enppbmcgcnVuIHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjg1LCJPdXRwdXRUb2tlbnMiOjE3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjA5LjExNzI0MTA1OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTYyNjczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19wc29ja192ZXJkaWN0X2FwcGx5XCIsXG4gICAgXCJza19wc29ja19zdHJwX3JlYWRcIixcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfcmVjdlwiLFxuICAgIFwic2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHZlcmRpY3QgYXBwbGljYXRpb24gbG9naWMgaW4gQlBGIHNvY2ttYXAvcHNvY2sgbWVzc2FnZSBoYW5kbGluZyAobmV0L2NvcmUvc2ttc2cuYyksIHRyZWF0aW5nIGluZ3Jlc3MgcmVkaXJlY3QgdG8gdGhlIHNlbGYgc29ja2V0IGFzIGEgcGFzcyB2ZXJkaWN0LiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcvQlBGIHBhdGggaXMgZGlyZWN0bHkgZXhlcmNpc2VhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyB2aWEgc29ja21hcCB2ZXJkaWN0IHByb2dyYW1zIGFuZCBzb2NrZXQgSS9PLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tfcHNvY2tfdmVyZGljdF9hcHBseVwiLFxuICAgIFwic2tfcHNvY2tfc3RycF9yZWFkXCIsXG4gICAgXCJza19wc29ja192ZXJkaWN0X3JlY3ZcIixcbiAgICBcInNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB2ZXJkaWN0IGFwcGxpY2F0aW9uIGxvZ2ljIGluIEJQRiBzb2NrbWFwL3Bzb2NrIG1lc3NhZ2UgaGFuZGxpbmcgKG5ldC9jb3JlL3NrbXNnLmMpLCB0cmVhdGluZyBpbmdyZXNzIHJlZGlyZWN0IHRvIHRoZSBzZWxmIHNvY2tldCBhcyBhIHBhc3MgdmVyZGljdC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nL0JQRiBwYXRoIGlzIGRpcmVjdGx5IGV4ZXJjaXNlYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgdmlhIHNvY2ttYXAgdmVyZGljdCBwcm9ncmFtcyBhbmQgc29ja2V0IEkvTy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MDkuMzA4ODg0ODE2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc3MDcyNzAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjA5LjMxMDExMDI4NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NzY5NDk0MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBza19wc29ja192ZXJkaWN0X2FwcGx5KClgIGluIGBuZXQvY29yZS9za21zZy5jYCB0byB0cmVhdCBpbmdyZXNzIHJlZGlyZWN0aW9uIHRvIHRoZSBzb2NrZXQncyBvd24gcHNvY2sgKGB2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXFx1MDAyNlxcdTAwMjYgc2tiX2JwZl9pbmdyZXNzKHNrYikgXFx1MDAyNlxcdTAwMjYgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpID09IHBzb2NrLVxcdTAwM2Vza2ApIGFzIGBfX1NLX1BBU1NgLlxcblxcblRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjb250cm9sIGZsb3cgY2hhbmdlIHRoYXQgZGlyZWN0cyBzZWxmLXJlZGlyZWN0ZWQgc2ticyB0byB0aGUgYF9fU0tfUEFTU2AgY29kZSBwYXRoIChgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZigpYCkgcmF0aGVyIHRoYW4gY2FsbGluZyBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbHRlciBidWZmZXIgbGVuZ3RoL29mZnNldCBib3VuZHMgaW4gYW4gdW5pbml0aWFsaXplZCBtYW5uZXIsIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBzb2NrZXQgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgYnVmZmVyIGxpZmVjeWNsZSBpc3N1ZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcuIFRodXMsIEtNU0FOIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDAwN2UzN2E1ODA5MDQ2ZTI1ODhjMzkyNWJkNWRiZTUzODdiYzgwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTE6NTU6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xuaW5kZXggMjUyMWI2NDNmYTA1ZC4uZGYzODVhNWE5NjFlOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcbisrKyBiL25ldC9jb3JlL3NrbXNnLmNcbkBAIC0xMDAwLDYgKzEwMDAsMTAgQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpbnQgZXJyID0gMDtcbiBcdHUzMiBsZW4sIG9mZjtcbiBcbitcdGlmICh2ZXJkaWN0ID09IF9fU0tfUkVESVJFQ1QgXHUwMDI2XHUwMDI2IHNrYl9icGZfaW5ncmVzcyhza2IpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cdTAwM2VzaylcbitcdFx0dmVyZGljdCA9IF9fU0tfUEFTUztcbitcbiBcdHN3aXRjaCAodmVyZGljdCkge1xuIFx0Y2FzZSBfX1NLX1BBU1M6XG4gXHRcdGVyciA9IC1FSU87XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjowOS4zMTAxMTMxMjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY4ODg3NDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEZpcnN0IHRoaW5ncyBmaXJzdDogbGV0J3MgZ2V0IGEgZ29vZCBsb29rIGF0IHRoaXMgZGlmZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpcyBjcnVjaWFsIGZvciBjb250ZXh0LiBUaGUgZGlmZiBpcyBwb2ludGVkIHRvIGBuZXQvY29yZS9za21zZy5jYCwgc28gdGhhdCdzIHdoZXJlIEknbGwgZm9jdXMuIEdpdmVuIHRoaXMgbG9jYXRpb24sIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBtZXNzYWdpbmcgYW5kIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoaXMgZmlsZSDigJMgc3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAxMDAwLiBMZXQgbWUgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhhdCBzZWN0aW9uIG9mIGBuZXQvY29yZS9za21zZy5jYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGxvY2FsIGVudmlyb25tZW50LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MTQuOTk4OTkxNDI5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDg2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk4MTpcXHRcXHR9XFxuIDk4MjpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbiA5ODM6XFx0XFx0aWYgKCFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrX290aGVyLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbiA5ODQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbiA5ODU6XFx0XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbiA5ODY6XFx0XFx0XFx0c29ja19kcm9wKGZyb20tXFx1MDAzZXNrLCBza2IpO1xcbiA5ODc6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk4ODpcXHRcXHR9XFxuIDk4OTpcXHRcXG4gOTkwOlxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19za2IsIHNrYik7XFxuIDk5MTpcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNnBzb2NrX290aGVyLVxcdTAwM2V3b3JrLCAwKTtcXG4gOTkyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4gOTkzOlxcdFxcdHJldHVybiAwO1xcbiA5OTQ6XFx0fVxcbiA5OTU6XFx0XFxuIDk5NjpcXHRzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gOTk3OlxcdFxcdFxcdFxcdFxcdCAgaW50IHZlcmRpY3QpXFxuIDk5ODpcXHR7XFxuIDk5OTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfb3RoZXI7XFxuMTAwMDpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMDAxOlxcdFxcdHUzMiBsZW4sIG9mZjtcXG4xMDAyOlxcdFxcbjEwMDM6XFx0XFx0aWYgKHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcXHUwMDI2XFx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcXHUwMDI2XFx1MDAyNlxcbjEwMDQ6XFx0XFx0ICAgIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cXHUwMDNlc2spXFxuMTAwNTpcXHRcXHRcXHR2ZXJkaWN0ID0gX19TS19QQVNTO1xcbjEwMDY6XFx0XFxuMTAwNzpcXHRcXHRzd2l0Y2ggKHZlcmRpY3QpIHtcXG4xMDA4OlxcdFxcdGNhc2UgX19TS19QQVNTOlxcbjEwMDk6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4xMDEwOlxcdFxcdFxcdHNrX290aGVyID0gcHNvY2stXFx1MDAzZXNrO1xcbjEwMTE6XFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSB8fFxcbjEwMTI6XFx0XFx0XFx0ICAgICFza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSlcXG4xMDEzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTAxNDpcXHRcXG4xMDE1OlxcdFxcdFxcdHNrYl9icGZfc2V0X2luZ3Jlc3Moc2tiKTtcXG4xMDE2OlxcdFxcbjEwMTc6XFx0XFx0XFx0LyogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHRoZW4gd2UgY2FuIHN1Ym1pdCBkaXJlY3RseVxcbjEwMTg6XFx0XFx0XFx0ICogaW50byB0aGUgbXNnIHF1ZXVlLiBJZiBpdHMgbm90IGVtcHR5IHdlIGhhdmUgdG9cXG4xMDE5OlxcdFxcdFxcdCAqIHF1ZXVlIHdvcmsgb3RoZXJ3aXNlIHdlIG1heSBnZXQgT09PIGRhdGEuIE90aGVyd2lzZSxcXG4xMDIwOlxcdFxcdFxcdCAqIGlmIHNrX3Bzb2NrX3NrYl9pbmdyZXNzIGVycm9ycyB3aWxsIGJlIGhhbmRsZWQgYnlcXG4xMDIxOlxcdFxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbjEwMjI6XFx0XFx0XFx0ICovXFxuMTAyMzpcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuMTAyNDpcXHRcXHRcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4xMDI1OlxcdFxcdFxcdFxcdG9mZiA9IDA7XFxuMTAyNjpcXHRcXHRcXHRcXHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xcbjEwMjc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHN0cnBfbXNnICpzdG0gPSBzdHJwX21zZyhza2IpO1xcbjEwMjg6XFx0XFxuMTAyOTpcXHRcXHRcXHRcXHRcXHRvZmYgPSBzdG0tXFx1MDAzZW9mZnNldDtcXG4xMDMwOlxcdFxcdFxcdFxcdFxcdGxlbiA9IHN0bS1cXHUwMDNlZnVsbF9sZW47XFxuMTAzMTpcXHRcXHRcXHRcXHR9XFxuMTAzMjpcXHRcXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuMTAzMzpcXHRcXHRcXHR9XFxuMTAzNDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjEwMzU6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4xMDM2OlxcdFxcdFxcdFxcdGlmIChza19wc29ja190ZXN0X3N0YXRlKHBzb2NrLCBTS19QU09DS19UWF9FTkFCTEVEKSkge1xcbjEwMzc6XFx0XFx0XFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX3NrYiwgc2tiKTtcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHNvY2stXFx1MDAzZXdvcmssIDApO1xcbjEwMzk6XFx0XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MTUuMDAwMjQzNzM4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzYwOTM4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBhbmQgUmVkaXJlY3RzKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBgX19TS19SRURJUkVDVGAgbWVjaGFuaXNtLiBXaGVyZSBleGFjdGx5IGlzIHRoaXMgcmVkaXJlY3Rpb24gaGFuZGxlZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHZlcmRpY3QgYXBwbGljYXRpb24gaW4gcmVsYXRpb24gdG8gdGhlIG92ZXJhbGwgZmxvdyBvZiB0cmFmZmljPyBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIHRoZSBvdGhlciBwaWVjZXMgaW52b2x2ZWQgaW4gcmVkaXJlY3Rpbmcgc29ja2V0IHRyYWZmaWMuIEknbSBpbWFnaW5pbmcgaG93IGFsbCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZWdyYXRlZC4gSSBrbm93IHRoYXQgSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjoxNi44MzYzNDI0MzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0MDpcXHRcXHRcXHRcXHR9XFxuMTA0MTpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cHNvY2stXFx1MDAzZWluZ3Jlc3NfbG9jayk7XFxuMTA0MjpcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xMDQzOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMTA0NDpcXHRcXHRcXHR9XFxuMTA0NTpcXHRcXHRcXHRicmVhaztcXG4xMDQ2OlxcdFxcdGNhc2UgX19TS19SRURJUkVDVDpcXG4xMDQ3OlxcdFxcdFxcdHRjcF9lYXRfc2tiKHBzb2NrLVxcdTAwM2Vzaywgc2tiKTtcXG4xMDQ4OlxcdFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChwc29jaywgc2tiKTtcXG4xMDQ5OlxcdFxcdFxcdGJyZWFrO1xcbjEwNTA6XFx0XFx0Y2FzZSBfX1NLX0RST1A6XFxuMTA1MTpcXHRcXHRkZWZhdWx0OlxcbjEwNTI6XFx0b3V0X2ZyZWU6XFxuMTA1MzpcXHRcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxuMTA1NDpcXHRcXHRcXHR0Y3BfZWF0X3NrYihwc29jay1cXHUwMDNlc2ssIHNrYik7XFxuMTA1NTpcXHRcXHRcXHRzb2NrX2Ryb3AocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbjEwNTY6XFx0XFx0fVxcbjEwNTc6XFx0XFxuMTA1ODpcXHRcXHRyZXR1cm4gZXJyO1xcbjEwNTk6XFx0fVxcbjEwNjA6XFx0XFxuMTA2MTpcXHRzdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuMTA2MjpcXHR7XFxuMTA2MzpcXHRcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbjEwNjQ6XFx0XFx0dm9pZCAoKndyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqc2spID0gTlVMTDtcXG4xMDY1OlxcdFxcbjEwNjY6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEwNjc6XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTA2ODpcXHRcXHRpZiAobGlrZWx5KHBzb2NrKSkge1xcbjEwNjk6XFx0XFx0XFx0aWYgKHNrX3Bzb2NrX3Rlc3Rfc3RhdGUocHNvY2ssIFNLX1BTT0NLX1RYX0VOQUJMRUQpKVxcbjEwNzA6XFx0XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZwc29jay1cXHUwMDNld29yaywgMCk7XFxuMTA3MTpcXHRcXHRcXHR3cml0ZV9zcGFjZSA9IHBzb2NrLVxcdTAwM2VzYXZlZF93cml0ZV9zcGFjZTtcXG4xMDcyOlxcdFxcdH1cXG4xMDczOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjEwNzQ6XFx0XFx0aWYgKHdyaXRlX3NwYWNlKVxcbjEwNzU6XFx0XFx0XFx0d3JpdGVfc3BhY2Uoc2spO1xcbjEwNzY6XFx0fVxcbjEwNzc6XFx0XFxuMTA3ODpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxuMTA3OTpcXHRzdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMDgwOlxcdHtcXG4xMDgxOlxcdFxcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XFxuMTA4MjpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuMTA4MzpcXHRcXHRpbnQgcmV0ID0gX19TS19EUk9QO1xcbjEwODQ6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjEwODU6XFx0XFxuMTA4NjpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTA4NzpcXHRcXHRzayA9IHN0cnAtXFx1MDAzZXNrO1xcbjEwODg6XFx0XFx0cHNvY2sgPSBza19wc29jayhzayk7XFxuMTA4OTpcXHRcXHRpZiAodW5saWtlbHkoIXBzb2NrKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMTo1NjoxNi44MzY1OTIxNTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY2NTQxMjA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhpcyBgc2tfcHNvY2tfc2tiX3JlZGlyZWN0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW91ciBhcm91bmQgbGluZXMgOTUwLTk4MC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGNvZGUsIG1heWJlIHJlbGF0ZWQgdG8gc29tZSBlZGdlIGNhc2UsIG9yIGEgY3J1Y2lhbCBpbnRlcmFjdGlvbi4gSSdtIGhvcGluZyB0byBwaW5wb2ludCBob3cgaXQncyBoYW5kbGluZyB0aGUgcGFja2V0IHJlZGlyZWN0aW9uIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBhcmVhIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBoYXBwZW5pbmcgaGVyZSwgd2hhdCB0cmlnZ2VyZWQgaXQsIGFuZCB3aGF0J3MgbmV4dCBpbiB0aGUgcHJvY2Vzcy4gSSdtIGV4cGVjdGluZyB0aGlzIHNlZ21lbnQgdG8gcHJvdmlkZSB0aGUgY3JpdGljYWwgY29udGV4dC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG51YW5jZXMgaXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MTguNTAyMDEwMzUxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3OTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za21zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk0NTpcXHRcXHRcXHRcXHRyZXQgPSBfX1NLX0RST1A7XFxuIDk0NjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTQ3OlxcdFxcdFxcdH1cXG4gOTQ4OlxcdFxcdFxcdHBzb2NrLVxcdTAwM2VyZWRpcl9pbmdyZXNzID0gc2tfbXNnX3RvX2luZ3Jlc3MobXNnKTtcXG4gOTQ5OlxcdFxcdFxcdHBzb2NrLVxcdTAwM2Vza19yZWRpciA9IG1zZy1cXHUwMDNlc2tfcmVkaXI7XFxuIDk1MDpcXHRcXHRcXHRzb2NrX2hvbGQocHNvY2stXFx1MDAzZXNrX3JlZGlyKTtcXG4gOTUxOlxcdFxcdH1cXG4gOTUyOlxcdG91dDpcXG4gOTUzOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA5NTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gOTU1OlxcdH1cXG4gOTU2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNrX3Bzb2NrX21zZ192ZXJkaWN0KTtcXG4gOTU3OlxcdFxcbiA5NTg6XFx0c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5NTk6XFx0e1xcbiA5NjA6XFx0XFx0c3RydWN0IHNrX3Bzb2NrICpwc29ja19vdGhlcjtcXG4gOTYxOlxcdFxcdHN0cnVjdCBzb2NrICpza19vdGhlcjtcXG4gOTYyOlxcdFxcbiA5NjM6XFx0XFx0c2tfb3RoZXIgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XFxuIDk2NDpcXHRcXHQvKiBUaGlzIGVycm9yIGlzIGEgYnVnZ3kgQlBGIHByb2dyYW0sIGl0IHJldHVybmVkIGEgcmVkaXJlY3RcXG4gOTY1OlxcdFxcdCAqIHJldHVybiBjb2RlLCBidXQgdGhlbiBkaWRuJ3Qgc2V0IGEgcmVkaXJlY3QgaW50ZXJmYWNlLlxcbiA5NjY6XFx0XFx0ICovXFxuIDk2NzpcXHRcXHRpZiAodW5saWtlbHkoIXNrX290aGVyKSkge1xcbiA5Njg6XFx0XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbiA5Njk6XFx0XFx0XFx0c29ja19kcm9wKGZyb20tXFx1MDAzZXNrLCBza2IpO1xcbiA5NzA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDk3MTpcXHRcXHR9XFxuIDk3MjpcXHRcXHRwc29ja19vdGhlciA9IHNrX3Bzb2NrKHNrX290aGVyKTtcXG4gOTczOlxcdFxcdC8qIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoZSBzb2NrZXQgaXMgYmVpbmcgdG9ybiBkb3duIG9yIGhhZCBhbm90aGVyXFxuIDk3NDpcXHRcXHQgKiBlcnJvciB0aGF0IGNhdXNlZCB0aGUgcGlwZSB0byBicmVhay4gV2UgY2FuJ3Qgc2VuZCBhIHBhY2tldCBvblxcbiA5NzU6XFx0XFx0ICogYSBzb2NrZXQgdGhhdCBpcyBpbiB0aGlzIHN0YXRlIHNvIHdlIGRyb3AgdGhlIHNrYi5cXG4gOTc2OlxcdFxcdCAqL1xcbiA5Nzc6XFx0XFx0aWYgKCFwc29ja19vdGhlciB8fCBzb2NrX2ZsYWcoc2tfb3RoZXIsIFNPQ0tfREVBRCkpIHtcXG4gOTc4OlxcdFxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG4gOTc5OlxcdFxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4gOTgwOlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA5ODE6XFx0XFx0fVxcbiA5ODI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG4gOTgzOlxcdFxcdGlmICghc2tfcHNvY2tfdGVzdF9zdGF0ZShwc29ja19vdGhlciwgU0tfUFNPQ0tfVFhfRU5BQkxFRCkpIHtcXG4gOTg0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTE6NTY6MTguNTAyMzkzNDgxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1NzcxNjg1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbiBvZiBTZWxmLVJlZGlyZWN0IEluZ3Jlc3MgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgaW50cm9kdWNlcyBhIGNoZWNrIHdpdGhpbiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseSgpYC4gRXNzZW50aWFsbHksIGl0J3Mgc2F5aW5nIHRoYXQgaWYgYSBCUEYgcHJvZ3JhbSBkZWNpZGVzIHRvIHJlZGlyZWN0IGEgcGFja2V0IChgX19TS19SRURJUkVDVGApIGJhY2sgdG8gdGhlICpzYW1lKiBzb2NrZXQgKGBwc29jay1cdTAwM2Vza2ApLCBhbmQgdGhpcyBpcyBoYXBwZW5pbmcgaW4gaW5ncmVzcyBtb2RlLCB0aGVuIHdlIHNob3VsZCB0cmVhdCB0aGF0IHZlcmRpY3QgYXMgYSBzaW1wbGUgcGFzcyAoYF9fU0tfUEFTU2ApLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgcmVkaXJlY3RpbmcgYSBwYWNrZXQgdG8gaXRzZWxmIGluIGluZ3Jlc3MgaXMgc2VtYW50aWNhbGx5IGlkZW50aWNhbCB0byBqdXN0IHBhc3NpbmcgaXQgZGlyZWN0bHkgdG8gdGhlIHNvY2tldCdzIGluZ3Jlc3MgcXVldWUgKHVzaW5nIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmKClgKSwgd2hpY2ggYXZvaWRzIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBsb2NraW5nIG9yIHF1ZXVpbmcgcHJvYmxlbXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZSByZWRpcmVjdCBwYXRoLlxuXG5Ob3csIGZvciB0aGUgY3JpdGljYWwgS01TQU4gYXNzZXNzbWVudC4gTGV0J3Mgc2VlIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgcmlza3Mgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk6XG5cbiogICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBjb3B5aW5nIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cbiogICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUtZGVwZW5kZW50IGNvbmRpdGlvbmFsIGxvZ2ljPyoqIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgKGB2ZXJkaWN0YCwgYHNrYmAsIGBwc29ja2ApIGFyZSBhbGwgZnVsbHkgaW5pdGlhbGl6ZWQuIGB2ZXJkaWN0YCBpcyBhbiBleHBsaWNpdCBpbnRlZ2VyIGFyZ3VtZW50IGFuZCBgc2tiYCBhbmQgYHBzb2NrYCBhcmUgcG9pbnRlcnMgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLlxuKiAgICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uPyoqIE5vIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGluaXRpYWxpemF0aW9ucyBoZXJlLlxuKiAgICoqQm91bmRzIGNoZWNrcy9sb2dpYyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vIG1hbmlwdWxhdGlvbiBvZiBidWZmZXIgbGVuZ3RoIG9yIG9mZnNldHMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBwYXRjaCBqdXN0IGFsdGVycyB0aGUgY29udHJvbCBmbG93IGJhc2VkIG9uIHRoZSB2ZXJkaWN0LCBub3QgdGhlIGRhdGEgaXRzZWxmLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2Ugb3IgZXhhY2VyYmF0ZSBhbnkgS01TQU4tcmVsZXZhbnQgcmlza3MuIFRoZSBjaGFuZ2UgaXMgc2ltcGx5IGEgY29udHJvbCBmbG93IG1vZGlmaWNhdGlvbiwgY2hhbmdpbmcgdGhlIGhhbmRsaW5nIG9mIGEgc3BlY2lmaWMsIHNlbGYtcmVkaXJlY3RpbmcgaW5ncmVzcyBzY2VuYXJpby4gTWVtb3J5IHNhZmV0eSBjb25jZXJucywgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcywgYXJlIHNxdWFyZWx5IGluIHRoZSByZWFsbSBvZiBLQVNBTiBhbmQgTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIG5vIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5LiBUaGlzIGlzIGEgY2xlYXIgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjUyLCJPdXRwdXRUb2tlbnMiOjIzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDExOjU2OjI4LjA3OTU2NzY3MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgc2tfcHNvY2tfdmVyZGljdF9hcHBseSgpYCBpbiBgbmV0L2NvcmUvc2ttc2cuY2AgdG8gdHJlYXQgaW5ncmVzcyByZWRpcmVjdGlvbiB0byB0aGUgc29ja2V0J3Mgb3duIHBzb2NrIChgdmVyZGljdCA9PSBfX1NLX1JFRElSRUNUIFxcdTAwMjZcXHUwMDI2IHNrYl9icGZfaW5ncmVzcyhza2IpIFxcdTAwMjZcXHUwMDI2IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSA9PSBwc29jay1cXHUwMDNlc2tgKSBhcyBgX19TS19QQVNTYC5cXG5cXG5UaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY29udHJvbCBmbG93IGNoYW5nZSB0aGF0IGRpcmVjdHMgc2VsZi1yZWRpcmVjdGVkIHNrYnMgdG8gdGhlIGBfX1NLX1BBU1NgIGNvZGUgcGF0aCAoYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoKWApIHJhdGhlciB0aGFuIGNhbGxpbmcgYHNrX3Bzb2NrX3NrYl9yZWRpcmVjdCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYWx0ZXIgYnVmZmVyIGxlbmd0aC9vZmZzZXQgYm91bmRzIGluIGFuIHVuaW5pdGlhbGl6ZWQgbWFubmVyLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgc29ja2V0IGxpZmV0aW1lLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIGJ1ZmZlciBsaWZlY3ljbGUgaXNzdWVzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50IHRyYWNraW5nLiBUaHVzLCBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoKWAgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIHRvIHRyZWF0IGluZ3Jlc3MgcmVkaXJlY3Rpb24gdG8gdGhlIHNvY2tldCdzIG93biBwc29jayAoYHZlcmRpY3QgPT0gX19TS19SRURJUkVDVCBcXHUwMDI2XFx1MDAyNiBza2JfYnBmX2luZ3Jlc3Moc2tiKSBcXHUwMDI2XFx1MDAyNiBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYikgPT0gcHNvY2stXFx1MDAzZXNrYCkgYXMgYF9fU0tfUEFTU2AuXFxuXFxuVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNvbnRyb2wgZmxvdyBjaGFuZ2UgdGhhdCBkaXJlY3RzIHNlbGYtcmVkaXJlY3RlZCBza2JzIHRvIHRoZSBgX19TS19QQVNTYCBjb2RlIHBhdGggKGBza19wc29ja19za2JfaW5ncmVzc19zZWxmKClgKSByYXRoZXIgdGhhbiBjYWxsaW5nIGBza19wc29ja19za2JfcmVkaXJlY3QoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvb2Zmc2V0IGJvdW5kcyBpbiBhbiB1bmluaXRpYWxpemVkIG1hbm5lciwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHNvY2tldCBsaWZldGltZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBidWZmZXIgbGlmZWN5Y2xlIGlzc3VlcyB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudCB0cmFja2luZy4gVGh1cywgS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q82d[1] Phase: Succeeded StartedAt: 2026-09-06 11:56:39 +0000 UTC FinishedAt: 2026-09-06 11:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 11:56:39 +0000 UTC FinishedAt: 2026-09-06 11:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2] Phase: Succeeded StartedAt: 2026-09-06 11:56:39 +0000 UTC FinishedAt: 2026-09-06 15:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 11:56:39 +0000 UTC FinishedAt: 2026-09-06 15:43:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 11:56:39 +0000 UTC FinishedAt: 2026-09-06 11:56:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 11:56:39 +0000 UTC FinishedAt: 2026-09-06 11:56:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow8q82d/series-workflow8q82d-convert-artifact-1006445030/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 11:56:49 +0000 UTC FinishedAt: 2026-09-06 12:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 11:56:49 +0000 UTC FinishedAt: 2026-09-06 12:20:04 +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:*7b813214-ca1a-4947-b078-e159a8b755f4,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-workflow8q82d/series-workflow8q82d-convert-artifact-1006445030/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": "c8de6574-a40b-4d78-b90a-7f1350dbe74a", "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-workflow8q82d/series-workflow8q82d-build-action-335397244/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 11:56:49 +0000 UTC FinishedAt: 2026-09-06 12:19:57 +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:*7b813214-ca1a-4947-b078-e159a8b755f4,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-workflow8q82d/series-workflow8q82d-convert-artifact-1006445030/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": "c8de6574-a40b-4d78-b90a-7f1350dbe74a", "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-workflow8q82d/series-workflow8q82d-build-action-335397244/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 12:20:04 +0000 UTC FinishedAt: 2026-09-06 12:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 12:20:04 +0000 UTC FinishedAt: 2026-09-06 12:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 12:20:04 +0000 UTC FinishedAt: 2026-09-06 12:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 12:20:04 +0000 UTC FinishedAt: 2026-09-06 12:20:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow8q82d/series-workflow8q82d-convert-artifact-2775636281/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 12:20:26 +0000 UTC FinishedAt: 2026-09-06 12:22:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 12:20:26 +0000 UTC FinishedAt: 2026-09-06 12:22:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c8de6574-a40b-4d78-b90a-7f1350dbe74a,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-workflow8q82d/series-workflow8q82d-build-action-335397244/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-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 12:22:50 +0000 UTC FinishedAt: 2026-09-06 12:22:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 12:22:50 +0000 UTC FinishedAt: 2026-09-06 12:22:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 12:22:50 +0000 UTC FinishedAt: 2026-09-06 12:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 12:22:50 +0000 UTC FinishedAt: 2026-09-06 12:39:03 +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:*7b813214-ca1a-4947-b078-e159a8b755f4,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-workflow8q82d/series-workflow8q82d-convert-artifact-2775636281/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": "e4c588fd-8cc0-4441-b54d-02445f41b114", "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-workflow8q82d/series-workflow8q82d-build-action-1781314069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 12:22:50 +0000 UTC FinishedAt: 2026-09-06 12:38:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7b813214-ca1a-4947-b078-e159a8b755f4,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-workflow8q82d/series-workflow8q82d-convert-artifact-2775636281/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": "e4c588fd-8cc0-4441-b54d-02445f41b114", "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-workflow8q82d/series-workflow8q82d-build-action-1781314069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 12:39:03 +0000 UTC FinishedAt: 2026-09-06 12:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 12:39:03 +0000 UTC FinishedAt: 2026-09-06 12:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 12:39:03 +0000 UTC FinishedAt: 2026-09-06 12:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 12:39:03 +0000 UTC FinishedAt: 2026-09-06 12:40:52 +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:*e4c588fd-8cc0-4441-b54d-02445f41b114,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-workflow8q82d/series-workflow8q82d-build-action-1781314069/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-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 12:41:02 +0000 UTC FinishedAt: 2026-09-06 15:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 12:41:02 +0000 UTC FinishedAt: 2026-09-06 15:43:16 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"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:*c8de6574-a40b-4d78-b90a-7f1350dbe74a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e4c588fd-8cc0-4441-b54d-02445f41b114,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-workflow8q82d/series-workflow8q82d-build-action-335397244/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-workflow8q82d/series-workflow8q82d-build-action-1781314069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 12:41:02 +0000 UTC FinishedAt: 2026-09-06 12:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 12:41:02 +0000 UTC FinishedAt: 2026-09-06 12:41:07 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"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-workflow8q82d/series-workflow8q82d-convert-artifact-1244962734/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 12:41:02 +0000 UTC FinishedAt: 2026-09-06 12:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 12:41:02 +0000 UTC FinishedAt: 2026-09-06 12:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 12:41:02 +0000 UTC FinishedAt: 2026-09-06 12:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 12:41:12 +0000 UTC FinishedAt: 2026-09-06 15:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8q82d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["sk_psock_verdict_apply","sk_psock_strp_read","sk_psock_verdict_recv","sk_psock_verdict_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ccdb07813829ba9487273e75d1cb238cfa774c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"cd97a7b8-210c-42f4-98fa-ddd875683581","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 12:41:12 +0000 UTC FinishedAt: 2026-09-06 15:43:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c8de6574-a40b-4d78-b90a-7f1350dbe74a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e4c588fd-8cc0-4441-b54d-02445f41b114,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-workflow8q82d/series-workflow8q82d-build-action-335397244/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-workflow8q82d/series-workflow8q82d-build-action-1781314069/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-workflow8q82d/series-workflow8q82d-convert-artifact-1244962734/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,}