Name: series-workflowqdkpv Phase: Succeeded StartedAt: 2026-07-02 02:41:40 +0000 UTC FinishedAt: 2026-07-02 06:59:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[0] Phase: Succeeded StartedAt: 2026-07-02 02:41:40 +0000 UTC FinishedAt: 2026-07-02 02:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 02:41:40 +0000 UTC FinishedAt: 2026-07-02 02:59:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "0469d460a598d03fc85ebd97f99640e6c579e2a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "0469d460a598d03fc85ebd97f99640e6c579e2a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP" ], "series_id": "54085cdb-fd76-48f0-abeb-709525173bee" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_conn_change_fwd_mask", "ip_vs_bind_dest", "ip_vs_conn_fill_cport", "ip_vs_conn_hash", "ip_vs_conn_unlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19VRFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayYjMzQ7LAogICAgJiMzNDtpcF92c19iaW5kX2Rlc3QmIzM0OywKICAgICYjMzQ7aXBfdnNfY29ubl9maWxsX2Nwb3J0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5faGFzaCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX3VubGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVBWUyBjb25uZWN0aW9uIGhhc2hpbmcgYW5kIGxvY2tpbmcgbG9naWMsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBjaGFuZ2VzIHRvIGhvdyBkb3VibGUgaGFzaGluZyBhbmQgZm9yd2FyZGluZyBtZXRob2RzIGFyZSBoYW5kbGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjc3NTFkOTc0NTk5MjRhYmQxY2E0MzVjMmRhYTViMDZhZWQwMDBmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDI6NTg6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IGNiMzY2NDFmOGQxY2MxLi4yYTkwM2FmOTI3Zjc2YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC03MCwyNSAmIzQzOzcwLDQ1IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxuICAqIC0gaGFzaCB0YWJsZSByZXNpemUgd29ya3MgbGlrZSByZWhhc2ggYnV0IGFsd2F5cyByZWhhc2hlcyBpbnRvIG5ldyB0YWJsZVxuICAqIC0gYml0IGxvY2sgb24gYnVja2V0IHNlcmlhbGl6ZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIGNoYWluXG4mIzQzOyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlXG4mIzQzOyAqIG5ldyB0YWJsZVxuICAqIC0gY3AtXHUwMDNlbG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLVx1MDAzZWZsYWdzLCBjcC1cdTAwM2VkZXN0XG4gICovXG4gXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXG4mIzQzOy8qKlxuJiM0MzsgICogY29ubl90YWJfbG9jayAtIExvY2sgY29ubl90YWIgYnVja2V0cyBmb3IgY29ubiBoYXNoL3VuaGFzaCwgbm90IGZvciByZWhhc2hcbiYjNDM7ICAqIEB0Olx0XHRoYXNoIHRhYmxlIGZvciBobjAsIG5ld190Ymwgd2hlbiBuZXdfaGFzaD10cnVlXG4mIzQzOyAgKiBAdDI6XHRoYXNoIHRhYmxlIGZvciBobjEsIG5ld190Ymwgd2hlbiBuZXdfaGFzaDI9dHJ1ZVxuJiM0MzsgICogQGNwOlx0Y29ubmVjdGlvblxuJiM0MzsgICogQGhhc2hfa2V5Olx0aGFzaCBrZXkgZm9yIGhuMFxuJiM0MzsgICogQGhhc2hfa2V5MjpcdGhhc2gga2V5IGZvciBobjFcbiYjNDM7ICAqIEB1c2UyOlx0dXNpbmcgaG4xIChkb3VibGUgaGFzaGluZykgYmFzZWQgb24gdGhlIGZvcndhcmRpbmcgbWV0aG9kXG4mIzQzOyAgKiBAbmV3X2hhc2g6XHRtb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbiYjNDM7ICAqIEBuZXdfaGFzaDI6XHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbiYjNDM7ICAqIEBoZWFkX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMFxuJiM0MzsgICogQGhlYWQyX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMVxuJiM0MzsgICpcbiYjNDM7ICAqIFdlIHN1cHBvcnQgMyBtb2RlczpcbiYjNDM7ICAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmdcbiYjNDM7ICAqIC0gaGFzaCBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciBoYXNoaW5nXG4mIzQzOyAgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWRcbiYjNDM7ICAqL1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZFxuLWNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksXG4tXHQgICAgICB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXG4tXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcbiYjNDM7Y29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfcmh0ICp0Miwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuJiM0MztcdCAgICAgIHUzMiBoYXNoX2tleSwgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxuJiM0MztcdCAgICAgIGJvb2wgbmV3X2hhc2gyLCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LFxuJiM0MztcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxuIHtcbiBcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XG4gXHR1MzIgaGFzaF9rZXlfbmV3LCBoYXNoX2tleV9uZXcyO1xuLVx0c3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0O1xuLVx0dTMyIGlkeCwgaWR4MjtcbiYjNDM7XHRpbnQgaWR4ID0gMCwgaWR4MiA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIEFkdmFuY2UgaWR4MiB3aGVuIG5ld19oYXNoIGlzIG5vdCBzZXQgYnV0IGhhc2hfa2V5MlxuJiM0MztcdCAqIGlzIGZvciBuZXcgdGFibGVcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobmV3X2hhc2gyIFx1MDAyNlx1MDAyNiB1c2UyIFx1MDAyNlx1MDAyNiB0ICE9IHQyKVxuJiM0MztcdFx0aWR4MiYjNDM7JiM0Mzs7XG4gXG4tXHRpZHggPSBoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuLVx0aWYgKHVzZTIpXG4tXHRcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdGVsc2Vcbi1cdFx0aWR4MiA9IGlkeDtcbiBcdGlmICghbmV3X2hhc2gpIHtcbiBcdFx0LyogV2UgbmVlZCB0byBsb2NrIHRoZSBidWNrZXQgaW4gdGhlIHJpZ2h0IHRhYmxlICovXG4gXG5AQCAtMTAwLDQ2ICYjNDM7MTIwLDQ1IEBAIGNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksXG4gXHRcdFx0ICogYm90aCBub2RlcyBpbiBkaWZmZXJlbnQgdGFibGVzLCB1c2UgaWR4L2lkeDJcbiBcdFx0XHQgKiBmb3IgcHJvcGVyIGxvY2sgb3JkZXJpbmcgZm9yIGhlYWRzLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlkeCA9IGhhc2hfa2V5IFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRcdFx0aWR4IHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuLVx0XHR9XG4tXHRcdGlmICh1c2UyKSB7XG4tXHRcdFx0aWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xuLVx0XHRcdFx0LyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi9cbi1cdFx0XHRcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQyLVx1MDAzZW5ld190YmwpO1xuLVx0XHRcdFx0aWR4MiA9IGhhc2hfa2V5MiBcdTAwMjYgdDItXHUwMDNlbWFzaztcbi1cdFx0XHRcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGlkeDIgPSBpZHg7XG4mIzQzO1x0XHRcdGlkeCYjNDM7JiM0Mzs7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRpZiAodXNlMiBcdTAwMjZcdTAwMjYgIW5ld19oYXNoMiBcdTAwMjZcdTAwMjYgIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7XG4mIzQzO1x0XHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xuJiM0MztcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXHUwMDNlbmV3X3RibCk7XG4mIzQzO1x0XHRpZHgyJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4gXG4mIzQzO1x0aWYgKCF1c2UyKVxuJiM0MztcdFx0aWR4MiA9IGlkeDtcbiBcdGhlYWQgPSB0LVx1MDAzZWJ1Y2tldHMgJiM0MzsgKGhhc2hfa2V5IFx1MDAyNiB0LVx1MDAzZW1hc2spO1xuIFx0aGVhZDIgPSB1c2UyID8gdDItXHUwMDNlYnVja2V0cyAmIzQzOyAoaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrKSA6IGhlYWQ7XG4gXG4tXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHQvKiBEbyBub3QgdG91Y2ggc2VxY291bnQsIHRoaXMgaXMgYSBzYWZlIG9wZXJhdGlvbiAqL1xuLVxuLVx0aWYgKGlkeCBcdTAwM2M9IGlkeDIpIHtcbiYjNDM7XHRpZiAoaWR4IFx1MDAzZSBpZHgyIHx8IChoZWFkIFx1MDAzZSBoZWFkMiBcdTAwMjZcdTAwMjYgaWR4ID09IGlkeDIpKSB7XG4mIzQzO1x0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdFx0aGxpc3RfYmxfbG9jayhoZWFkKTtcbi1cdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4tXHRcdFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XG4gXHR9IGVsc2Uge1xuLVx0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdFx0aGxpc3RfYmxfbG9jayhoZWFkKTtcbiYjNDM7XHRcdGlmIChoZWFkICE9IGhlYWQyKVxuJiM0MztcdFx0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdH1cbiBcdGlmICghbmV3X2hhc2gpIHtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlZDtcbiYjNDM7XG4gXHRcdC8qIEVuc3VyZSBoYXNoX2tleSBpcyByZWFkIHVuZGVyIGxvY2sgKi9cbiBcdFx0aGFzaF9rZXlfbmV3ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4tXHRcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiYjNDM7XHRcdGNoYW5nZWQgPSBoYXNoX2tleSAhPSBoYXNoX2tleV9uZXc7XG4mIzQzO1x0XHRpZiAodXNlMiBcdTAwMjZcdTAwMjYgIW5ld19oYXNoMikge1xuJiM0MztcdFx0XHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4mIzQzO1x0XHRcdGNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRoYXNoX2tleV9uZXcyID0gaGFzaF9rZXkyO1xuJiM0MztcdFx0fVxuIFx0XHQvKiBIYXNoIGNoYW5nZWQgPyAqL1xuLVx0XHRpZiAoaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3IHx8XG4tXHRcdCAgICAoaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzIgXHUwMDI2XHUwMDI2IHVzZTIpKSB7XG4mIzQzO1x0XHRpZiAoY2hhbmdlZCkge1xuIFx0XHRcdGlmIChoZWFkICE9IGhlYWQyKVxuIFx0XHRcdFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQyKTtcbiBcdFx0XHRobGlzdF9ibF91bmxvY2soaGVhZCk7XG4tXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXHRcdFx0aGFzaF9rZXkgPSBoYXNoX2tleV9uZXc7XG4gXHRcdFx0aGFzaF9rZXkyID0gaGFzaF9rZXlfbmV3MjtcbiBcdFx0XHRnb3RvIHJldHJ5O1xuQEAgLTE1NSw3ICYjNDM7MTc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbm5fdGFiX3VubG9jayhzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCxcbiBcdGlmIChoZWFkICE9IGhlYWQyKVxuIFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQpO1xuLVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbkBAIC0yNjgsOCAmIzQzOzI4Niw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHVzZTIgPSBmYWxzZTtcbiBcdH1cbiBcbi1cdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXG4tXHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiYjNDM7XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4mIzQzO1x0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLyxcbiYjNDM7XHRcdCAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRjcC1cdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xuIFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcbkBAIC0yODAsNiAmIzQzOzI5OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdGhsaXN0X2JsX2FkZF9oZWFkX3JjdShcdTAwMjZjcC1cdTAwM2VobjEubm9kZSwgaGVhZDIpO1xuIFxuIFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJldCA9IDE7XG4gXG4gXHQvKiBTY2hlZHVsZSByZXNpemluZyBpZiBsb2FkIGluY3JlYXNlcyAqL1xuQEAgLTMwNiwxOCAmIzQzOzMyNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFx0XHRyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZShcdTAwMjZjcC1cdTAwM2VyZWZjbnQpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcbiBcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cdTAwM2Vjb25uX3RhYik7XG4gXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuIFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4gXHR1c2UyID0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApO1xuIFxuLVx0Y29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sXG4tXHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiYjNDM7XHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbiYjNDM7XHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoMiAqLywgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuIFxuIFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKSB7XG4gXHRcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXG4tXHRcdGlmIChyZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCkpIHtcbiYjNDM7XHRcdGlmICh1c2UyID09IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCkpIHtcbiBcdFx0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMC5ub2RlKTtcbiBcdFx0XHRpZiAodXNlMilcbiBcdFx0XHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUpO1xuQEAgLTMyOCw2ICYjNDM7MzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcbiBcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4gXG4mIzQzO1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtNjMyLDYgJiM0Mzs2NTUsNyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbiBcdGludCBudGJsO1xuIFx0aW50IGRpcjtcbiBcbiYjNDM7cmVzdGFydDpcbiBcdC8qIE5vIHBhY2tldHMgZnJvbSBpbnNpZGUsIHNvIHdlIGNhbiBkbyBpdCBpbiAyIHN0ZXBzLiAqL1xuIFx0ZGlyID0gdXNlMiA/IDEgOiAwO1xuIFxuQEAgLTY4Niw2ICYjNDM7NzEwLDIzIEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxuIFx0LyogUHJvdGVjdCB0aGUgY3AtXHUwMDNlZmxhZ3MgbW9kaWZpY2F0aW9uICovXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4gXG4mIzQzO1x0LyogUmVjaGVjayB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9jayAqL1xuJiM0MztcdGlmICh1c2UyICE9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xuJiM0MztcdFx0dXNlMiA9ICF1c2UyO1xuJiM0MztcdFx0aWYgKHVzZTIpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdC8qIFJlc3RhcnQgd2l0aCBuZXcgdXNlMiB2YWx1ZSAqL1xuJiM0MztcdFx0XHRnb3RvIHJlc3RhcnQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoZGlyKSB7XG4mIzQzO1x0XHRcdC8qIE5vdCBzdGFydGVkIHlldCwgc28ganVzdCBza2lwIGRpciAxICovXG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRkaXItLTtcbiYjNDM7XHRcdFx0Z290byBuZXh0X2RpcjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qIEp1c3QgZmluaXNoIGRpciAwICovXG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIExvY2sgc2VxY291bnQgb25seSBmb3IgdGhlIG9sZCBidWNrZXQsIGV2ZW4gaWYgd2UgYXJlIG9uIG5ldyB0YWJsZVxuIFx0ICogYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBkZWwgb3BlcmF0aW9uLCBub3QgdGhlIGFkZGluZy5cbiBcdCAqL1xuQEAgLTc1Miw2ICYjNDM7NzkzLDYxIEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxuIFx0XHRnb3RvIG5leHRfZGlyO1xuIH1cbiBcbiYjNDM7LyogQ2hhbmdlIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiAqL1xuJiM0MztzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IGNwLVx1MDAzZWlwdnM7XG4mIzQzO1x0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcbiYjNDM7XHR1MzIgaGFzaDIsIGhhc2hfa2V5LCBoYXNoX2tleTI7XG4mIzQzO1x0c3RydWN0IGlwX3ZzX3JodCAqdCwgKnQyO1xuJiM0MztcbiYjNDM7XHQvKiBTZWUgaXBfdnNfY29ubl91c2VfaGFzaDIoKSBmb3IgcmVmZXJlbmNlICovXG4mIzQzO1x0aWYgKChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSB8fFxuJiM0MztcdCAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqL1xuJiM0MztcdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EpID09XG4mIzQzO1x0ICAgICgobmV3X2ZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfRldEX01BU0spID09IElQX1ZTX0NPTk5fRl9NQVNRKSkge1xuJiM0MztcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cdTAwM2Vjb25uX3RhYik7XG4mIzQzO1x0aWYgKGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xuJiM0MztcdFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XHRcdGhhc2hfa2V5MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuJiM0MztcbiYjNDM7XHRcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLyxcbiYjNDM7XHRcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIGZhbHNlIC8qIG5ld19oYXNoMiAqLyxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcbiYjNDM7XHRcdC8qIEtlZXAgYm90aCBoYXNoIGtleXMgaW4gc2FtZSB0YWJsZSAqL1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7XG4mIzQzO1x0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlKTtcbiYjNDM7XHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovXG4mIzQzO1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XG4mIzQzO1x0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0LVx1MDAzZW5ld190YmwpO1xuJiM0MztcdFx0aGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpO1xuJiM0MztcdFx0aGFzaF9rZXkyID0gaXBfdnNfcmh0X2J1aWxkX2hhc2hfa2V5KHQyLCBoYXNoMik7XG4mIzQzO1xuJiM0MztcdFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXG4mIzQzO1x0XHRjb25uX3RhYl9sb2NrKHQsIHQyLCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuJiM0MztcdFx0XHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSwgaGFzaF9rZXkyKTtcbiYjNDM7XHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuJiM0MztcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4mIzQzO1xuJiM0MztcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cdTAwM2VzaXplICovXG4gc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4ge1xuQEAgLTEwMTQsNiAmIzQzOzExMTAsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdGZsYWdzID0gY3AtXHUwMDNlZmxhZ3M7XG4gXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xuJiM0MztcdFx0LyogU3luY2VkIGNvbm5zIGFyZSBoYXNoZWQsIHNvIHRoZXkgY2FuIG5vdCBnZXQgdGhpcyBmbGFnICovXG4mIzQzO1x0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUO1xuJiM0MztcbiBcdFx0LyogaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHRlbXBsYXRlIGFuZCBpcyBjcmVhdGVkXG4gXHRcdCAqIGJ5IHN5bmMsIHByZXNlcnZlIHRoZSBhY3Rpdml0eSBmbGFnLlxuIFx0XHQgKi9cbkBAIC0xMDIxLDkgJiM0MzsxMTIwLDE4IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0XHRcdGNvbm5fZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFO1xuIFx0XHQvKiBjb25uZWN0aW9ucyBpbmhlcml0IGZvcndhcmRpbmcgbWV0aG9kIGZyb20gZGVzdCAqL1xuIFx0XHRmbGFncyBcdTAwMjY9IH4oSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgSVBfVlNfQ09OTl9GX05PT1VUUFVUKTtcbiYjNDM7XHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4mIzQzO1x0XHQvKiBDaGFuZ2luZyBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gY2FuXG4mIzQzO1x0XHQgKiBoYXBwZW4gb25seSB1bmRlciBsb2Nrc1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpXG4mIzQzO1x0XHRcdGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKGNwLCBmbGFncyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4mIzQzO1x0XHRjcC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0fVxuLVx0ZmxhZ3MgfD0gY29ubl9mbGFncztcbi1cdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHRjcC1cdTAwM2VkZXN0ID0gZGVzdDtcbiBcbiBcdElQX1ZTX0RCR19CVUYoNywgXCYjMzQ7QmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2smIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2hhc2gmIzM0OywKICAgICYjMzQ7aXBfdnNfY29ubl91bmxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIElQVlMgY29ubmVjdGlvbiBoYXNoaW5nIGFuZCBsb2NraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgZG91YmxlIGhhc2hpbmcgYW5kIGZvcndhcmRpbmcgbWV0aG9kcyBhcmUgaGFuZGxlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjc3NTFkOTc0NTk5MjRhYmQxY2E0MzVjMmRhYTViMDZhZWQwMDBmYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMDI6NTg6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCBjYjM2NjQxZjhkMWNjMS4uMmE5MDNhZjkyN2Y3NmIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwpAQCAtNzAsMjUgJiM0Mzs3MCw0NSBAQCBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlwX3ZzX2Nvbm5fY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZQogICogLSBoYXNoIHRhYmxlIHJlc2l6ZSB3b3JrcyBsaWtlIHJlaGFzaCBidXQgYWx3YXlzIHJlaGFzaGVzIGludG8gbmV3IHRhYmxlCiAgKiAtIGJpdCBsb2NrIG9uIGJ1Y2tldCBzZXJpYWxpemVzIGFsbCBvcGVyYXRpb25zIHRoYXQgbW9kaWZ5IHRoZSBjaGFpbgomIzQzOyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlCiYjNDM7ICogbmV3IHRhYmxlCiAgKiAtIGNwLSZndDtsb2NrIHByb3RlY3RzIGNvbm4gZmllbGRzIGxpa2UgY3AtJmd0O2ZsYWdzLCBjcC0mZ3Q7ZGVzdAogICovCiAKLS8qIExvY2sgY29ubl90YWIgYnVja2V0IGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaCAqLwomIzQzOy8qKgomIzQzOyAgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaAomIzQzOyAgKiBAdDoJCWhhc2ggdGFibGUgZm9yIGhuMCwgbmV3X3RibCB3aGVuIG5ld19oYXNoPXRydWUKJiM0MzsgICogQHQyOgloYXNoIHRhYmxlIGZvciBobjEsIG5ld190Ymwgd2hlbiBuZXdfaGFzaDI9dHJ1ZQomIzQzOyAgKiBAY3A6CWNvbm5lY3Rpb24KJiM0MzsgICogQGhhc2hfa2V5OgloYXNoIGtleSBmb3IgaG4wCiYjNDM7ICAqIEBoYXNoX2tleTI6CWhhc2gga2V5IGZvciBobjEKJiM0MzsgICogQHVzZTI6CXVzaW5nIGhuMSAoZG91YmxlIGhhc2hpbmcpIGJhc2VkIG9uIHRoZSBmb3J3YXJkaW5nIG1ldGhvZAomIzQzOyAgKiBAbmV3X2hhc2g6CW1vZGUgZm9yIGhuMCwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKQomIzQzOyAgKiBAbmV3X2hhc2gyOgltb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSkKJiM0MzsgICogQGhlYWRfcmV0OglyZXR1cm5lZCBoZWFkIGZvciBobjAKJiM0MzsgICogQGhlYWQyX3JldDoJcmV0dXJuZWQgaGVhZCBmb3IgaG4xCiYjNDM7ICAqCiYjNDM7ICAqIFdlIHN1cHBvcnQgMyBtb2RlczoKJiM0MzsgICogLSBzZWVrIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIHVuaGFzaGluZwomIzQzOyAgKiAtIGhhc2ggbW9kZSBmb3IgYm90aCBub2RlcywgdXNlZCBmb3IgaGFzaGluZwomIzQzOyAgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWQKJiM0MzsgICovCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKLWNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksCi0JICAgICAgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLAotCSAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KQomIzQzO2Nvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX3JodCAqdDIsIHN0cnVjdCBpcF92c19jb25uICpjcCwKJiM0MzsJICAgICAgdTMyIGhhc2hfa2V5LCB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsCiYjNDM7CSAgICAgIGJvb2wgbmV3X2hhc2gyLCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LAomIzQzOwkgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldCkKIHsKIAlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyOwogCXUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7Ci0Jc3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0OwotCXUzMiBpZHgsIGlkeDI7CiYjNDM7CWludCBpZHggPSAwLCBpZHgyID0gMDsKJiM0MzsKJiM0MzsJLyogQWR2YW5jZSBpZHgyIHdoZW4gbmV3X2hhc2ggaXMgbm90IHNldCBidXQgaGFzaF9rZXkyCiYjNDM7CSAqIGlzIGZvciBuZXcgdGFibGUKJiM0MzsJICovCiYjNDM7CWlmIChuZXdfaGFzaDIgJmFtcDsmYW1wOyB1c2UyICZhbXA7JmFtcDsgdCAhPSB0MikKJiM0MzsJCWlkeDImIzQzOyYjNDM7OwogCi0JaWR4ID0gaGFzaF9rZXkgJmFtcDsgdC0mZ3Q7bWFzazsKLQlpZiAodXNlMikKLQkJaWR4MiA9IGhhc2hfa2V5MiAmYW1wOyB0LSZndDttYXNrOwotCWVsc2UKLQkJaWR4MiA9IGlkeDsKIAlpZiAoIW5ld19oYXNoKSB7CiAJCS8qIFdlIG5lZWQgdG8gbG9jayB0aGUgYnVja2V0IGluIHRoZSByaWdodCB0YWJsZSAqLwogCkBAIC0xMDAsNDYgJiM0MzsxMjAsNDUgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSwKIAkJCSAqIGJvdGggbm9kZXMgaW4gZGlmZmVyZW50IHRhYmxlcywgdXNlIGlkeC9pZHgyCiAJCQkgKiBmb3IgcHJvcGVyIGxvY2sgb3JkZXJpbmcgZm9yIGhlYWRzLgogCQkJICovCi0JCQlpZHggPSBoYXNoX2tleSAmYW1wOyB0LSZndDttYXNrOwotCQkJaWR4IHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLOwotCQl9Ci0JCWlmICh1c2UyKSB7Ci0JCQlpZiAoIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7Ci0JCQkJLyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi8KLQkJCQl0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi0mZ3Q7bmV3X3RibCk7Ci0JCQkJaWR4MiA9IGhhc2hfa2V5MiAmYW1wOyB0Mi0mZ3Q7bWFzazsKLQkJCQlpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWR4MiA9IGlkeDsKJiM0MzsJCQlpZHgmIzQzOyYjNDM7OwogCQl9CiAJfQomIzQzOwlpZiAodXNlMiAmYW1wOyZhbXA7ICFuZXdfaGFzaDIgJmFtcDsmYW1wOyAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHsKJiM0MzsJCS8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovCiYjNDM7CQl0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi0mZ3Q7bmV3X3RibCk7CiYjNDM7CQlpZHgyJiM0MzsmIzQzOzsKJiM0MzsJfQogCiYjNDM7CWlmICghdXNlMikKJiM0MzsJCWlkeDIgPSBpZHg7CiAJaGVhZCA9IHQtJmd0O2J1Y2tldHMgJiM0MzsgKGhhc2hfa2V5ICZhbXA7IHQtJmd0O21hc2spOwogCWhlYWQyID0gdXNlMiA/IHQyLSZndDtidWNrZXRzICYjNDM7IChoYXNoX2tleTIgJmFtcDsgdDItJmd0O21hc2spIDogaGVhZDsKIAotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQkvKiBEbyBub3QgdG91Y2ggc2VxY291bnQsIHRoaXMgaXMgYSBzYWZlIG9wZXJhdGlvbiAqLwotCi0JaWYgKGlkeCAmbHQ7PSBpZHgyKSB7CiYjNDM7CWlmIChpZHggJmd0OyBpZHgyIHx8IChoZWFkICZndDsgaGVhZDIgJmFtcDsmYW1wOyBpZHggPT0gaWR4MikpIHsKJiM0MzsJCWhsaXN0X2JsX2xvY2soaGVhZDIpOwogCQlobGlzdF9ibF9sb2NrKGhlYWQpOwotCQlpZiAoaGVhZCAhPSBoZWFkMikKLQkJCWhsaXN0X2JsX2xvY2soaGVhZDIpOwogCX0gZWxzZSB7Ci0JCWhsaXN0X2JsX2xvY2soaGVhZDIpOwogCQlobGlzdF9ibF9sb2NrKGhlYWQpOwomIzQzOwkJaWYgKGhlYWQgIT0gaGVhZDIpCiYjNDM7CQkJaGxpc3RfYmxfbG9jayhoZWFkMik7CiAJfQogCWlmICghbmV3X2hhc2gpIHsKJiM0MzsJCWJvb2wgY2hhbmdlZDsKJiM0MzsKIAkJLyogRW5zdXJlIGhhc2hfa2V5IGlzIHJlYWQgdW5kZXIgbG9jayAqLwogCQloYXNoX2tleV9uZXcgPSBSRUFEX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSk7Ci0JCWhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSk7CiYjNDM7CQljaGFuZ2VkID0gaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3OwomIzQzOwkJaWYgKHVzZTIgJmFtcDsmYW1wOyAhbmV3X2hhc2gyKSB7CiYjNDM7CQkJaGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5KTsKJiM0MzsJCQljaGFuZ2VkIHw9IGhhc2hfa2V5MiAhPSBoYXNoX2tleV9uZXcyOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQloYXNoX2tleV9uZXcyID0gaGFzaF9rZXkyOwomIzQzOwkJfQogCQkvKiBIYXNoIGNoYW5nZWQgPyAqLwotCQlpZiAoaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3IHx8Ci0JCSAgICAoaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzIgJmFtcDsmYW1wOyB1c2UyKSkgewomIzQzOwkJaWYgKGNoYW5nZWQpIHsKIAkJCWlmIChoZWFkICE9IGhlYWQyKQogCQkJCWhsaXN0X2JsX3VubG9jayhoZWFkMik7CiAJCQlobGlzdF9ibF91bmxvY2soaGVhZCk7Ci0JCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJCWhhc2hfa2V5ID0gaGFzaF9rZXlfbmV3OwogCQkJaGFzaF9rZXkyID0gaGFzaF9rZXlfbmV3MjsKIAkJCWdvdG8gcmV0cnk7CkBAIC0xNTUsNyAmIzQzOzE3NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25uX3RhYl91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsCiAJaWYgKGhlYWQgIT0gaGVhZDIpCiAJCWhsaXN0X2JsX3VubG9jayhoZWFkMik7CiAJaGxpc3RfYmxfdW5sb2NrKGhlYWQpOwotCWxvY2FsX2JoX2VuYWJsZSgpOwogfQogCiBzdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7CkBAIC0yNjgsOCAmIzQzOzI4Niw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiAJCXVzZTIgPSBmYWxzZTsKIAl9CiAKLQljb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLAotCQkgICAgICAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CWNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sCiYjNDM7CQkgICAgICB0cnVlIC8qIG5ld19oYXNoMiAqLywgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKIAogCWNwLSZndDtmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEOwogCVdSSVRFX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSwgaGFzaF9rZXkpOwpAQCAtMjgwLDYgJiM0MzsyOTksNyBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogCQlobGlzdF9ibF9hZGRfaGVhZF9yY3UoJmFtcDtjcC0mZ3Q7aG4xLm5vZGUsIGhlYWQyKTsKIAogCWNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwogCXJldCA9IDE7CiAKIAkvKiBTY2hlZHVsZSByZXNpemluZyBpZiBsb2FkIGluY3JlYXNlcyAqLwpAQCAtMzA2LDE4ICYjNDM7MzI2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiAJCXJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKCZhbXA7Y3AtJmd0O3JlZmNudCk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKIAogCXQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy0mZ3Q7Y29ubl90YWIpOwogCWhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXkpOwogCWhhc2hfa2V5MiA9IFJFQURfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5KTsKIAl1c2UyID0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApOwogCi0JY29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sCi0JCSAgICAgICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiYjNDM7CWNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLAomIzQzOwkJICAgICAgZmFsc2UgLyogbmV3X2hhc2gyICovLCAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwogCiAJaWYgKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfSEFTSEVEKSB7CiAJCS8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovCi0JCWlmIChyZWZjb3VudF9kZWNfaWZfb25lKCZhbXA7Y3AtJmd0O3JlZmNudCkpIHsKJiM0MzsJCWlmICh1c2UyID09IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcmVmY291bnRfZGVjX2lmX29uZSgmYW1wO2NwLSZndDtyZWZjbnQpKSB7CiAJCQlobGlzdF9ibF9kZWxfcmN1KCZhbXA7Y3AtJmd0O2huMC5ub2RlKTsKIAkJCWlmICh1c2UyKQogCQkJCWhsaXN0X2JsX2RlbF9yY3UoJmFtcDtjcC0mZ3Q7aG4xLm5vZGUpOwpAQCAtMzI4LDYgJiM0MzszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogCiAJY29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTsKIAomIzQzOwlsb2NhbF9iaF9lbmFibGUoKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CkBAIC02MzIsNiAmIzQzOzY1NSw3IEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KQogCWludCBudGJsOwogCWludCBkaXI7CiAKJiM0MztyZXN0YXJ0OgogCS8qIE5vIHBhY2tldHMgZnJvbSBpbnNpZGUsIHNvIHdlIGNhbiBkbyBpdCBpbiAyIHN0ZXBzLiAqLwogCWRpciA9IHVzZTIgPyAxIDogMDsKIApAQCAtNjg2LDYgJiM0Mzs3MTAsMjMgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpCiAJLyogUHJvdGVjdCB0aGUgY3AtJmd0O2ZsYWdzIG1vZGlmaWNhdGlvbiAqLwogCXNwaW5fbG9ja19iaCgmYW1wO2NwLSZndDtsb2NrKTsKIAomIzQzOwkvKiBSZWNoZWNrIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrICovCiYjNDM7CWlmICh1c2UyICE9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkgewomIzQzOwkJdXNlMiA9ICF1c2UyOwomIzQzOwkJaWYgKHVzZTIpIHsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2NwLSZndDtsb2NrKTsKJiM0MzsJCQkvKiBSZXN0YXJ0IHdpdGggbmV3IHVzZTIgdmFsdWUgKi8KJiM0MzsJCQlnb3RvIHJlc3RhcnQ7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZGlyKSB7CiYjNDM7CQkJLyogTm90IHN0YXJ0ZWQgeWV0LCBzbyBqdXN0IHNraXAgZGlyIDEgKi8KJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2NwLSZndDtsb2NrKTsKJiM0MzsJCQlkaXItLTsKJiM0MzsJCQlnb3RvIG5leHRfZGlyOwomIzQzOwkJfQomIzQzOwkJLyogSnVzdCBmaW5pc2ggZGlyIDAgKi8KJiM0MzsJfQomIzQzOwogCS8qIExvY2sgc2VxY291bnQgb25seSBmb3IgdGhlIG9sZCBidWNrZXQsIGV2ZW4gaWYgd2UgYXJlIG9uIG5ldyB0YWJsZQogCSAqIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgZGVsIG9wZXJhdGlvbiwgbm90IHRoZSBhZGRpbmcuCiAJICovCkBAIC03NTIsNiAmIzQzOzc5Myw2MSBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydCkKIAkJZ290byBuZXh0X2RpcjsKIH0KIAomIzQzOy8qIENoYW5nZSBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gKi8KJiM0MztzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IGNwLSZndDtpcHZzOwomIzQzOwlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyOwomIzQzOwl1MzIgaGFzaDIsIGhhc2hfa2V5LCBoYXNoX2tleTI7CiYjNDM7CXN0cnVjdCBpcF92c19yaHQgKnQsICp0MjsKJiM0MzsKJiM0MzsJLyogU2VlIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKCkgZm9yIHJlZmVyZW5jZSAqLwomIzQzOwlpZiAoKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8CiYjNDM7CSAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqLwomIzQzOwkgICAgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRKSA9PQomIzQzOwkgICAgKChuZXdfZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkpIHsKJiM0MzsJCWNwLSZndDtmbGFncyA9IG5ld19mbGFnczsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwl0ID0gcmN1X2RlcmVmZXJlbmNlKGlwdnMtJmd0O2Nvbm5fdGFiKTsKJiM0MzsJaWYgKGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkgewomIzQzOwkJLyogU3RvcCBkb3VibGUgaGFzaGluZyAqLwomIzQzOwkJaGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSk7CiYjNDM7CQloYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSk7CiYjNDM7CiYjNDM7CQljb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sCiYjNDM7CQkJICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIGZhbHNlIC8qIG5ld19oYXNoMiAqLywKJiM0MzsJCQkgICAgICAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwomIzQzOwomIzQzOwkJLyogS2VlcCBib3RoIGhhc2gga2V5cyBpbiBzYW1lIHRhYmxlICovCiYjNDM7CQloYXNoX2tleSA9IFJFQURfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5KTsKJiM0MzsJCVdSSVRFX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSwgaGFzaF9rZXkpOwomIzQzOwkJaGxpc3RfYmxfZGVsX3JjdSgmYW1wO2NwLSZndDtobjEubm9kZSk7CiYjNDM7CQljcC0mZ3Q7ZmxhZ3MgPSBuZXdfZmxhZ3M7CiYjNDM7CiYjNDM7CQljb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogU3RhcnQgZG91YmxlIGhhc2hpbmcgKi8KJiM0MzsKJiM0MzsJCWhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXkpOwomIzQzOwomIzQzOwkJdDIgPSByY3VfZGVyZWZlcmVuY2UodC0mZ3Q7bmV3X3RibCk7CiYjNDM7CQloYXNoMiA9IGlwX3ZzX2Nvbm5faGFzaGtleV9jb25uKHQyLCBjcCwgdHJ1ZSk7CiYjNDM7CQloYXNoX2tleTIgPSBpcF92c19yaHRfYnVpbGRfaGFzaF9rZXkodDIsIGhhc2gyKTsKJiM0MzsKJiM0MzsJCS8qIENoYW5nZSB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9ja2VkIGhuMCAqLwomIzQzOwkJY29ubl90YWJfbG9jayh0LCB0MiwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLywKJiM0MzsJCQkgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sCiYjNDM7CQkJICAgICAgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSwgaGFzaF9rZXkyKTsKJiM0MzsJCWNwLSZndDtmbGFncyA9IG5ld19mbGFnczsKJiM0MzsJCWhsaXN0X2JsX2FkZF9oZWFkX3JjdSgmYW1wO2NwLSZndDtobjEubm9kZSwgaGVhZDIpOwomIzQzOwomIzQzOwkJY29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qIEdldCBkZWZhdWx0IGxvYWQgZmFjdG9yIHRvIG1hcCBjb25uX2NvdW50L3VfdGhyZXNoIHRvIHQtJmd0O3NpemUgKi8KIHN0YXRpYyBpbnQgaXBfdnNfY29ubl9kZWZhdWx0X2xvYWRfZmFjdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKQogewpAQCAtMTAxNCw2ICYjNDM7MTExMCw5IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogCWZsYWdzID0gY3AtJmd0O2ZsYWdzOwogCS8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovCiAJaWYgKGZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TWU5DKSB7CiYjNDM7CQkvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi8KJiM0MzsJCWNvbm5fZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDsKJiM0MzsKIAkJLyogaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHRlbXBsYXRlIGFuZCBpcyBjcmVhdGVkCiAJCSAqIGJ5IHN5bmMsIHByZXNlcnZlIHRoZSBhY3Rpdml0eSBmbGFnLgogCQkgKi8KQEAgLTEwMjEsOSAmIzQzOzExMjAsMTggQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCiAJCQljb25uX2ZsYWdzICZhbXA7PSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFOwogCQkvKiBjb25uZWN0aW9ucyBpbmhlcml0IGZvcndhcmRpbmcgbWV0aG9kIGZyb20gZGVzdCAqLwogCQlmbGFncyAmYW1wOz0gfihJUF9WU19DT05OX0ZfRldEX01BU0sgfCBJUF9WU19DT05OX0ZfTk9PVVRQVVQpOwomIzQzOwkJZmxhZ3MgfD0gY29ubl9mbGFnczsKJiM0MzsJCS8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW4KJiM0MzsJCSAqIGhhcHBlbiBvbmx5IHVuZGVyIGxvY2tzCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX0hBU0hFRCkKJiM0MzsJCQlpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpOwomIzQzOwkJZWxzZQomIzQzOwkJCWNwLSZndDtmbGFncyA9IGZsYWdzOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZmxhZ3MgfD0gY29ubl9mbGFnczsKJiM0MzsJCWNwLSZndDtmbGFncyA9IGZsYWdzOwogCX0KLQlmbGFncyB8PSBjb25uX2ZsYWdzOwotCWNwLSZndDtmbGFncyA9IGZsYWdzOwogCWNwLSZndDtkZXN0ID0gZGVzdDsKIAogCUlQX1ZTX0RCR19CVUYoNywgJiMzNDtCaW5kLWRlc3QgJXMgYzolczolZCB2OiVzOiVkICYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBJUFZTIENvbm5lY3Rpb24gSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNgLiBJdCYjMzk7cyBhbGwgYWJvdXQgaG93IElQVlMgY29ubmVjdGlvbnMgYXJlIGhhc2hlZCBhbmQgbG9ja2VkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBkb3VibGUgaGFzaGluZyBhbmQgaG93IGZvcndhcmRpbmcgaXMgaGFuZGxlZC4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AgYW5kIHRoZXkmIzM5O3ZlIGFsc28gZmlkZGxlZCB3aXRoIGBjb25uX3RhYl9sb2NrYC4gUmlnaHQgYXdheSwgSSBzZWUgdGhpcyBpcyBjb3JlIElQVlMgbG9naWMg4oCTIHRoZSBndXRzIG9mIGl0cyBjb25uZWN0aW9uIG1hbmFnZW1lbnQuCgpUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIHVwIGluIG15IGhlYWQgaXMgYWx3YXlzOiAmIzM0O0lzIHRoaXMgcmVhY2hhYmxlPyYjMzQ7IENvbnNpZGVyaW5nIElQVlMgaXMgYSBrZXJuZWwgbG9hZCBiYWxhbmNlciwgdXNlZCB0aHJvdWdoIG5ldGxpbmsgb3Igc29ja2V0IG9wdGlvbnMsIGFuZCBwcm9jZXNzZXMgYWN0dWFsIG5ldHdvcmsgcGFja2V0cywgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgJiMzNDt5ZXMmIzM0Oy4gVGhpcyB0aGluZyAqYWJzb2x1dGVseSogbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzY3JlYW1zIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGhpdCB0aGlzIGhhcmQuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBwaW5wb2ludCB0aGUgZXhhY3QgZnVuY3Rpb25zIHRoYXQgdGhpcyBwYXRjaCBoYXMgbW9kaWZpZWQuIFdlIG5lZWQgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gQWxyaWdodCwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBjb25uX3RhYl9sb2NrYCAod2hpY2gsIGZyb20gdGhlIGxvb2tzIG9mIGl0LCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24pLCBgaXBfdnNfY29ubl9oYXNoYCwgYGlwX3ZzX2Nvbm5fdW5saW5rYCwgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAsIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AsIGFuZCBgaXBfdnNfYmluZF9kZXN0YC4gSSYjMzk7dmUgZ290IGEgZ29vZCBsaXN0IHRvIHN0YXJ0IHdpdGguCgpTbyBteSBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHdpbGwgYmU6IGBpcF92c19jb25uX2hhc2hgLCBgaXBfdnNfY29ubl91bmxpbmtgLCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYW5kIGBpcF92c19iaW5kX2Rlc3RgLgoKQmVmb3JlIEkgZm9yZ2V0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGVuYWJsZWQuIE9idmlvdXNseSwgSVBWUyBuZWVkcyB0byBiZSB1cCBhbmQgcnVubmluZyBmb3IgYW55IG9mIHRoaXMgdG8gbWF0dGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIElQVlMsIHdoaWNoIHNob3VsZCBiZSBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBHZW5lcmFsbHksIEkgdGhpbmsgaXQmIzM5O3MgYENPTkZJR19JUF9WU2AgdGhhdCB3ZSBuZWVkLiBKdXN0IHRvIGJlIHN1cmUsIGxldCBtZSBydW4gYSBxdWljayBncmVwIHRvIHZlcmlmeSBhbmQgY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgSVBWUyBDb25maWd1cmF0aW9uIGZvciBTeW5jaHJvbml6YXRpb24gYW5kIE5BVCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggYElQX1ZTYCBoZXJlLiBUaGF0JiMzOTtzIHRoZSBjb3JlLiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoOyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgcGljdHVyZSBhbmQgdGhlIHBvdGVudGlhbCBpbnRlcmRlcGVuZGVuY2llcy4gTGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIHRoZSBsYW5kc2NhcGUuIEFoLCB0aGUgcGF0Y2ggbm90ZXMgbWVudGlvbiBgSVBfVlNfQ09OTl9GX01BU1FgLCBgSVBfVlNfQ09OTl9GX1NZTkNgLCBhbmQgYElQX1ZTX0NPTk5fRl9URU1QTEFURWAuIEludGVyZXN0aW5nLiBUaGV5JiMzOTtyZSBmbGFncywgbm90IGRpcmVjdCBjb25maWdzLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gVGhleSYjMzk7bGwgaW5mbHVlbmNlIGJlaGF2aW9yLCBjZXJ0YWlubHksIGJ1dCB0aGV5JiMzOTtyZSBub3QgdGhlIHByaW1hcnkga25vYnMgdG8gdHdpZGRsZS4gR2l2ZW4gdGhpcyBjb250ZXh0LCBJIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gSVBWUyBzeW5jaHJvbml6YXRpb24gb3IgTkFUIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IHNldHRpbmdzLiBJdCYjMzk7cyB0aW1lIHRvIHJlZmluZSB0aGUgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSVBWUyBDb25maWd1cmF0aW9uIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUFZTLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgdGhlIGBLY29uZmlnYCBmaWxlcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgSVBWUyBpcyBhIHBhcnQgb2YgbmV0ZmlsdGVyLiBUbyBxdWlja2x5IGZpbHRlciBkb3duIHRvIHdoYXQgSSBuZWVkLCBJJiMzOTtsbCB1c2UgYGdyZXBgLiBJJiMzOTtsbCBydW4gYGdyZXAgSVBfVlNgIG9uIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgcHVsbCBvdXQgYWxsIHRoZSBsaW5lcyB0aGF0IGRlZmluZSBvciByZWxhdGUgdG8gSVBWUyBjb25maWd1cmF0aW9ucy4gVGhpcyB3aWxsIGhvcGVmdWxseSBnaXZlIG1lIGEgY29uY2lzZSBsaXN0IHRvIHdvcmsgZnJvbSwgcmF0aGVyIHRoYW4gbmVlZGluZyB0byBtYW51YWxseSBzY2FuIHRoZSBlbnRpcmUgYEtjb25maWdgIGZpbGUuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIElQVlMgZmVhdHVyZXMgYW5kIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmNvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQVlMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBob2xkIG9uLiBMb29raW5nIGJhY2ssIGl0JiMzOTtzIGNsZWFyIHRoYXQgZm9jdXNpbmcgb24gYG1lbnVjb25maWcgSVBfVlNgIGlzIGFjdHVhbGx5IG1pc2xlYWRpbmcuIFRoZSByZWFsIGNvcmUgb2YgdGhlIG1hdHRlciBpcyB0aGUgYElQX1ZTYCBvcHRpb24gaXRzZWxmLiBUaGF0JiMzOTtzIHRoZSBvbmUgd2UgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGVuYWJsaW5nIGp1c3QgYElQX1ZTYCBnaXZlIHVzIHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZD8gT3IsIGRvIHdlIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGVuYWJsZSB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgbW9kdWxlcyB0b28sIGxpa2UgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgc28gZm9ydGg/IFRpbWUgdG8gY2hlY2sgdGhhdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmNvbmZpZyBJUF9WU19QUk9UTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZSwgdGhpbmtpbmcgbGlrZSBhIGtlcm5lbCBuZXR3b3JraW5nIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIHF1aWNrbHkgc2NhbiB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIElQVlMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGZvciBkZXBsb3ltZW50IG9yIHRyb3VibGVzaG9vdGluZy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB3aGljaCBvcHRpb25zIGFyZSBkaXJlY3RseSBleHBvc2VkIHRvIHRoZSB1c2VyIHZlcnN1cyB0aG9zZSBoYW5kbGVkIGludGVybmFsbHkuIEkmIzM5O20gZXhwZWN0aW5nIHRoZSB1c3VhbCBLY29uZmlnIGNvbnZlbnRpb25zLCBidXQgSSB3YW50IHRvIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgYXMgcGFydGljdWxhcmx5IGlubm92YXRpdmUgb3IgcHJvYmxlbWF0aWMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEJhc2ljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGluIGEgZmV3IHNlY29uZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51Y29uZmlnIElQX1ZTXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuICAgODpcdFx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBJUCBWaXJ0dWFsIFNlcnZlciBzdXBwb3J0IHdpbGwgbGV0IHlvdSBidWlsZCBhIGhpZ2gtcGVyZm9ybWFuY2VcbiAgMTE6XHRcdCAgdmlydHVhbCBzZXJ2ZXIgYmFzZWQgb24gY2x1c3RlciBvZiB0d28gb3IgbW9yZSByZWFsIHNlcnZlcnMuIFRoaXNcbiAgMTI6XHRcdCAgb3B0aW9uIG11c3QgYmUgZW5hYmxlZCBmb3IgYXQgbGVhc3Qgb25lIG9mIHRoZSBjbHVzdGVyZWQgY29tcHV0ZXJzXG4gIDEzOlx0XHQgIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgaW50ZXJjZXB0aW5nIGluY29taW5nIGNvbm5lY3Rpb25zIHRvIGFcbiAgMTQ6XHRcdCAgc2luZ2xlIElQIGFkZHJlc3MgYW5kIHNjaGVkdWxpbmcgdGhlbSB0byByZWFsIHNlcnZlcnMuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRocmVlIHJlcXVlc3QgZGlzcGF0Y2hpbmcgdGVjaG5pcXVlcyBhcmUgaW1wbGVtZW50ZWQsIHRoZXkgYXJlXG4gIDE3Olx0XHQgIHZpcnR1YWwgc2VydmVyIHZpYSBOQVQsIHZpcnR1YWwgc2VydmVyIHZpYSB0dW5uZWxpbmcgYW5kIHZpcnR1YWxcbiAgMTg6XHRcdCAgc2VydmVyIHZpYSBkaXJlY3Qgcm91dGluZy4gVGhlIHNldmVyYWwgc2NoZWR1bGluZyBhbGdvcml0aG1zIGNhblxuICAxOTpcdFx0ICBiZSB1c2VkIHRvIGNob29zZSB3aGljaCBzZXJ2ZXIgdGhlIGNvbm5lY3Rpb24gaXMgZGlyZWN0ZWQgdG8sXG4gIDIwOlx0XHQgIHRodXMgbG9hZCBiYWxhbmNpbmcgY2FuIGJlIGFjaGlldmVkIGFtb25nIHRoZSBzZXJ2ZXJzLiAgRm9yIG1vcmVcbiAgMjE6XHRcdCAgaW5mb3JtYXRpb24gYW5kIGl0cyBhZG1pbmlzdHJhdGlvbiBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgdGhlXG4gIDIyOlx0XHQgIGZvbGxvd2luZyBVUkw6IFx1MDAzY2h0dHA6Ly93d3cubGludXh2aXJ0dWFsc2VydmVyLm9yZy9cdTAwM2UuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXG4gIDI1Olx0XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjY6XHRcbiAgMjc6XHRpZiBJUF9WU1xuICAyODpcdFxuICAyOTpcdGNvbmZpZ1x0SVBfVlNfSVBWNlxuICAzMDpcdFx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIElQVlNcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2XG4gIDMyOlx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgQWRkIElQdjYgc3VwcG9ydCB0byBJUFZTLlxuICAzNTpcdFxuICAzNjpcdFx0ICBTYXkgWSBpZiB1bnN1cmUuXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnXHRJUF9WU19ERUJVR1xuICAzOTpcdFx0Ym9vbCBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBkZWJ1Z2dpbmdcJiMzNDtcbiAgNDA6XHRcdGhlbHBcbiAgNDE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBnZXQgYWRkaXRpb25hbCBtZXNzYWdlcyB1c2VmdWwgaW5cbiAgNDI6XHRcdCAgZGVidWdnaW5nIHRoZSBJUCB2aXJ0dWFsIHNlcnZlciBjb2RlLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVidWdcbiAgNDM6XHRcdCAgbGV2ZWwgaW4gL3Byb2Mvc3lzL25ldC9pcHY0L3ZzL2RlYnVnX2xldmVsXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnXHRJUF9WU19UQUJfQklUU1xuICA0NjpcdFx0aW50IFwmIzM0O0lQVlMgY29ubmVjdGlvbiB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4gIDQ3Olx0XHRyYW5nZSA4IDIwIGlmICE2NEJJVFxuICA0ODpcdFx0cmFuZ2UgOCAyNyBpZiA2NEJJVFxuICA0OTpcdFx0ZGVmYXVsdCAxMlxuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBUaGUgSVBWUyBjb25uZWN0aW9uIGhhc2ggdGFibGUgdXNlcyB0aGUgY2hhaW5pbmcgc2NoZW1lIHRvIGhhbmRsZVxuICA1MjpcdFx0ICBoYXNoIGNvbGxpc2lvbnMuIFVzaW5nIGEgYmlnIElQVlMgY29ubmVjdGlvbiBoYXNoIHRhYmxlIHdpbGwgZ3JlYXRseVxuICA1MzpcdFx0ICByZWR1Y2UgY29uZmxpY3RzIHdoZW4gdGhlcmUgYXJlIGh1bmRyZWRzIG9mIHRob3VzYW5kcyBvZiBjb25uZWN0aW9uc1xuICA1NDpcdFx0ICBpbiB0aGUgaGFzaCB0YWJsZS5cbiAgNTU6XHRcbiAgNTY6XHRcdCAgTm90ZSB0aGUgdGFibGUgc2l6ZSBtdXN0IGJlIHBvd2VyIG9mIDIuIFRoZSB0YWJsZSBzaXplIHdpbGwgYmUgdGhlXG4gIDU3Olx0XHQgIHZhbHVlIG9mIDIgdG8gdGhlIHlvdXIgaW5wdXQgbnVtYmVyIHBvd2VyLiBUaGUgbnVtYmVyIHRvIGNob29zZSBpc1xuICA1ODpcdFx0ICBmcm9tIDggdG8gMjcgZm9yIDY0QklUKDIwIG90aGVyd2lzZSksIHRoZSBkZWZhdWx0IG51bWJlciBpcyAxMixcbiAgNTk6XHRcdCAgd2hpY2ggbWVhbnMgdGhlIHRhYmxlIHNpemUgaXMgNDA5Ni4gRG9uJiMzOTt0IGlucHV0IHRoZSBudW1iZXIgdG9vXG4gIDYwOlx0XHQgIHNtYWxsLCBvdGhlcndpc2UgeW91IHdpbGwgbG9zZSBwZXJmb3JtYW5jZSBvbiBpdC4gWW91IGNhbiBhZGFwdCB0aGVcbiAgNjE6XHRcdCAgdGFibGUgc2l6ZSB5b3Vyc2VsZiwgYWNjb3JkaW5nIHRvIHlvdXIgdmlydHVhbCBzZXJ2ZXIgYXBwbGljYXRpb24uXG4gIDYyOlx0XHQgIEl0IGlzIGdvb2QgdG8gc2V0IHRoZSB0YWJsZSBzaXplIG5vdCBmYXIgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2ZcbiAgNjM6XHRcdCAgY29ubmVjdGlvbnMgcGVyIHNlY29uZCBtdWx0aXBseWluZyBhdmVyYWdlIGxhc3RpbmcgdGltZSBvZlxuICA2NDpcdFx0ICBjb25uZWN0aW9uIGluIHRoZSB0YWJsZS4gIEZvciBleGFtcGxlLCB5b3VyIHZpcnR1YWwgc2VydmVyIGdldHMgMjAwXG4gIDY1Olx0XHQgIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQsIHRoZSBjb25uZWN0aW9uIGxhc3RzIGZvciAyMDAgc2Vjb25kcyBpblxuICA2NjpcdFx0ICBhdmVyYWdlIGluIHRoZSBjb25uZWN0aW9uIHRhYmxlLCB0aGUgdGFibGUgc2l6ZSBzaG91bGQgYmUgbm90IGZhclxuICA2NzpcdFx0ICBsZXNzIHRoYW4gMjAweDIwMCwgaXQgaXMgZ29vZCB0byBzZXQgdGhlIHRhYmxlIHNpemUgMzI3NjggKDIqKjE1KS5cbiAgNjg6XHRcbiAgNjk6XHRcdCAgQW5vdGhlciBub3RlIHRoYXQgZWFjaCBjb25uZWN0aW9uIG9jY3VwaWVzIDEyOCBieXRlcyBlZmZlY3RpdmVseSBhbmRcbiAgNzA6XHRcdCAgZWFjaCBoYXNoIGVudHJ5IHVzZXMgOCBieXRlcywgc28geW91IGNhbiBlc3RpbWF0ZSBob3cgbXVjaCBtZW1vcnkgaXNcbiAgNzE6XHRcdCAgbmVlZGVkIGZvciB5b3VyIGJveC5cbiAgNzI6XHRcbiAgNzM6XHRcdCAgWW91IGNhbiBvdmVyd3JpdGUgdGhpcyBudW1iZXIgc2V0dGluZyBjb25uX3RhYl9iaXRzIG1vZHVsZSBwYXJhbWV0ZXJcbiAgNzQ6XHRcdCAgb3IgYnkgYXBwZW5kaW5nIGlwX3ZzLmNvbm5fdGFiX2JpdHM9PyB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBpZlxuICA3NTpcdFx0ICBJUCBWUyB3YXMgY29tcGlsZWQgYnVpbHQtaW4uXG4gIDc2Olx0XG4gIDc3Olx0Y29tbWVudCBcJiMzNDtJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDc4Olx0XG4gIDc5Olx0Y29uZmlnXHRJUF9WU19QUk9UT19UQ1BcbiAgODA6XHRcdGJvb2wgXCYjMzQ7VENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAgODE6XHRcdGhlbHBcbiAgODI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBUQ1AgdHJhbnNwb3J0XG4gIDgzOlx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDg0Olx0XG4gIDg1Olx0Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbiAgODY6XHRcdGJvb2wgXCYjMzQ7VURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XG4gIDg5Olx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDkwOlx0XG4gIDkxOlx0Y29uZmlnXHRJUF9WU19QUk9UT19BSF9FU1BcbiAgOTI6XHRcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxuICA5MzpcdFxuICA5NDpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fRVNQXG4gIDk1Olx0XHRib29sIFwmIzM0O0VTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uXG4gIDk4Olx0XHQgIFNlY3VyaXR5IFBheWxvYWQpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fQUhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTgKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogNTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIElQVlMgQ29ubmVjdGlvbiBNYW5hZ2VtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0aGlzIHBhdGNoIGlzIHJlYWxseSBkb2luZy4gVGhlIGNvcmUgbW9kdWxlIGlzIHVuZG91YnRlZGx5IGBJUF9WU2AsIGFuZCB3aGlsZSB3ZSBjb3VsZCBiZSBleGhhdXN0aXZlIGFuZCBpbmNsdWRlIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBmb3IgY29tcGxldGVuZXNzLCBgSVBfVlNgIGlzIHRoZSBjcml0aWNhbCBwaWVjZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgaGVyZS4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgaXQgdG91Y2hlcyBgaXBfdnNfY29ubi5jYC4gTGV0JiMzOTtzIGNsYXJpZnkgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4gSSByZWNhbGwgdGhlbSBidXQgSSB3aWxsIG1ha2Ugc3VyZSBJIGhhdmUgdGhlbSBleGFjdGx5IHJpZ2h0LiBJdCYjMzk7czogYGNvbm5fdGFiX2xvY2tgLCBgaXBfdnNfY29ubl9oYXNoYCwgYGlwX3ZzX2Nvbm5fdW5saW5rYCwgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAsIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AsIGFuZCBgaXBfdnNfYmluZF9kZXN0YC4KCkkmIzM5O3ZlIGdvdCB0aGUgbGlzdC4gVGltZSB0byByZWZpbmUgdGhpcyBsaXN0LiBgY29ubl90YWJfbG9ja2AgaXMgbWFya2VkIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYCwgc28gSSBjYW4gYWxtb3N0IGlnbm9yZSBpdCwgYXMgaXQgaXMgaW5saW5lZC4KClNvIHRoZSBtYWluIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGlwX3ZzX2Nvbm5faGFzaGAsIGBpcF92c19jb25uX3VubGlua2AsIGBpcF92c19jb25uX2ZpbGxfY3BvcnRgLCBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLCBhbmQgYGlwX3ZzX2JpbmRfZGVzdGAuIEkgc2hvdWxkIGdpdmUgYWRkaXRpb25hbCBjb25zaWRlcmF0aW9uIHRvIGBpcF92c19jb25uX2hhc2hgIGFuZCBgaXBfdnNfY29ubl91bmxpbmtgLCBnaXZlbiB0aGV5IGxpa2VseSBzaXQgb24gdGhlIGhvdCBwYXRoLiBUaGVzZSBhcmUgY2FsbGVkIGZvciBldmVyeSBjb25uZWN0aW9uLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIuIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AgaXMgY2FsbGVkIHdoZW4gYSBmb3J3YXJkaW5nIG1ldGhvZCBjaGFuZ2VzOyBgaXBfdnNfYmluZF9kZXN0YCBpcyBjYWxsZWQgd2hlbiBiaW5kaW5nIGEgZGVzdGluYXRpb24sIGFuZCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCBpcyBmb3IgdGhlIGNsaWVudCBwb3J0LCBzbyB0aGV5IGFyZSBub3QgcXVpdGUgYXMgaG90LCBidXQgbW9yZSBzcGVjaWZpYy4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9ucywgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AgYW5kIGBpcF92c19iaW5kX2Rlc3RgIGFzIHRoZXkgYXJlIG1vcmUgc3BlY2lhbGl6ZWQgYW5kIGxpa2VseSBpbXBhY3Qgc3BlY2lmaWMgY29ubmVjdGlvbiBiZWhhdmlvcnMuIGBpcF92c19jb25uX2ZpbGxfY3BvcnRgIGlzIGFsc28gZ29vZC4KCkkgd2lsbCBhbHNvIHF1aWNrbHkgY2hlY2sgd2hldGhlciBhbnkgYXJlIGBzdGF0aWNgLiBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgIGlzIHN0YXRpYzsgdGhlIHJlc3QgYXJlIG5vdC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdyBJJiMzOTttIHJlYWR5IHRvIHByZXNlbnQgbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2smIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2hhc2gmIzM0OywKICAgICYjMzQ7aXBfdnNfY29ubl91bmxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIElQVlMgY29ubmVjdGlvbiBoYXNoaW5nIGFuZCBsb2NraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgZG91YmxlIGhhc2hpbmcgYW5kIGZvcndhcmRpbmcgbWV0aG9kcyBhcmUgaGFuZGxlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2JpbmRfZGVzdCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2ZpbGxfY3BvcnQmIzM0OywKICAgICYjMzQ7aXBfdnNfY29ubl9oYXNoJiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fdW5saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBJUFZTIGNvbm5lY3Rpb24gaGFzaGluZyBhbmQgbG9ja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGNoYW5nZXMgdG8gaG93IGRvdWJsZSBoYXNoaW5nIGFuZCBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIGhhbmRsZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODoxNS4yOTY0NjQ5NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODk5MjMyNjczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jb25uX2NoYW5nZV9md2RfbWFza1wiLFxuICAgIFwiaXBfdnNfYmluZF9kZXN0XCIsXG4gICAgXCJpcF92c19jb25uX2ZpbGxfY3BvcnRcIixcbiAgICBcImlwX3ZzX2Nvbm5faGFzaFwiLFxuICAgIFwiaXBfdnNfY29ubl91bmxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVBWUyBjb25uZWN0aW9uIGhhc2hpbmcgYW5kIGxvY2tpbmcgbG9naWMsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBjaGFuZ2VzIHRvIGhvdyBkb3VibGUgaGFzaGluZyBhbmQgZm9yd2FyZGluZyBtZXRob2RzIGFyZSBoYW5kbGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODoxNS4yOTY0NzAzOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDkzMzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY3NzUxZDk3NDU5OTI0YWJkMWNhNDM1YzJkYWE1YjA2YWVkMDAwZmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAwMjo1ODoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbmluZGV4IGNiMzY2NDFmOGQxY2MxLi4yYTkwM2FmOTI3Zjc2YiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbkBAIC03MCwyNSArNzAsNDUgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxcbiAgKiAtIGhhc2ggdGFibGUgcmVzaXplIHdvcmtzIGxpa2UgcmVoYXNoIGJ1dCBhbHdheXMgcmVoYXNoZXMgaW50byBuZXcgdGFibGVcXG4gICogLSBiaXQgbG9jayBvbiBidWNrZXQgc2VyaWFsaXplcyBhbGwgb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGUgY2hhaW5cXG4rICogLSBvbiByZXNpemUsIGJ1Y2tldCBmcm9tIHRoZSBvbGQgdGFibGUgaXMgbG9ja2VkIGJlZm9yZSBidWNrZXQgZnJvbSB0aGVcXG4rICogbmV3IHRhYmxlXFxuICAqIC0gY3AtXFx1MDAzZWxvY2sgcHJvdGVjdHMgY29ubiBmaWVsZHMgbGlrZSBjcC1cXHUwMDNlZmxhZ3MsIGNwLVxcdTAwM2VkZXN0XFxuICAqL1xcbiBcXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXFxuKy8qKlxcbisgICogY29ubl90YWJfbG9jayAtIExvY2sgY29ubl90YWIgYnVja2V0cyBmb3IgY29ubiBoYXNoL3VuaGFzaCwgbm90IGZvciByZWhhc2hcXG4rICAqIEB0OlxcdFxcdGhhc2ggdGFibGUgZm9yIGhuMCwgbmV3X3RibCB3aGVuIG5ld19oYXNoPXRydWVcXG4rICAqIEB0MjpcXHRoYXNoIHRhYmxlIGZvciBobjEsIG5ld190Ymwgd2hlbiBuZXdfaGFzaDI9dHJ1ZVxcbisgICogQGNwOlxcdGNvbm5lY3Rpb25cXG4rICAqIEBoYXNoX2tleTpcXHRoYXNoIGtleSBmb3IgaG4wXFxuKyAgKiBAaGFzaF9rZXkyOlxcdGhhc2gga2V5IGZvciBobjFcXG4rICAqIEB1c2UyOlxcdHVzaW5nIGhuMSAoZG91YmxlIGhhc2hpbmcpIGJhc2VkIG9uIHRoZSBmb3J3YXJkaW5nIG1ldGhvZFxcbisgICogQG5ld19oYXNoOlxcdG1vZGUgZm9yIGhuMCwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKVxcbisgICogQG5ld19oYXNoMjpcXHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcXG4rICAqIEBoZWFkX3JldDpcXHRyZXR1cm5lZCBoZWFkIGZvciBobjBcXG4rICAqIEBoZWFkMl9yZXQ6XFx0cmV0dXJuZWQgaGVhZCBmb3IgaG4xXFxuKyAgKlxcbisgICogV2Ugc3VwcG9ydCAzIG1vZGVzOlxcbisgICogLSBzZWVrIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIHVuaGFzaGluZ1xcbisgICogLSBoYXNoIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIGhhc2hpbmdcXG4rICAqIC0gc2VlayBobjAgYW5kIGhhc2ggaG4xLCB1c2VkIHdoZW4gZm9yd2FyZGluZyBtZXRob2QgaXMgY2hhbmdlZFxcbisgICovXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZFxcbi1jb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LFxcbi1cXHQgICAgICB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXFxuLVxcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxcbitjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19yaHQgKnQyLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuK1xcdCAgICAgIHUzMiBoYXNoX2tleSwgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxcbitcXHQgICAgICBib29sIG5ld19oYXNoMiwgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkX3JldCxcXG4rXFx0ICAgICAgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkMl9yZXQpXFxuIHtcXG4gXFx0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcXG4gXFx0dTMyIGhhc2hfa2V5X25ldywgaGFzaF9rZXlfbmV3MjtcXG4tXFx0c3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0O1xcbi1cXHR1MzIgaWR4LCBpZHgyO1xcbitcXHRpbnQgaWR4ID0gMCwgaWR4MiA9IDA7XFxuK1xcbitcXHQvKiBBZHZhbmNlIGlkeDIgd2hlbiBuZXdfaGFzaCBpcyBub3Qgc2V0IGJ1dCBoYXNoX2tleTJcXG4rXFx0ICogaXMgZm9yIG5ldyB0YWJsZVxcbitcXHQgKi9cXG4rXFx0aWYgKG5ld19oYXNoMiBcXHUwMDI2XFx1MDAyNiB1c2UyIFxcdTAwMjZcXHUwMDI2IHQgIT0gdDIpXFxuK1xcdFxcdGlkeDIrKztcXG4gXFxuLVxcdGlkeCA9IGhhc2hfa2V5IFxcdTAwMjYgdC1cXHUwMDNlbWFzaztcXG4tXFx0aWYgKHVzZTIpXFxuLVxcdFxcdGlkeDIgPSBoYXNoX2tleTIgXFx1MDAyNiB0LVxcdTAwM2VtYXNrO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGlkeDIgPSBpZHg7XFxuIFxcdGlmICghbmV3X2hhc2gpIHtcXG4gXFx0XFx0LyogV2UgbmVlZCB0byBsb2NrIHRoZSBidWNrZXQgaW4gdGhlIHJpZ2h0IHRhYmxlICovXFxuIFxcbkBAIC0xMDAsNDYgKzEyMCw0NSBAQCBjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LFxcbiBcXHRcXHRcXHQgKiBib3RoIG5vZGVzIGluIGRpZmZlcmVudCB0YWJsZXMsIHVzZSBpZHgvaWR4MlxcbiBcXHRcXHRcXHQgKiBmb3IgcHJvcGVyIGxvY2sgb3JkZXJpbmcgZm9yIGhlYWRzLlxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWR4ID0gaGFzaF9rZXkgXFx1MDAyNiB0LVxcdTAwM2VtYXNrO1xcbi1cXHRcXHRcXHRpZHggfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKHVzZTIpIHtcXG4tXFx0XFx0XFx0aWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xcbi1cXHRcXHRcXHRcXHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xcbi1cXHRcXHRcXHRcXHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cXHUwMDNlbmV3X3RibCk7XFxuLVxcdFxcdFxcdFxcdGlkeDIgPSBoYXNoX2tleTIgXFx1MDAyNiB0Mi1cXHUwMDNlbWFzaztcXG4tXFx0XFx0XFx0XFx0aWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRpZHgyID0gaWR4O1xcbitcXHRcXHRcXHRpZHgrKztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcdGlmICh1c2UyIFxcdTAwMjZcXHUwMDI2ICFuZXdfaGFzaDIgXFx1MDAyNlxcdTAwMjYgIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7XFxuK1xcdFxcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXFxuK1xcdFxcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQyLVxcdTAwM2VuZXdfdGJsKTtcXG4rXFx0XFx0aWR4MisrO1xcbitcXHR9XFxuIFxcbitcXHRpZiAoIXVzZTIpXFxuK1xcdFxcdGlkeDIgPSBpZHg7XFxuIFxcdGhlYWQgPSB0LVxcdTAwM2VidWNrZXRzICsgKGhhc2hfa2V5IFxcdTAwMjYgdC1cXHUwMDNlbWFzayk7XFxuIFxcdGhlYWQyID0gdXNlMiA/IHQyLVxcdTAwM2VidWNrZXRzICsgKGhhc2hfa2V5MiBcXHUwMDI2IHQyLVxcdTAwM2VtYXNrKSA6IGhlYWQ7XFxuIFxcbi1cXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuLVxcdC8qIERvIG5vdCB0b3VjaCBzZXFjb3VudCwgdGhpcyBpcyBhIHNhZmUgb3BlcmF0aW9uICovXFxuLVxcbi1cXHRpZiAoaWR4IFxcdTAwM2M9IGlkeDIpIHtcXG4rXFx0aWYgKGlkeCBcXHUwMDNlIGlkeDIgfHwgKGhlYWQgXFx1MDAzZSBoZWFkMiBcXHUwMDI2XFx1MDAyNiBpZHggPT0gaWR4MikpIHtcXG4rXFx0XFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XFxuIFxcdFxcdGhsaXN0X2JsX2xvY2soaGVhZCk7XFxuLVxcdFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbi1cXHRcXHRcXHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XFxuIFxcdFxcdGhsaXN0X2JsX2xvY2soaGVhZCk7XFxuK1xcdFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbitcXHRcXHRcXHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcXG4gXFx0fVxcbiBcXHRpZiAoIW5ld19oYXNoKSB7XFxuK1xcdFxcdGJvb2wgY2hhbmdlZDtcXG4rXFxuIFxcdFxcdC8qIEVuc3VyZSBoYXNoX2tleSBpcyByZWFkIHVuZGVyIGxvY2sgKi9cXG4gXFx0XFx0aGFzaF9rZXlfbmV3ID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXkpO1xcbi1cXHRcXHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbitcXHRcXHRjaGFuZ2VkID0gaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3O1xcbitcXHRcXHRpZiAodXNlMiBcXHUwMDI2XFx1MDAyNiAhbmV3X2hhc2gyKSB7XFxuK1xcdFxcdFxcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMS5oYXNoX2tleSk7XFxuK1xcdFxcdFxcdGNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGhhc2hfa2V5X25ldzIgPSBoYXNoX2tleTI7XFxuK1xcdFxcdH1cXG4gXFx0XFx0LyogSGFzaCBjaGFuZ2VkID8gKi9cXG4tXFx0XFx0aWYgKGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldyB8fFxcbi1cXHRcXHQgICAgKGhhc2hfa2V5MiAhPSBoYXNoX2tleV9uZXcyIFxcdTAwMjZcXHUwMDI2IHVzZTIpKSB7XFxuK1xcdFxcdGlmIChjaGFuZ2VkKSB7XFxuIFxcdFxcdFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbiBcXHRcXHRcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xcbiBcXHRcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XFxuLVxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiBcXHRcXHRcXHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcXG4gXFx0XFx0XFx0aGFzaF9rZXkyID0gaGFzaF9rZXlfbmV3MjtcXG4gXFx0XFx0XFx0Z290byByZXRyeTtcXG5AQCAtMTU1LDcgKzE3NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25uX3RhYl91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsXFxuIFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbiBcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xcbiBcXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XFxuLVxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuQEAgLTI2OCw4ICsyODYsOSBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXHRcXHR1c2UyID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuLVxcdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXFxuLVxcdFxcdCAgICAgIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbitcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuK1xcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXFxuK1xcdFxcdCAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4gXFxuIFxcdGNwLVxcdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xcbiBcXHRXUklURV9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcXG5AQCAtMjgwLDYgKzI5OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuIFxcdFxcdGhsaXN0X2JsX2FkZF9oZWFkX3JjdShcXHUwMDI2Y3AtXFx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XFxuIFxcbiBcXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0cmV0ID0gMTtcXG4gXFxuIFxcdC8qIFNjaGVkdWxlIHJlc2l6aW5nIGlmIGxvYWQgaW5jcmVhc2VzICovXFxuQEAgLTMwNiwxOCArMzI2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuIFxcdFxcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFxcdTAwMjZjcC1cXHUwMDNlcmVmY250KTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiBcXG4gXFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVxcdTAwM2Vjb25uX3RhYik7XFxuIFxcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXkpO1xcbiBcXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMS5oYXNoX2tleSk7XFxuIFxcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XFxuIFxcbi1cXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcXG4tXFx0XFx0ICAgICAgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuK1xcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLFxcbitcXHRcXHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbiBcXG4gXFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHtcXG4gXFx0XFx0LyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi9cXG4tXFx0XFx0aWYgKHJlZmNvdW50X2RlY19pZl9vbmUoXFx1MDAyNmNwLVxcdTAwM2VyZWZjbnQpKSB7XFxuK1xcdFxcdGlmICh1c2UyID09IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmVmY291bnRfZGVjX2lmX29uZShcXHUwMDI2Y3AtXFx1MDAzZXJlZmNudCkpIHtcXG4gXFx0XFx0XFx0aGxpc3RfYmxfZGVsX3JjdShcXHUwMDI2Y3AtXFx1MDAzZWhuMC5ub2RlKTtcXG4gXFx0XFx0XFx0aWYgKHVzZTIpXFxuIFxcdFxcdFxcdFxcdGhsaXN0X2JsX2RlbF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjEubm9kZSk7XFxuQEAgLTMyOCw2ICszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXG4gXFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcXG4gXFxuK1xcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTYzMiw2ICs2NTUsNyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcXG4gXFx0aW50IG50Ymw7XFxuIFxcdGludCBkaXI7XFxuIFxcbityZXN0YXJ0OlxcbiBcXHQvKiBObyBwYWNrZXRzIGZyb20gaW5zaWRlLCBzbyB3ZSBjYW4gZG8gaXQgaW4gMiBzdGVwcy4gKi9cXG4gXFx0ZGlyID0gdXNlMiA/IDEgOiAwO1xcbiBcXG5AQCAtNjg2LDYgKzcxMCwyMyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcXG4gXFx0LyogUHJvdGVjdCB0aGUgY3AtXFx1MDAzZWZsYWdzIG1vZGlmaWNhdGlvbiAqL1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG4gXFxuK1xcdC8qIFJlY2hlY2sgdGhlIGZvcndhcmRpbmcgbWV0aG9kIHVuZGVyIGxvY2sgKi9cXG4rXFx0aWYgKHVzZTIgIT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XFxuK1xcdFxcdHVzZTIgPSAhdXNlMjtcXG4rXFx0XFx0aWYgKHVzZTIpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0LyogUmVzdGFydCB3aXRoIG5ldyB1c2UyIHZhbHVlICovXFxuK1xcdFxcdFxcdGdvdG8gcmVzdGFydDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoZGlyKSB7XFxuK1xcdFxcdFxcdC8qIE5vdCBzdGFydGVkIHlldCwgc28ganVzdCBza2lwIGRpciAxICovXFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdGRpci0tO1xcbitcXHRcXHRcXHRnb3RvIG5leHRfZGlyO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIEp1c3QgZmluaXNoIGRpciAwICovXFxuK1xcdH1cXG4rXFxuIFxcdC8qIExvY2sgc2VxY291bnQgb25seSBmb3IgdGhlIG9sZCBidWNrZXQsIGV2ZW4gaWYgd2UgYXJlIG9uIG5ldyB0YWJsZVxcbiBcXHQgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLlxcbiBcXHQgKi9cXG5AQCAtNzUyLDYgKzc5Myw2MSBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcXG4gXFx0XFx0Z290byBuZXh0X2RpcjtcXG4gfVxcbiBcXG4rLyogQ2hhbmdlIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiAqL1xcbitzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBjcC1cXHUwMDNlaXB2cztcXG4rXFx0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcXG4rXFx0dTMyIGhhc2gyLCBoYXNoX2tleSwgaGFzaF9rZXkyO1xcbitcXHRzdHJ1Y3QgaXBfdnNfcmh0ICp0LCAqdDI7XFxuK1xcbitcXHQvKiBTZWUgaXBfdnNfY29ubl91c2VfaGFzaDIoKSBmb3IgcmVmZXJlbmNlICovXFxuK1xcdGlmICgoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSB8fFxcbitcXHQgICAgLyogTm8gY2hhbmdlIGluIGRvdWJsZSBoYXNoaW5nID8gKi9cXG4rXFx0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkgPT1cXG4rXFx0ICAgICgobmV3X2ZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkpIHtcXG4rXFx0XFx0Y3AtXFx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVxcdTAwM2Vjb25uX3RhYik7XFxuK1xcdGlmIChpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcXG4rXFx0XFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFx0XFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbitcXG4rXFx0XFx0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxcbitcXHRcXHRcXHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgZmFsc2UgLyogbmV3X2hhc2gyICovLFxcbitcXHRcXHRcXHQgICAgICBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4rXFxuK1xcdFxcdC8qIEtlZXAgYm90aCBoYXNoIGtleXMgaW4gc2FtZSB0YWJsZSAqL1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFx0XFx0V1JJVEVfT05DRShjcC1cXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7XFxuK1xcdFxcdGhsaXN0X2JsX2RlbF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjEubm9kZSk7XFxuK1xcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4rXFxuK1xcdFxcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovXFxuK1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFxuK1xcdFxcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQtXFx1MDAzZW5ld190YmwpO1xcbitcXHRcXHRoYXNoMiA9IGlwX3ZzX2Nvbm5faGFzaGtleV9jb25uKHQyLCBjcCwgdHJ1ZSk7XFxuK1xcdFxcdGhhc2hfa2V5MiA9IGlwX3ZzX3JodF9idWlsZF9oYXNoX2tleSh0MiwgaGFzaDIpO1xcbitcXG4rXFx0XFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXFxuK1xcdFxcdGNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sXFxuK1xcdFxcdFxcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCB0cnVlIC8qIG5ld19oYXNoMiAqLyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuK1xcbitcXHRcXHRXUklURV9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5Mik7XFxuK1xcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4rXFx0XFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFxcdTAwMjZjcC1cXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcXG4rXFxuK1xcdFxcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cXHUwMDNlc2l6ZSAqL1xcbiBzdGF0aWMgaW50IGlwX3ZzX2Nvbm5fZGVmYXVsdF9sb2FkX2ZhY3RvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG4ge1xcbkBAIC0xMDE0LDYgKzExMTAsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0ZmxhZ3MgPSBjcC1cXHUwMDNlZmxhZ3M7XFxuIFxcdC8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TWU5DKSB7XFxuK1xcdFxcdC8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqL1xcbitcXHRcXHRjb25uX2ZsYWdzIFxcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcXG4rXFxuIFxcdFxcdC8qIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB0ZW1wbGF0ZSBhbmQgaXMgY3JlYXRlZFxcbiBcXHRcXHQgKiBieSBzeW5jLCBwcmVzZXJ2ZSB0aGUgYWN0aXZpdHkgZmxhZy5cXG4gXFx0XFx0ICovXFxuQEAgLTEwMjEsOSArMTEyMCwxOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0XFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFO1xcbiBcXHRcXHQvKiBjb25uZWN0aW9ucyBpbmhlcml0IGZvcndhcmRpbmcgbWV0aG9kIGZyb20gZGVzdCAqL1xcbiBcXHRcXHRmbGFncyBcXHUwMDI2PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7XFxuK1xcdFxcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XFxuK1xcdFxcdC8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW5cXG4rXFx0XFx0ICogaGFwcGVuIG9ubHkgdW5kZXIgbG9ja3NcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKVxcbitcXHRcXHRcXHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGNwLVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbitcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0fVxcbi1cXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbi1cXHRjcC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0Y3AtXFx1MDAzZWRlc3QgPSBkZXN0O1xcbiBcXG4gXFx0SVBfVlNfREJHX0JVRig3LCBcXFwiQmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCBcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjU4OjE1Ljg5ODM2NzczNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzOTA0MTE2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX2JpbmRfZGVzdFwiLFxuICAgIFwiaXBfdnNfY29ubl9maWxsX2Nwb3J0XCIsXG4gICAgXCJpcF92c19jb25uX2hhc2hcIixcbiAgICBcImlwX3ZzX2Nvbm5fdW5saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIElQVlMgY29ubmVjdGlvbiBoYXNoaW5nIGFuZCBsb2NraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgZG91YmxlIGhhc2hpbmcgYW5kIGZvcndhcmRpbmcgbWV0aG9kcyBhcmUgaGFuZGxlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNzc1MWQ5NzQ1OTkyNGFiZDFjYTQzNWMyZGFhNWIwNmFlZDAwMGZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMjo1ODoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG5pbmRleCBjYjM2NjQxZjhkMWNjMS4uMmE5MDNhZjkyN2Y3NmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG5AQCAtNzAsMjUgKzcwLDQ1IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxuICAqIC0gaGFzaCB0YWJsZSByZXNpemUgd29ya3MgbGlrZSByZWhhc2ggYnV0IGFsd2F5cyByZWhhc2hlcyBpbnRvIG5ldyB0YWJsZVxuICAqIC0gYml0IGxvY2sgb24gYnVja2V0IHNlcmlhbGl6ZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIGNoYWluXG4rICogLSBvbiByZXNpemUsIGJ1Y2tldCBmcm9tIHRoZSBvbGQgdGFibGUgaXMgbG9ja2VkIGJlZm9yZSBidWNrZXQgZnJvbSB0aGVcbisgKiBuZXcgdGFibGVcbiAgKiAtIGNwLVx1MDAzZWxvY2sgcHJvdGVjdHMgY29ubiBmaWVsZHMgbGlrZSBjcC1cdTAwM2VmbGFncywgY3AtXHUwMDNlZGVzdFxuICAqL1xuIFxuLS8qIExvY2sgY29ubl90YWIgYnVja2V0IGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaCAqL1xuKy8qKlxuKyAgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaFxuKyAgKiBAdDpcdFx0aGFzaCB0YWJsZSBmb3IgaG4wLCBuZXdfdGJsIHdoZW4gbmV3X2hhc2g9dHJ1ZVxuKyAgKiBAdDI6XHRoYXNoIHRhYmxlIGZvciBobjEsIG5ld190Ymwgd2hlbiBuZXdfaGFzaDI9dHJ1ZVxuKyAgKiBAY3A6XHRjb25uZWN0aW9uXG4rICAqIEBoYXNoX2tleTpcdGhhc2gga2V5IGZvciBobjBcbisgICogQGhhc2hfa2V5MjpcdGhhc2gga2V5IGZvciBobjFcbisgICogQHVzZTI6XHR1c2luZyBobjEgKGRvdWJsZSBoYXNoaW5nKSBiYXNlZCBvbiB0aGUgZm9yd2FyZGluZyBtZXRob2RcbisgICogQG5ld19oYXNoOlx0bW9kZSBmb3IgaG4wLCBoYXNoIG5vZGUgKHRydWUpIG9yIHNlZWsgbm9kZSAoZmFsc2UpXG4rICAqIEBuZXdfaGFzaDI6XHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbisgICogQGhlYWRfcmV0Olx0cmV0dXJuZWQgaGVhZCBmb3IgaG4wXG4rICAqIEBoZWFkMl9yZXQ6XHRyZXR1cm5lZCBoZWFkIGZvciBobjFcbisgICpcbisgICogV2Ugc3VwcG9ydCAzIG1vZGVzOlxuKyAgKiAtIHNlZWsgbW9kZSBmb3IgYm90aCBub2RlcywgdXNlZCBmb3IgdW5oYXNoaW5nXG4rICAqIC0gaGFzaCBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciBoYXNoaW5nXG4rICAqIC0gc2VlayBobjAgYW5kIGhhc2ggaG4xLCB1c2VkIHdoZW4gZm9yd2FyZGluZyBtZXRob2QgaXMgY2hhbmdlZFxuKyAgKi9cbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWRcbi1jb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LFxuLVx0ICAgICAgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxuLVx0ICAgICAgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkX3JldCwgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkMl9yZXQpXG4rY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfcmh0ICp0Miwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuK1x0ICAgICAgdTMyIGhhc2hfa2V5LCB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXG4rXHQgICAgICBib29sIG5ld19oYXNoMiwgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkX3JldCxcbitcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxuIHtcbiBcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XG4gXHR1MzIgaGFzaF9rZXlfbmV3LCBoYXNoX2tleV9uZXcyO1xuLVx0c3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0O1xuLVx0dTMyIGlkeCwgaWR4MjtcbitcdGludCBpZHggPSAwLCBpZHgyID0gMDtcbitcbitcdC8qIEFkdmFuY2UgaWR4MiB3aGVuIG5ld19oYXNoIGlzIG5vdCBzZXQgYnV0IGhhc2hfa2V5MlxuK1x0ICogaXMgZm9yIG5ldyB0YWJsZVxuK1x0ICovXG4rXHRpZiAobmV3X2hhc2gyIFx1MDAyNlx1MDAyNiB1c2UyIFx1MDAyNlx1MDAyNiB0ICE9IHQyKVxuK1x0XHRpZHgyKys7XG4gXG4tXHRpZHggPSBoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuLVx0aWYgKHVzZTIpXG4tXHRcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdGVsc2Vcbi1cdFx0aWR4MiA9IGlkeDtcbiBcdGlmICghbmV3X2hhc2gpIHtcbiBcdFx0LyogV2UgbmVlZCB0byBsb2NrIHRoZSBidWNrZXQgaW4gdGhlIHJpZ2h0IHRhYmxlICovXG4gXG5AQCAtMTAwLDQ2ICsxMjAsNDUgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbiBcdFx0XHQgKiBib3RoIG5vZGVzIGluIGRpZmZlcmVudCB0YWJsZXMsIHVzZSBpZHgvaWR4MlxuIFx0XHRcdCAqIGZvciBwcm9wZXIgbG9jayBvcmRlcmluZyBmb3IgaGVhZHMuXG4gXHRcdFx0ICovXG4tXHRcdFx0aWR4ID0gaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdFx0XHRpZHggfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XG4tXHRcdH1cbi1cdFx0aWYgKHVzZTIpIHtcbi1cdFx0XHRpZiAoIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7XG4tXHRcdFx0XHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xuLVx0XHRcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXHUwMDNlbmV3X3RibCk7XG4tXHRcdFx0XHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrO1xuLVx0XHRcdFx0aWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWR4MiA9IGlkeDtcbitcdFx0XHRpZHgrKztcbiBcdFx0fVxuIFx0fVxuK1x0aWYgKHVzZTIgXHUwMDI2XHUwMDI2ICFuZXdfaGFzaDIgXHUwMDI2XHUwMDI2ICFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xuK1x0XHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xuK1x0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cdTAwM2VuZXdfdGJsKTtcbitcdFx0aWR4MisrO1xuK1x0fVxuIFxuK1x0aWYgKCF1c2UyKVxuK1x0XHRpZHgyID0gaWR4O1xuIFx0aGVhZCA9IHQtXHUwMDNlYnVja2V0cyArIChoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrKTtcbiBcdGhlYWQyID0gdXNlMiA/IHQyLVx1MDAzZWJ1Y2tldHMgKyAoaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrKSA6IGhlYWQ7XG4gXG4tXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHQvKiBEbyBub3QgdG91Y2ggc2VxY291bnQsIHRoaXMgaXMgYSBzYWZlIG9wZXJhdGlvbiAqL1xuLVxuLVx0aWYgKGlkeCBcdTAwM2M9IGlkeDIpIHtcbitcdGlmIChpZHggXHUwMDNlIGlkeDIgfHwgKGhlYWQgXHUwMDNlIGhlYWQyIFx1MDAyNlx1MDAyNiBpZHggPT0gaWR4MikpIHtcbitcdFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XG4gXHRcdGhsaXN0X2JsX2xvY2soaGVhZCk7XG4tXHRcdGlmIChoZWFkICE9IGhlYWQyKVxuLVx0XHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0fSBlbHNlIHtcbi1cdFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XG4gXHRcdGhsaXN0X2JsX2xvY2soaGVhZCk7XG4rXHRcdGlmIChoZWFkICE9IGhlYWQyKVxuK1x0XHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0fVxuIFx0aWYgKCFuZXdfaGFzaCkge1xuK1x0XHRib29sIGNoYW5nZWQ7XG4rXG4gXHRcdC8qIEVuc3VyZSBoYXNoX2tleSBpcyByZWFkIHVuZGVyIGxvY2sgKi9cbiBcdFx0aGFzaF9rZXlfbmV3ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4tXHRcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbitcdFx0Y2hhbmdlZCA9IGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldztcbitcdFx0aWYgKHVzZTIgXHUwMDI2XHUwMDI2ICFuZXdfaGFzaDIpIHtcbitcdFx0XHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4rXHRcdFx0Y2hhbmdlZCB8PSBoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRoYXNoX2tleV9uZXcyID0gaGFzaF9rZXkyO1xuK1x0XHR9XG4gXHRcdC8qIEhhc2ggY2hhbmdlZCA/ICovXG4tXHRcdGlmIChoYXNoX2tleSAhPSBoYXNoX2tleV9uZXcgfHxcbi1cdFx0ICAgIChoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MiBcdTAwMjZcdTAwMjYgdXNlMikpIHtcbitcdFx0aWYgKGNoYW5nZWQpIHtcbiBcdFx0XHRpZiAoaGVhZCAhPSBoZWFkMilcbiBcdFx0XHRcdGhsaXN0X2JsX3VubG9jayhoZWFkMik7XG4gXHRcdFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQpO1xuLVx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0XHRcdGhhc2hfa2V5ID0gaGFzaF9rZXlfbmV3O1xuIFx0XHRcdGhhc2hfa2V5MiA9IGhhc2hfa2V5X25ldzI7XG4gXHRcdFx0Z290byByZXRyeTtcbkBAIC0xNTUsNyArMTc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbm5fdGFiX3VubG9jayhzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCxcbiBcdGlmIChoZWFkICE9IGhlYWQyKVxuIFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQpO1xuLVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbkBAIC0yNjgsOCArMjg2LDkgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0dXNlMiA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0Y29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLyxcbitcdFx0ICAgICAgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiBcbiBcdGNwLVx1MDAzZWZsYWdzIHw9IElQX1ZTX0NPTk5fRl9IQVNIRUQ7XG4gXHRXUklURV9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSwgaGFzaF9rZXkpO1xuQEAgLTI4MCw2ICsyOTksNyBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFx0XHRobGlzdF9ibF9hZGRfaGVhZF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcbiBcbiBcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJldCA9IDE7XG4gXG4gXHQvKiBTY2hlZHVsZSByZXNpemluZyBpZiBsb2FkIGluY3JlYXNlcyAqL1xuQEAgLTMwNiwxOCArMzI2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXG4gXHR0ID0gcmN1X2RlcmVmZXJlbmNlKGlwdnMtXHUwMDNlY29ubl90YWIpO1xuIFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiBcdGhhc2hfa2V5MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuIFx0dXNlMiA9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKTtcbiBcbi1cdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLFxuLVx0XHQgICAgICBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4rXHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbitcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHtcbiBcdFx0LyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi9cbi1cdFx0aWYgKHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KSkge1xuK1x0XHRpZiAodXNlMiA9PSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCkpIHtcbiBcdFx0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMC5ub2RlKTtcbiBcdFx0XHRpZiAodXNlMilcbiBcdFx0XHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUpO1xuQEAgLTMyOCw2ICszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFxuIFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiBcbitcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTYzMiw2ICs2NTUsNyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbiBcdGludCBudGJsO1xuIFx0aW50IGRpcjtcbiBcbityZXN0YXJ0OlxuIFx0LyogTm8gcGFja2V0cyBmcm9tIGluc2lkZSwgc28gd2UgY2FuIGRvIGl0IGluIDIgc3RlcHMuICovXG4gXHRkaXIgPSB1c2UyID8gMSA6IDA7XG4gXG5AQCAtNjg2LDYgKzcxMCwyMyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbiBcdC8qIFByb3RlY3QgdGhlIGNwLVx1MDAzZWZsYWdzIG1vZGlmaWNhdGlvbiAqL1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuIFxuK1x0LyogUmVjaGVjayB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9jayAqL1xuK1x0aWYgKHVzZTIgIT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XG4rXHRcdHVzZTIgPSAhdXNlMjtcbitcdFx0aWYgKHVzZTIpIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbitcdFx0XHQvKiBSZXN0YXJ0IHdpdGggbmV3IHVzZTIgdmFsdWUgKi9cbitcdFx0XHRnb3RvIHJlc3RhcnQ7XG4rXHRcdH1cbitcdFx0aWYgKGRpcikge1xuK1x0XHRcdC8qIE5vdCBzdGFydGVkIHlldCwgc28ganVzdCBza2lwIGRpciAxICovXG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4rXHRcdFx0ZGlyLS07XG4rXHRcdFx0Z290byBuZXh0X2RpcjtcbitcdFx0fVxuK1x0XHQvKiBKdXN0IGZpbmlzaCBkaXIgMCAqL1xuK1x0fVxuK1xuIFx0LyogTG9jayBzZXFjb3VudCBvbmx5IGZvciB0aGUgb2xkIGJ1Y2tldCwgZXZlbiBpZiB3ZSBhcmUgb24gbmV3IHRhYmxlXG4gXHQgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLlxuIFx0ICovXG5AQCAtNzUyLDYgKzc5Myw2MSBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbiBcdFx0Z290byBuZXh0X2RpcjtcbiB9XG4gXG4rLyogQ2hhbmdlIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiAqL1xuK3N0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIG5ld19mbGFncylcbit7XG4rXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IGNwLVx1MDAzZWlwdnM7XG4rXHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyO1xuK1x0dTMyIGhhc2gyLCBoYXNoX2tleSwgaGFzaF9rZXkyO1xuK1x0c3RydWN0IGlwX3ZzX3JodCAqdCwgKnQyO1xuK1xuK1x0LyogU2VlIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKCkgZm9yIHJlZmVyZW5jZSAqL1xuK1x0aWYgKChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSB8fFxuK1x0ICAgIC8qIE5vIGNoYW5nZSBpbiBkb3VibGUgaGFzaGluZyA/ICovXG4rXHQgICAgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRKSA9PVxuK1x0ICAgICgobmV3X2ZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfRldEX01BU0spID09IElQX1ZTX0NPTk5fRl9NQVNRKSkge1xuK1x0XHRjcC1cdTAwM2VmbGFncyA9IG5ld19mbGFncztcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbitcdGlmIChpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcbitcdFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xuK1x0XHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuK1x0XHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbitcbitcdFx0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuK1x0XHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sXG4rXHRcdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuK1xuK1x0XHQvKiBLZWVwIGJvdGggaGFzaCBrZXlzIGluIHNhbWUgdGFibGUgKi9cbitcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbitcdFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5KTtcbitcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjEubm9kZSk7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuK1xuK1x0XHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogU3RhcnQgZG91YmxlIGhhc2hpbmcgKi9cbitcbitcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbitcbitcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodC1cdTAwM2VuZXdfdGJsKTtcbitcdFx0aGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpO1xuK1x0XHRoYXNoX2tleTIgPSBpcF92c19yaHRfYnVpbGRfaGFzaF9rZXkodDIsIGhhc2gyKTtcbitcbitcdFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXG4rXHRcdGNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sXG4rXHRcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIHRydWUgLyogbmV3X2hhc2gyICovLFxuK1x0XHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbitcbitcdFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5Mik7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuK1x0XHRobGlzdF9ibF9hZGRfaGVhZF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcbitcbitcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbitcdH1cbit9XG4rXG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cdTAwM2VzaXplICovXG4gc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4ge1xuQEAgLTEwMTQsNiArMTExMCw5IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0ZmxhZ3MgPSBjcC1cdTAwM2VmbGFncztcbiBcdC8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TWU5DKSB7XG4rXHRcdC8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqL1xuK1x0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUO1xuK1xuIFx0XHQvKiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdGVtcGxhdGUgYW5kIGlzIGNyZWF0ZWRcbiBcdFx0ICogYnkgc3luYywgcHJlc2VydmUgdGhlIGFjdGl2aXR5IGZsYWcuXG4gXHRcdCAqL1xuQEAgLTEwMjEsOSArMTEyMCwxOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdFx0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTtcbiBcdFx0LyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi9cbiBcdFx0ZmxhZ3MgXHUwMDI2PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7XG4rXHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4rXHRcdC8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW5cbitcdFx0ICogaGFwcGVuIG9ubHkgdW5kZXIgbG9ja3NcbitcdFx0ICovXG4rXHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcbitcdFx0XHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xuK1x0XHRlbHNlXG4rXHRcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbitcdH0gZWxzZSB7XG4rXHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHR9XG4tXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xuLVx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGNwLVx1MDAzZWRlc3QgPSBkZXN0O1xuIFxuIFx0SVBfVlNfREJHX0JVRig3LCBcIkJpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjU4OjE1Ljg5ODM3MDA1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTY4NjY2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBJUFZTIENvbm5lY3Rpb24gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jYC4gSXQncyBhbGwgYWJvdXQgaG93IElQVlMgY29ubmVjdGlvbnMgYXJlIGhhc2hlZCBhbmQgbG9ja2VkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBkb3VibGUgaGFzaGluZyBhbmQgaG93IGZvcndhcmRpbmcgaXMgaGFuZGxlZC4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AgYW5kIHRoZXkndmUgYWxzbyBmaWRkbGVkIHdpdGggYGNvbm5fdGFiX2xvY2tgLiBSaWdodCBhd2F5LCBJIHNlZSB0aGlzIGlzIGNvcmUgSVBWUyBsb2dpYyDigJMgdGhlIGd1dHMgb2YgaXRzIGNvbm5lY3Rpb24gbWFuYWdlbWVudC5cblxuVGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyB1cCBpbiBteSBoZWFkIGlzIGFsd2F5czogXCJJcyB0aGlzIHJlYWNoYWJsZT9cIiBDb25zaWRlcmluZyBJUFZTIGlzIGEga2VybmVsIGxvYWQgYmFsYW5jZXIsIHVzZWQgdGhyb3VnaCBuZXRsaW5rIG9yIHNvY2tldCBvcHRpb25zLCBhbmQgcHJvY2Vzc2VzIGFjdHVhbCBuZXR3b3JrIHBhY2tldHMsIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIFwieWVzXCIuIFRoaXMgdGhpbmcgKmFic29sdXRlbHkqIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2NyZWFtcyBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBoaXQgdGhpcyBoYXJkLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gYW5kIHBpbnBvaW50IHRoZSBleGFjdCBmdW5jdGlvbnMgdGhhdCB0aGlzIHBhdGNoIGhhcyBtb2RpZmllZC4gV2UgbmVlZCB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzLiBBbHJpZ2h0LCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYGNvbm5fdGFiX2xvY2tgICh3aGljaCwgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIGlzIGFuIGlubGluZSBmdW5jdGlvbiksIGBpcF92c19jb25uX2hhc2hgLCBgaXBfdnNfY29ubl91bmxpbmtgLCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYW5kIGBpcF92c19iaW5kX2Rlc3RgLiBJJ3ZlIGdvdCBhIGdvb2QgbGlzdCB0byBzdGFydCB3aXRoLlxuXG5TbyBteSBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHdpbGwgYmU6IGBpcF92c19jb25uX2hhc2hgLCBgaXBfdnNfY29ubl91bmxpbmtgLCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYW5kIGBpcF92c19iaW5kX2Rlc3RgLlxuXG5CZWZvcmUgSSBmb3JnZXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSBuZWNlc3NhcnkgY29uZmlncyBlbmFibGVkLiBPYnZpb3VzbHksIElQVlMgbmVlZHMgdG8gYmUgdXAgYW5kIHJ1bm5pbmcgZm9yIGFueSBvZiB0aGlzIHRvIG1hdHRlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIElQVlMsIHdoaWNoIHNob3VsZCBiZSBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBHZW5lcmFsbHksIEkgdGhpbmsgaXQncyBgQ09ORklHX0lQX1ZTYCB0aGF0IHdlIG5lZWQuIEp1c3QgdG8gYmUgc3VyZSwgbGV0IG1lIHJ1biBhIHF1aWNrIGdyZXAgdG8gdmVyaWZ5IGFuZCBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6MjIuMzE1MjM4MzI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTIxMzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODoyMi40MDIxNjY1MTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIyOTI1MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBJUFZTIENvbmZpZ3VyYXRpb24gZm9yIFN5bmNocm9uaXphdGlvbiBhbmQgTkFUKipcblxuUmlnaHQsIHNvIHdlJ3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggYElQX1ZTYCBoZXJlLiBUaGF0J3MgdGhlIGNvcmUuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2g7IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCB0aGUgcG90ZW50aWFsIGludGVyZGVwZW5kZW5jaWVzLiBMZXQgbWUganVzdCBxdWlja2x5IHNjYW4gdGhlIGxhbmRzY2FwZS4gQWgsIHRoZSBwYXRjaCBub3RlcyBtZW50aW9uIGBJUF9WU19DT05OX0ZfTUFTUWAsIGBJUF9WU19DT05OX0ZfU1lOQ2AsIGFuZCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYC4gSW50ZXJlc3RpbmcuIFRoZXkncmUgZmxhZ3MsIG5vdCBkaXJlY3QgY29uZmlncywgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuIFRoZXknbGwgaW5mbHVlbmNlIGJlaGF2aW9yLCBjZXJ0YWlubHksIGJ1dCB0aGV5J3JlIG5vdCB0aGUgcHJpbWFyeSBrbm9icyB0byB0d2lkZGxlLiBHaXZlbiB0aGlzIGNvbnRleHQsIEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBJUFZTIHN5bmNocm9uaXphdGlvbiBvciBOQVQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIGNvbnNpZGVyaW5nIGFsbCByZWxldmFudCBzZXR0aW5ncy4gSXQncyB0aW1lIHRvIHJlZmluZSB0aGUgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6MjUuODI1MDkzMTY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjg3OTg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfVlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICdJUFZTIFNIIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cXHRpbnQgXFxcIklQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICdJUFZTIE1IIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXFx0aW50IFxcXCJJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6MjUuOTMxOTc3NTg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNjg3NTg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKklQVlMgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUFZTLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgdGhlIGBLY29uZmlnYCBmaWxlcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhhdCBJUFZTIGlzIGEgcGFydCBvZiBuZXRmaWx0ZXIuIFRvIHF1aWNrbHkgZmlsdGVyIGRvd24gdG8gd2hhdCBJIG5lZWQsIEknbGwgdXNlIGBncmVwYC4gSSdsbCBydW4gYGdyZXAgSVBfVlNgIG9uIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgcHVsbCBvdXQgYWxsIHRoZSBsaW5lcyB0aGF0IGRlZmluZSBvciByZWxhdGUgdG8gSVBWUyBjb25maWd1cmF0aW9ucy4gVGhpcyB3aWxsIGhvcGVmdWxseSBnaXZlIG1lIGEgY29uY2lzZSBsaXN0IHRvIHdvcmsgZnJvbSwgcmF0aGVyIHRoYW4gbmVlZGluZyB0byBtYW51YWxseSBzY2FuIHRoZSBlbnRpcmUgYEtjb25maWdgIGZpbGUuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIElQVlMgZmVhdHVyZXMgYW5kIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODoyOS4wNDg4NTYxMzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxOTYyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjU4OjI5LjEzMzA1NjU5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjU3ODUwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uLiBMb29raW5nIGJhY2ssIGl0J3MgY2xlYXIgdGhhdCBmb2N1c2luZyBvbiBgbWVudWNvbmZpZyBJUF9WU2AgaXMgYWN0dWFsbHkgbWlzbGVhZGluZy4gVGhlIHJlYWwgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoZSBgSVBfVlNgIG9wdGlvbiBpdHNlbGYuIFRoYXQncyB0aGUgb25lIHdlIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGguXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGVuYWJsaW5nIGp1c3QgYElQX1ZTYCBnaXZlIHVzIHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZD8gT3IsIGRvIHdlIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGVuYWJsZSB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgbW9kdWxlcyB0b28sIGxpa2UgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgc28gZm9ydGg/IFRpbWUgdG8gY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODozMS43OTg4NDM2NjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjUxMDM4NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmNvbmZpZyBJUF9WU19QUk9UT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6MzEuOTE1MzYxMTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwNDY3NDUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZSwgdGhpbmtpbmcgbGlrZSBhIGtlcm5lbCBuZXR3b3JraW5nIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBxdWlja2x5IHNjYW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBJUFZTLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGZvciBkZXBsb3ltZW50IG9yIHRyb3VibGVzaG9vdGluZy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHdoaWNoIG9wdGlvbnMgYXJlIGRpcmVjdGx5IGV4cG9zZWQgdG8gdGhlIHVzZXIgdmVyc3VzIHRob3NlIGhhbmRsZWQgaW50ZXJuYWxseS4gSSdtIGV4cGVjdGluZyB0aGUgdXN1YWwgS2NvbmZpZyBjb252ZW50aW9ucywgYnV0IEkgd2FudCB0byBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGFzIHBhcnRpY3VsYXJseSBpbm5vdmF0aXZlIG9yIHByb2JsZW1hdGljIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBCYXNpY2FsbHksIEknbSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGluIGEgZmV3IHNlY29uZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODozNC45MjAwMzc0NDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIElQIFZpcnR1YWwgU2VydmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdG1lbnVjb25maWcgSVBfVlNcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJUCBWaXJ0dWFsIFNlcnZlciBzdXBwb3J0IHdpbGwgbGV0IHlvdSBidWlsZCBhIGhpZ2gtcGVyZm9ybWFuY2VcXG4gIDExOlxcdFxcdCAgdmlydHVhbCBzZXJ2ZXIgYmFzZWQgb24gY2x1c3RlciBvZiB0d28gb3IgbW9yZSByZWFsIHNlcnZlcnMuIFRoaXNcXG4gIDEyOlxcdFxcdCAgb3B0aW9uIG11c3QgYmUgZW5hYmxlZCBmb3IgYXQgbGVhc3Qgb25lIG9mIHRoZSBjbHVzdGVyZWQgY29tcHV0ZXJzXFxuICAxMzpcXHRcXHQgIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgaW50ZXJjZXB0aW5nIGluY29taW5nIGNvbm5lY3Rpb25zIHRvIGFcXG4gIDE0OlxcdFxcdCAgc2luZ2xlIElQIGFkZHJlc3MgYW5kIHNjaGVkdWxpbmcgdGhlbSB0byByZWFsIHNlcnZlcnMuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgVGhyZWUgcmVxdWVzdCBkaXNwYXRjaGluZyB0ZWNobmlxdWVzIGFyZSBpbXBsZW1lbnRlZCwgdGhleSBhcmVcXG4gIDE3OlxcdFxcdCAgdmlydHVhbCBzZXJ2ZXIgdmlhIE5BVCwgdmlydHVhbCBzZXJ2ZXIgdmlhIHR1bm5lbGluZyBhbmQgdmlydHVhbFxcbiAgMTg6XFx0XFx0ICBzZXJ2ZXIgdmlhIGRpcmVjdCByb3V0aW5nLiBUaGUgc2V2ZXJhbCBzY2hlZHVsaW5nIGFsZ29yaXRobXMgY2FuXFxuICAxOTpcXHRcXHQgIGJlIHVzZWQgdG8gY2hvb3NlIHdoaWNoIHNlcnZlciB0aGUgY29ubmVjdGlvbiBpcyBkaXJlY3RlZCB0byxcXG4gIDIwOlxcdFxcdCAgdGh1cyBsb2FkIGJhbGFuY2luZyBjYW4gYmUgYWNoaWV2ZWQgYW1vbmcgdGhlIHNlcnZlcnMuICBGb3IgbW9yZVxcbiAgMjE6XFx0XFx0ICBpbmZvcm1hdGlvbiBhbmQgaXRzIGFkbWluaXN0cmF0aW9uIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB0aGVcXG4gIDIyOlxcdFxcdCAgZm9sbG93aW5nIFVSTDogXFx1MDAzY2h0dHA6Ly93d3cubGludXh2aXJ0dWFsc2VydmVyLm9yZy9cXHUwMDNlLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXFxuICAyNTpcXHRcXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0aWYgSVBfVlNcXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnXFx0SVBfVlNfSVBWNlxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwiSVB2NiBzdXBwb3J0IGZvciBJUFZTXFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG4gIDMyOlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNlxcbiAgMzM6XFx0XFx0aGVscFxcbiAgMzQ6XFx0XFx0ICBBZGQgSVB2NiBzdXBwb3J0IHRvIElQVlMuXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaWYgdW5zdXJlLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWdcXHRJUF9WU19ERUJVR1xcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nXFxcIlxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGdldCBhZGRpdGlvbmFsIG1lc3NhZ2VzIHVzZWZ1bCBpblxcbiAgNDI6XFx0XFx0ICBkZWJ1Z2dpbmcgdGhlIElQIHZpcnR1YWwgc2VydmVyIGNvZGUuIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWJ1Z1xcbiAgNDM6XFx0XFx0ICBsZXZlbCBpbiAvcHJvYy9zeXMvbmV0L2lwdjQvdnMvZGVidWdfbGV2ZWxcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0Y29uZmlnXFx0SVBfVlNfVEFCX0JJVFNcXG4gIDQ2OlxcdFxcdGludCBcXFwiSVBWUyBjb25uZWN0aW9uIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuICA0NzpcXHRcXHRyYW5nZSA4IDIwIGlmICE2NEJJVFxcbiAgNDg6XFx0XFx0cmFuZ2UgOCAyNyBpZiA2NEJJVFxcbiAgNDk6XFx0XFx0ZGVmYXVsdCAxMlxcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBUaGUgSVBWUyBjb25uZWN0aW9uIGhhc2ggdGFibGUgdXNlcyB0aGUgY2hhaW5pbmcgc2NoZW1lIHRvIGhhbmRsZVxcbiAgNTI6XFx0XFx0ICBoYXNoIGNvbGxpc2lvbnMuIFVzaW5nIGEgYmlnIElQVlMgY29ubmVjdGlvbiBoYXNoIHRhYmxlIHdpbGwgZ3JlYXRseVxcbiAgNTM6XFx0XFx0ICByZWR1Y2UgY29uZmxpY3RzIHdoZW4gdGhlcmUgYXJlIGh1bmRyZWRzIG9mIHRob3VzYW5kcyBvZiBjb25uZWN0aW9uc1xcbiAgNTQ6XFx0XFx0ICBpbiB0aGUgaGFzaCB0YWJsZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBOb3RlIHRoZSB0YWJsZSBzaXplIG11c3QgYmUgcG93ZXIgb2YgMi4gVGhlIHRhYmxlIHNpemUgd2lsbCBiZSB0aGVcXG4gIDU3OlxcdFxcdCAgdmFsdWUgb2YgMiB0byB0aGUgeW91ciBpbnB1dCBudW1iZXIgcG93ZXIuIFRoZSBudW1iZXIgdG8gY2hvb3NlIGlzXFxuICA1ODpcXHRcXHQgIGZyb20gOCB0byAyNyBmb3IgNjRCSVQoMjAgb3RoZXJ3aXNlKSwgdGhlIGRlZmF1bHQgbnVtYmVyIGlzIDEyLFxcbiAgNTk6XFx0XFx0ICB3aGljaCBtZWFucyB0aGUgdGFibGUgc2l6ZSBpcyA0MDk2LiBEb24ndCBpbnB1dCB0aGUgbnVtYmVyIHRvb1xcbiAgNjA6XFx0XFx0ICBzbWFsbCwgb3RoZXJ3aXNlIHlvdSB3aWxsIGxvc2UgcGVyZm9ybWFuY2Ugb24gaXQuIFlvdSBjYW4gYWRhcHQgdGhlXFxuICA2MTpcXHRcXHQgIHRhYmxlIHNpemUgeW91cnNlbGYsIGFjY29yZGluZyB0byB5b3VyIHZpcnR1YWwgc2VydmVyIGFwcGxpY2F0aW9uLlxcbiAgNjI6XFx0XFx0ICBJdCBpcyBnb29kIHRvIHNldCB0aGUgdGFibGUgc2l6ZSBub3QgZmFyIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mXFxuICA2MzpcXHRcXHQgIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQgbXVsdGlwbHlpbmcgYXZlcmFnZSBsYXN0aW5nIHRpbWUgb2ZcXG4gIDY0OlxcdFxcdCAgY29ubmVjdGlvbiBpbiB0aGUgdGFibGUuICBGb3IgZXhhbXBsZSwgeW91ciB2aXJ0dWFsIHNlcnZlciBnZXRzIDIwMFxcbiAgNjU6XFx0XFx0ICBjb25uZWN0aW9ucyBwZXIgc2Vjb25kLCB0aGUgY29ubmVjdGlvbiBsYXN0cyBmb3IgMjAwIHNlY29uZHMgaW5cXG4gIDY2OlxcdFxcdCAgYXZlcmFnZSBpbiB0aGUgY29ubmVjdGlvbiB0YWJsZSwgdGhlIHRhYmxlIHNpemUgc2hvdWxkIGJlIG5vdCBmYXJcXG4gIDY3OlxcdFxcdCAgbGVzcyB0aGFuIDIwMHgyMDAsIGl0IGlzIGdvb2QgdG8gc2V0IHRoZSB0YWJsZSBzaXplIDMyNzY4ICgyKioxNSkuXFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdCAgQW5vdGhlciBub3RlIHRoYXQgZWFjaCBjb25uZWN0aW9uIG9jY3VwaWVzIDEyOCBieXRlcyBlZmZlY3RpdmVseSBhbmRcXG4gIDcwOlxcdFxcdCAgZWFjaCBoYXNoIGVudHJ5IHVzZXMgOCBieXRlcywgc28geW91IGNhbiBlc3RpbWF0ZSBob3cgbXVjaCBtZW1vcnkgaXNcXG4gIDcxOlxcdFxcdCAgbmVlZGVkIGZvciB5b3VyIGJveC5cXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0ICBZb3UgY2FuIG92ZXJ3cml0ZSB0aGlzIG51bWJlciBzZXR0aW5nIGNvbm5fdGFiX2JpdHMgbW9kdWxlIHBhcmFtZXRlclxcbiAgNzQ6XFx0XFx0ICBvciBieSBhcHBlbmRpbmcgaXBfdnMuY29ubl90YWJfYml0cz0/IHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIGlmXFxuICA3NTpcXHRcXHQgIElQIFZTIHdhcyBjb21waWxlZCBidWlsdC1pbi5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0Y29tbWVudCBcXFwiSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29uZmlnXFx0SVBfVlNfUFJPVE9fVENQXFxuICA4MDpcXHRcXHRib29sIFxcXCJUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4gIDgxOlxcdFxcdGhlbHBcXG4gIDgyOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBUQ1AgdHJhbnNwb3J0XFxuICA4MzpcXHRcXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXFxuICA4NDpcXHRcXG4gIDg1OlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX1VEUFxcbiAgODY6XFx0XFx0Ym9vbCBcXFwiVURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuICA4NzpcXHRcXHRoZWxwXFxuICA4ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgVURQIHRyYW5zcG9ydFxcbiAgODk6XFx0XFx0ICBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxcbiAgOTA6XFx0XFxuICA5MTpcXHRjb25maWdcXHRJUF9WU19QUk9UT19BSF9FU1BcXG4gIDkyOlxcdFxcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxcbiAgOTM6XFx0XFxuICA5NDpcXHRjb25maWdcXHRJUF9WU19QUk9UT19FU1BcXG4gIDk1OlxcdFxcdGJvb2wgXFxcIkVTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbiAgOTY6XFx0XFx0aGVscFxcbiAgOTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIEVTUCAoRW5jYXBzdWxhdGlvblxcbiAgOTg6XFx0XFx0ICBTZWN1cml0eSBQYXlsb2FkKSB0cmFuc3BvcnQgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cXG4gIDk5OlxcdFxcbiAxMDA6XFx0Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6MzQuOTIwMTIzNTE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDg2NDU5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSVBWUyBDb25uZWN0aW9uIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIGRvd24gd2hhdCB0aGlzIHBhdGNoIGlzIHJlYWxseSBkb2luZy4gVGhlIGNvcmUgbW9kdWxlIGlzIHVuZG91YnRlZGx5IGBJUF9WU2AsIGFuZCB3aGlsZSB3ZSBjb3VsZCBiZSBleGhhdXN0aXZlIGFuZCBpbmNsdWRlIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBmb3IgY29tcGxldGVuZXNzLCBgSVBfVlNgIGlzIHRoZSBjcml0aWNhbCBwaWVjZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBoZXJlLlxuXG5JJ3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgaXQgdG91Y2hlcyBgaXBfdnNfY29ubi5jYC4gTGV0J3MgY2xhcmlmeSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJIHJlY2FsbCB0aGVtIGJ1dCBJIHdpbGwgbWFrZSBzdXJlIEkgaGF2ZSB0aGVtIGV4YWN0bHkgcmlnaHQuIEl0J3M6IGBjb25uX3RhYl9sb2NrYCwgYGlwX3ZzX2Nvbm5faGFzaGAsIGBpcF92c19jb25uX3VubGlua2AsIGBpcF92c19jb25uX2ZpbGxfY3BvcnRgLCBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLCBhbmQgYGlwX3ZzX2JpbmRfZGVzdGAuXG5cbkkndmUgZ290IHRoZSBsaXN0LiBUaW1lIHRvIHJlZmluZSB0aGlzIGxpc3QuIGBjb25uX3RhYl9sb2NrYCBpcyBtYXJrZWQgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLCBzbyBJIGNhbiBhbG1vc3QgaWdub3JlIGl0LCBhcyBpdCBpcyBpbmxpbmVkLlxuXG5TbyB0aGUgbWFpbiBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBpcF92c19jb25uX2hhc2hgLCBgaXBfdnNfY29ubl91bmxpbmtgLCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYW5kIGBpcF92c19iaW5kX2Rlc3RgLiBJIHNob3VsZCBnaXZlIGFkZGl0aW9uYWwgY29uc2lkZXJhdGlvbiB0byBgaXBfdnNfY29ubl9oYXNoYCBhbmQgYGlwX3ZzX2Nvbm5fdW5saW5rYCwgZ2l2ZW4gdGhleSBsaWtlbHkgc2l0IG9uIHRoZSBob3QgcGF0aC4gVGhlc2UgYXJlIGNhbGxlZCBmb3IgZXZlcnkgY29ubmVjdGlvbiwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLiBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgIGlzIGNhbGxlZCB3aGVuIGEgZm9yd2FyZGluZyBtZXRob2QgY2hhbmdlczsgYGlwX3ZzX2JpbmRfZGVzdGAgaXMgY2FsbGVkIHdoZW4gYmluZGluZyBhIGRlc3RpbmF0aW9uLCBhbmQgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAgaXMgZm9yIHRoZSBjbGllbnQgcG9ydCwgc28gdGhleSBhcmUgbm90IHF1aXRlIGFzIGhvdCwgYnV0IG1vcmUgc3BlY2lmaWMuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9ucywgSSdtIGdvaW5nIHRvIGluY2x1ZGUgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCBhbmQgYGlwX3ZzX2JpbmRfZGVzdGAgYXMgdGhleSBhcmUgbW9yZSBzcGVjaWFsaXplZCBhbmQgbGlrZWx5IGltcGFjdCBzcGVjaWZpYyBjb25uZWN0aW9uIGJlaGF2aW9ycy4gYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAgaXMgYWxzbyBnb29kLlxuXG5JIHdpbGwgYWxzbyBxdWlja2x5IGNoZWNrIHdoZXRoZXIgYW55IGFyZSBgc3RhdGljYC4gYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCBpcyBzdGF0aWM7IHRoZSByZXN0IGFyZSBub3QuIFRoYXQncyBnb29kIHRvIGtub3cuIE5vdyBJJ20gcmVhZHkgdG8gcHJlc2VudCBteSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNTgsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6NDQuMTI4NzcxMDUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDAwNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jb25uX2NoYW5nZV9md2RfbWFza1wiLFxuICAgIFwiaXBfdnNfYmluZF9kZXN0XCIsXG4gICAgXCJpcF92c19jb25uX2ZpbGxfY3BvcnRcIixcbiAgICBcImlwX3ZzX2Nvbm5faGFzaFwiLFxuICAgIFwiaXBfdnNfY29ubl91bmxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVBWUyBjb25uZWN0aW9uIGhhc2hpbmcgYW5kIGxvY2tpbmcgbG9naWMsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBjaGFuZ2VzIHRvIGhvdyBkb3VibGUgaGFzaGluZyBhbmQgZm9yd2FyZGluZyBtZXRob2RzIGFyZSBoYW5kbGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19QUk9UT19UQ1BcIixcbiAgICBcIklQX1ZTX1BST1RPX1VEUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrXCIsXG4gICAgXCJpcF92c19iaW5kX2Rlc3RcIixcbiAgICBcImlwX3ZzX2Nvbm5fZmlsbF9jcG9ydFwiLFxuICAgIFwiaXBfdnNfY29ubl9oYXNoXCIsXG4gICAgXCJpcF92c19jb25uX3VubGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBJUFZTIGNvbm5lY3Rpb24gaGFzaGluZyBhbmQgbG9ja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGNoYW5nZXMgdG8gaG93IGRvdWJsZSBoYXNoaW5nIGFuZCBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIGhhbmRsZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdkpv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 02:41:40 +0000 UTC FinishedAt: 2026-07-02 02:58:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "0469d460a598d03fc85ebd97f99640e6c579e2a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "0469d460a598d03fc85ebd97f99640e6c579e2a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP" ], "series_id": "54085cdb-fd76-48f0-abeb-709525173bee" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_conn_change_fwd_mask", "ip_vs_bind_dest", "ip_vs_conn_fill_cport", "ip_vs_conn_hash", "ip_vs_conn_unlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19VRFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayYjMzQ7LAogICAgJiMzNDtpcF92c19iaW5kX2Rlc3QmIzM0OywKICAgICYjMzQ7aXBfdnNfY29ubl9maWxsX2Nwb3J0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5faGFzaCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX3VubGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVBWUyBjb25uZWN0aW9uIGhhc2hpbmcgYW5kIGxvY2tpbmcgbG9naWMsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBjaGFuZ2VzIHRvIGhvdyBkb3VibGUgaGFzaGluZyBhbmQgZm9yd2FyZGluZyBtZXRob2RzIGFyZSBoYW5kbGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjc3NTFkOTc0NTk5MjRhYmQxY2E0MzVjMmRhYTViMDZhZWQwMDBmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDI6NTg6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IGNiMzY2NDFmOGQxY2MxLi4yYTkwM2FmOTI3Zjc2YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC03MCwyNSAmIzQzOzcwLDQ1IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxuICAqIC0gaGFzaCB0YWJsZSByZXNpemUgd29ya3MgbGlrZSByZWhhc2ggYnV0IGFsd2F5cyByZWhhc2hlcyBpbnRvIG5ldyB0YWJsZVxuICAqIC0gYml0IGxvY2sgb24gYnVja2V0IHNlcmlhbGl6ZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIGNoYWluXG4mIzQzOyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlXG4mIzQzOyAqIG5ldyB0YWJsZVxuICAqIC0gY3AtXHUwMDNlbG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLVx1MDAzZWZsYWdzLCBjcC1cdTAwM2VkZXN0XG4gICovXG4gXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXG4mIzQzOy8qKlxuJiM0MzsgICogY29ubl90YWJfbG9jayAtIExvY2sgY29ubl90YWIgYnVja2V0cyBmb3IgY29ubiBoYXNoL3VuaGFzaCwgbm90IGZvciByZWhhc2hcbiYjNDM7ICAqIEB0Olx0XHRoYXNoIHRhYmxlIGZvciBobjAsIG5ld190Ymwgd2hlbiBuZXdfaGFzaD10cnVlXG4mIzQzOyAgKiBAdDI6XHRoYXNoIHRhYmxlIGZvciBobjEsIG5ld190Ymwgd2hlbiBuZXdfaGFzaDI9dHJ1ZVxuJiM0MzsgICogQGNwOlx0Y29ubmVjdGlvblxuJiM0MzsgICogQGhhc2hfa2V5Olx0aGFzaCBrZXkgZm9yIGhuMFxuJiM0MzsgICogQGhhc2hfa2V5MjpcdGhhc2gga2V5IGZvciBobjFcbiYjNDM7ICAqIEB1c2UyOlx0dXNpbmcgaG4xIChkb3VibGUgaGFzaGluZykgYmFzZWQgb24gdGhlIGZvcndhcmRpbmcgbWV0aG9kXG4mIzQzOyAgKiBAbmV3X2hhc2g6XHRtb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbiYjNDM7ICAqIEBuZXdfaGFzaDI6XHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbiYjNDM7ICAqIEBoZWFkX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMFxuJiM0MzsgICogQGhlYWQyX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMVxuJiM0MzsgICpcbiYjNDM7ICAqIFdlIHN1cHBvcnQgMyBtb2RlczpcbiYjNDM7ICAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmdcbiYjNDM7ICAqIC0gaGFzaCBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciBoYXNoaW5nXG4mIzQzOyAgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWRcbiYjNDM7ICAqL1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZFxuLWNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksXG4tXHQgICAgICB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXG4tXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcbiYjNDM7Y29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfcmh0ICp0Miwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuJiM0MztcdCAgICAgIHUzMiBoYXNoX2tleSwgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxuJiM0MztcdCAgICAgIGJvb2wgbmV3X2hhc2gyLCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LFxuJiM0MztcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxuIHtcbiBcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XG4gXHR1MzIgaGFzaF9rZXlfbmV3LCBoYXNoX2tleV9uZXcyO1xuLVx0c3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0O1xuLVx0dTMyIGlkeCwgaWR4MjtcbiYjNDM7XHRpbnQgaWR4ID0gMCwgaWR4MiA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIEFkdmFuY2UgaWR4MiB3aGVuIG5ld19oYXNoIGlzIG5vdCBzZXQgYnV0IGhhc2hfa2V5MlxuJiM0MztcdCAqIGlzIGZvciBuZXcgdGFibGVcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobmV3X2hhc2gyIFx1MDAyNlx1MDAyNiB1c2UyIFx1MDAyNlx1MDAyNiB0ICE9IHQyKVxuJiM0MztcdFx0aWR4MiYjNDM7JiM0Mzs7XG4gXG4tXHRpZHggPSBoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuLVx0aWYgKHVzZTIpXG4tXHRcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdGVsc2Vcbi1cdFx0aWR4MiA9IGlkeDtcbiBcdGlmICghbmV3X2hhc2gpIHtcbiBcdFx0LyogV2UgbmVlZCB0byBsb2NrIHRoZSBidWNrZXQgaW4gdGhlIHJpZ2h0IHRhYmxlICovXG4gXG5AQCAtMTAwLDQ2ICYjNDM7MTIwLDQ1IEBAIGNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksXG4gXHRcdFx0ICogYm90aCBub2RlcyBpbiBkaWZmZXJlbnQgdGFibGVzLCB1c2UgaWR4L2lkeDJcbiBcdFx0XHQgKiBmb3IgcHJvcGVyIGxvY2sgb3JkZXJpbmcgZm9yIGhlYWRzLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlkeCA9IGhhc2hfa2V5IFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRcdFx0aWR4IHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuLVx0XHR9XG4tXHRcdGlmICh1c2UyKSB7XG4tXHRcdFx0aWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xuLVx0XHRcdFx0LyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi9cbi1cdFx0XHRcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQyLVx1MDAzZW5ld190YmwpO1xuLVx0XHRcdFx0aWR4MiA9IGhhc2hfa2V5MiBcdTAwMjYgdDItXHUwMDNlbWFzaztcbi1cdFx0XHRcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGlkeDIgPSBpZHg7XG4mIzQzO1x0XHRcdGlkeCYjNDM7JiM0Mzs7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRpZiAodXNlMiBcdTAwMjZcdTAwMjYgIW5ld19oYXNoMiBcdTAwMjZcdTAwMjYgIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7XG4mIzQzO1x0XHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xuJiM0MztcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXHUwMDNlbmV3X3RibCk7XG4mIzQzO1x0XHRpZHgyJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4gXG4mIzQzO1x0aWYgKCF1c2UyKVxuJiM0MztcdFx0aWR4MiA9IGlkeDtcbiBcdGhlYWQgPSB0LVx1MDAzZWJ1Y2tldHMgJiM0MzsgKGhhc2hfa2V5IFx1MDAyNiB0LVx1MDAzZW1hc2spO1xuIFx0aGVhZDIgPSB1c2UyID8gdDItXHUwMDNlYnVja2V0cyAmIzQzOyAoaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrKSA6IGhlYWQ7XG4gXG4tXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHQvKiBEbyBub3QgdG91Y2ggc2VxY291bnQsIHRoaXMgaXMgYSBzYWZlIG9wZXJhdGlvbiAqL1xuLVxuLVx0aWYgKGlkeCBcdTAwM2M9IGlkeDIpIHtcbiYjNDM7XHRpZiAoaWR4IFx1MDAzZSBpZHgyIHx8IChoZWFkIFx1MDAzZSBoZWFkMiBcdTAwMjZcdTAwMjYgaWR4ID09IGlkeDIpKSB7XG4mIzQzO1x0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdFx0aGxpc3RfYmxfbG9jayhoZWFkKTtcbi1cdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4tXHRcdFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XG4gXHR9IGVsc2Uge1xuLVx0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdFx0aGxpc3RfYmxfbG9jayhoZWFkKTtcbiYjNDM7XHRcdGlmIChoZWFkICE9IGhlYWQyKVxuJiM0MztcdFx0XHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcbiBcdH1cbiBcdGlmICghbmV3X2hhc2gpIHtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlZDtcbiYjNDM7XG4gXHRcdC8qIEVuc3VyZSBoYXNoX2tleSBpcyByZWFkIHVuZGVyIGxvY2sgKi9cbiBcdFx0aGFzaF9rZXlfbmV3ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4tXHRcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiYjNDM7XHRcdGNoYW5nZWQgPSBoYXNoX2tleSAhPSBoYXNoX2tleV9uZXc7XG4mIzQzO1x0XHRpZiAodXNlMiBcdTAwMjZcdTAwMjYgIW5ld19oYXNoMikge1xuJiM0MztcdFx0XHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4mIzQzO1x0XHRcdGNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRoYXNoX2tleV9uZXcyID0gaGFzaF9rZXkyO1xuJiM0MztcdFx0fVxuIFx0XHQvKiBIYXNoIGNoYW5nZWQgPyAqL1xuLVx0XHRpZiAoaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3IHx8XG4tXHRcdCAgICAoaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzIgXHUwMDI2XHUwMDI2IHVzZTIpKSB7XG4mIzQzO1x0XHRpZiAoY2hhbmdlZCkge1xuIFx0XHRcdGlmIChoZWFkICE9IGhlYWQyKVxuIFx0XHRcdFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQyKTtcbiBcdFx0XHRobGlzdF9ibF91bmxvY2soaGVhZCk7XG4tXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXHRcdFx0aGFzaF9rZXkgPSBoYXNoX2tleV9uZXc7XG4gXHRcdFx0aGFzaF9rZXkyID0gaGFzaF9rZXlfbmV3MjtcbiBcdFx0XHRnb3RvIHJldHJ5O1xuQEAgLTE1NSw3ICYjNDM7MTc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbm5fdGFiX3VubG9jayhzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCxcbiBcdGlmIChoZWFkICE9IGhlYWQyKVxuIFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQpO1xuLVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbkBAIC0yNjgsOCAmIzQzOzI4Niw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHVzZTIgPSBmYWxzZTtcbiBcdH1cbiBcbi1cdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXG4tXHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiYjNDM7XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4mIzQzO1x0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLyxcbiYjNDM7XHRcdCAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRjcC1cdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xuIFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcbkBAIC0yODAsNiAmIzQzOzI5OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdGhsaXN0X2JsX2FkZF9oZWFkX3JjdShcdTAwMjZjcC1cdTAwM2VobjEubm9kZSwgaGVhZDIpO1xuIFxuIFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJldCA9IDE7XG4gXG4gXHQvKiBTY2hlZHVsZSByZXNpemluZyBpZiBsb2FkIGluY3JlYXNlcyAqL1xuQEAgLTMwNiwxOCAmIzQzOzMyNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFx0XHRyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZShcdTAwMjZjcC1cdTAwM2VyZWZjbnQpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcbiBcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cdTAwM2Vjb25uX3RhYik7XG4gXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuIFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4gXHR1c2UyID0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApO1xuIFxuLVx0Y29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sXG4tXHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiYjNDM7XHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbiYjNDM7XHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoMiAqLywgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuIFxuIFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKSB7XG4gXHRcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXG4tXHRcdGlmIChyZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCkpIHtcbiYjNDM7XHRcdGlmICh1c2UyID09IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCkpIHtcbiBcdFx0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMC5ub2RlKTtcbiBcdFx0XHRpZiAodXNlMilcbiBcdFx0XHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUpO1xuQEAgLTMyOCw2ICYjNDM7MzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcbiBcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4gXG4mIzQzO1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtNjMyLDYgJiM0Mzs2NTUsNyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbiBcdGludCBudGJsO1xuIFx0aW50IGRpcjtcbiBcbiYjNDM7cmVzdGFydDpcbiBcdC8qIE5vIHBhY2tldHMgZnJvbSBpbnNpZGUsIHNvIHdlIGNhbiBkbyBpdCBpbiAyIHN0ZXBzLiAqL1xuIFx0ZGlyID0gdXNlMiA/IDEgOiAwO1xuIFxuQEAgLTY4Niw2ICYjNDM7NzEwLDIzIEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxuIFx0LyogUHJvdGVjdCB0aGUgY3AtXHUwMDNlZmxhZ3MgbW9kaWZpY2F0aW9uICovXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4gXG4mIzQzO1x0LyogUmVjaGVjayB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9jayAqL1xuJiM0MztcdGlmICh1c2UyICE9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xuJiM0MztcdFx0dXNlMiA9ICF1c2UyO1xuJiM0MztcdFx0aWYgKHVzZTIpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdC8qIFJlc3RhcnQgd2l0aCBuZXcgdXNlMiB2YWx1ZSAqL1xuJiM0MztcdFx0XHRnb3RvIHJlc3RhcnQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoZGlyKSB7XG4mIzQzO1x0XHRcdC8qIE5vdCBzdGFydGVkIHlldCwgc28ganVzdCBza2lwIGRpciAxICovXG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRkaXItLTtcbiYjNDM7XHRcdFx0Z290byBuZXh0X2RpcjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qIEp1c3QgZmluaXNoIGRpciAwICovXG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIExvY2sgc2VxY291bnQgb25seSBmb3IgdGhlIG9sZCBidWNrZXQsIGV2ZW4gaWYgd2UgYXJlIG9uIG5ldyB0YWJsZVxuIFx0ICogYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBkZWwgb3BlcmF0aW9uLCBub3QgdGhlIGFkZGluZy5cbiBcdCAqL1xuQEAgLTc1Miw2ICYjNDM7NzkzLDYxIEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxuIFx0XHRnb3RvIG5leHRfZGlyO1xuIH1cbiBcbiYjNDM7LyogQ2hhbmdlIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiAqL1xuJiM0MztzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IGNwLVx1MDAzZWlwdnM7XG4mIzQzO1x0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcbiYjNDM7XHR1MzIgaGFzaDIsIGhhc2hfa2V5LCBoYXNoX2tleTI7XG4mIzQzO1x0c3RydWN0IGlwX3ZzX3JodCAqdCwgKnQyO1xuJiM0MztcbiYjNDM7XHQvKiBTZWUgaXBfdnNfY29ubl91c2VfaGFzaDIoKSBmb3IgcmVmZXJlbmNlICovXG4mIzQzO1x0aWYgKChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSB8fFxuJiM0MztcdCAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqL1xuJiM0MztcdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EpID09XG4mIzQzO1x0ICAgICgobmV3X2ZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfRldEX01BU0spID09IElQX1ZTX0NPTk5fRl9NQVNRKSkge1xuJiM0MztcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cdTAwM2Vjb25uX3RhYik7XG4mIzQzO1x0aWYgKGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xuJiM0MztcdFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XHRcdGhhc2hfa2V5MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuJiM0MztcbiYjNDM7XHRcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLyxcbiYjNDM7XHRcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIGZhbHNlIC8qIG5ld19oYXNoMiAqLyxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcbiYjNDM7XHRcdC8qIEtlZXAgYm90aCBoYXNoIGtleXMgaW4gc2FtZSB0YWJsZSAqL1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7XG4mIzQzO1x0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlKTtcbiYjNDM7XHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovXG4mIzQzO1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XG4mIzQzO1x0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0LVx1MDAzZW5ld190YmwpO1xuJiM0MztcdFx0aGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpO1xuJiM0MztcdFx0aGFzaF9rZXkyID0gaXBfdnNfcmh0X2J1aWxkX2hhc2hfa2V5KHQyLCBoYXNoMik7XG4mIzQzO1xuJiM0MztcdFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXG4mIzQzO1x0XHRjb25uX3RhYl9sb2NrKHQsIHQyLCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuJiM0MztcdFx0XHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSwgaGFzaF9rZXkyKTtcbiYjNDM7XHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuJiM0MztcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4mIzQzO1xuJiM0MztcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cdTAwM2VzaXplICovXG4gc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4ge1xuQEAgLTEwMTQsNiAmIzQzOzExMTAsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdGZsYWdzID0gY3AtXHUwMDNlZmxhZ3M7XG4gXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xuJiM0MztcdFx0LyogU3luY2VkIGNvbm5zIGFyZSBoYXNoZWQsIHNvIHRoZXkgY2FuIG5vdCBnZXQgdGhpcyBmbGFnICovXG4mIzQzO1x0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUO1xuJiM0MztcbiBcdFx0LyogaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHRlbXBsYXRlIGFuZCBpcyBjcmVhdGVkXG4gXHRcdCAqIGJ5IHN5bmMsIHByZXNlcnZlIHRoZSBhY3Rpdml0eSBmbGFnLlxuIFx0XHQgKi9cbkBAIC0xMDIxLDkgJiM0MzsxMTIwLDE4IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0XHRcdGNvbm5fZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFO1xuIFx0XHQvKiBjb25uZWN0aW9ucyBpbmhlcml0IGZvcndhcmRpbmcgbWV0aG9kIGZyb20gZGVzdCAqL1xuIFx0XHRmbGFncyBcdTAwMjY9IH4oSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgSVBfVlNfQ09OTl9GX05PT1VUUFVUKTtcbiYjNDM7XHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4mIzQzO1x0XHQvKiBDaGFuZ2luZyBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gY2FuXG4mIzQzO1x0XHQgKiBoYXBwZW4gb25seSB1bmRlciBsb2Nrc1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpXG4mIzQzO1x0XHRcdGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKGNwLCBmbGFncyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4mIzQzO1x0XHRjcC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0fVxuLVx0ZmxhZ3MgfD0gY29ubl9mbGFncztcbi1cdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHRjcC1cdTAwM2VkZXN0ID0gZGVzdDtcbiBcbiBcdElQX1ZTX0RCR19CVUYoNywgXCYjMzQ7QmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2smIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2hhc2gmIzM0OywKICAgICYjMzQ7aXBfdnNfY29ubl91bmxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIElQVlMgY29ubmVjdGlvbiBoYXNoaW5nIGFuZCBsb2NraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgZG91YmxlIGhhc2hpbmcgYW5kIGZvcndhcmRpbmcgbWV0aG9kcyBhcmUgaGFuZGxlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjc3NTFkOTc0NTk5MjRhYmQxY2E0MzVjMmRhYTViMDZhZWQwMDBmYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMDI6NTg6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCBjYjM2NjQxZjhkMWNjMS4uMmE5MDNhZjkyN2Y3NmIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwpAQCAtNzAsMjUgJiM0Mzs3MCw0NSBAQCBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlwX3ZzX2Nvbm5fY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZQogICogLSBoYXNoIHRhYmxlIHJlc2l6ZSB3b3JrcyBsaWtlIHJlaGFzaCBidXQgYWx3YXlzIHJlaGFzaGVzIGludG8gbmV3IHRhYmxlCiAgKiAtIGJpdCBsb2NrIG9uIGJ1Y2tldCBzZXJpYWxpemVzIGFsbCBvcGVyYXRpb25zIHRoYXQgbW9kaWZ5IHRoZSBjaGFpbgomIzQzOyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlCiYjNDM7ICogbmV3IHRhYmxlCiAgKiAtIGNwLSZndDtsb2NrIHByb3RlY3RzIGNvbm4gZmllbGRzIGxpa2UgY3AtJmd0O2ZsYWdzLCBjcC0mZ3Q7ZGVzdAogICovCiAKLS8qIExvY2sgY29ubl90YWIgYnVja2V0IGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaCAqLwomIzQzOy8qKgomIzQzOyAgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaAomIzQzOyAgKiBAdDoJCWhhc2ggdGFibGUgZm9yIGhuMCwgbmV3X3RibCB3aGVuIG5ld19oYXNoPXRydWUKJiM0MzsgICogQHQyOgloYXNoIHRhYmxlIGZvciBobjEsIG5ld190Ymwgd2hlbiBuZXdfaGFzaDI9dHJ1ZQomIzQzOyAgKiBAY3A6CWNvbm5lY3Rpb24KJiM0MzsgICogQGhhc2hfa2V5OgloYXNoIGtleSBmb3IgaG4wCiYjNDM7ICAqIEBoYXNoX2tleTI6CWhhc2gga2V5IGZvciBobjEKJiM0MzsgICogQHVzZTI6CXVzaW5nIGhuMSAoZG91YmxlIGhhc2hpbmcpIGJhc2VkIG9uIHRoZSBmb3J3YXJkaW5nIG1ldGhvZAomIzQzOyAgKiBAbmV3X2hhc2g6CW1vZGUgZm9yIGhuMCwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKQomIzQzOyAgKiBAbmV3X2hhc2gyOgltb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSkKJiM0MzsgICogQGhlYWRfcmV0OglyZXR1cm5lZCBoZWFkIGZvciBobjAKJiM0MzsgICogQGhlYWQyX3JldDoJcmV0dXJuZWQgaGVhZCBmb3IgaG4xCiYjNDM7ICAqCiYjNDM7ICAqIFdlIHN1cHBvcnQgMyBtb2RlczoKJiM0MzsgICogLSBzZWVrIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIHVuaGFzaGluZwomIzQzOyAgKiAtIGhhc2ggbW9kZSBmb3IgYm90aCBub2RlcywgdXNlZCBmb3IgaGFzaGluZwomIzQzOyAgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWQKJiM0MzsgICovCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKLWNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksCi0JICAgICAgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLAotCSAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KQomIzQzO2Nvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX3JodCAqdDIsIHN0cnVjdCBpcF92c19jb25uICpjcCwKJiM0MzsJICAgICAgdTMyIGhhc2hfa2V5LCB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsCiYjNDM7CSAgICAgIGJvb2wgbmV3X2hhc2gyLCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LAomIzQzOwkgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldCkKIHsKIAlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyOwogCXUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7Ci0Jc3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0OwotCXUzMiBpZHgsIGlkeDI7CiYjNDM7CWludCBpZHggPSAwLCBpZHgyID0gMDsKJiM0MzsKJiM0MzsJLyogQWR2YW5jZSBpZHgyIHdoZW4gbmV3X2hhc2ggaXMgbm90IHNldCBidXQgaGFzaF9rZXkyCiYjNDM7CSAqIGlzIGZvciBuZXcgdGFibGUKJiM0MzsJICovCiYjNDM7CWlmIChuZXdfaGFzaDIgJmFtcDsmYW1wOyB1c2UyICZhbXA7JmFtcDsgdCAhPSB0MikKJiM0MzsJCWlkeDImIzQzOyYjNDM7OwogCi0JaWR4ID0gaGFzaF9rZXkgJmFtcDsgdC0mZ3Q7bWFzazsKLQlpZiAodXNlMikKLQkJaWR4MiA9IGhhc2hfa2V5MiAmYW1wOyB0LSZndDttYXNrOwotCWVsc2UKLQkJaWR4MiA9IGlkeDsKIAlpZiAoIW5ld19oYXNoKSB7CiAJCS8qIFdlIG5lZWQgdG8gbG9jayB0aGUgYnVja2V0IGluIHRoZSByaWdodCB0YWJsZSAqLwogCkBAIC0xMDAsNDYgJiM0MzsxMjAsNDUgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSwKIAkJCSAqIGJvdGggbm9kZXMgaW4gZGlmZmVyZW50IHRhYmxlcywgdXNlIGlkeC9pZHgyCiAJCQkgKiBmb3IgcHJvcGVyIGxvY2sgb3JkZXJpbmcgZm9yIGhlYWRzLgogCQkJICovCi0JCQlpZHggPSBoYXNoX2tleSAmYW1wOyB0LSZndDttYXNrOwotCQkJaWR4IHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLOwotCQl9Ci0JCWlmICh1c2UyKSB7Ci0JCQlpZiAoIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7Ci0JCQkJLyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi8KLQkJCQl0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi0mZ3Q7bmV3X3RibCk7Ci0JCQkJaWR4MiA9IGhhc2hfa2V5MiAmYW1wOyB0Mi0mZ3Q7bWFzazsKLQkJCQlpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWR4MiA9IGlkeDsKJiM0MzsJCQlpZHgmIzQzOyYjNDM7OwogCQl9CiAJfQomIzQzOwlpZiAodXNlMiAmYW1wOyZhbXA7ICFuZXdfaGFzaDIgJmFtcDsmYW1wOyAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHsKJiM0MzsJCS8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovCiYjNDM7CQl0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi0mZ3Q7bmV3X3RibCk7CiYjNDM7CQlpZHgyJiM0MzsmIzQzOzsKJiM0MzsJfQogCiYjNDM7CWlmICghdXNlMikKJiM0MzsJCWlkeDIgPSBpZHg7CiAJaGVhZCA9IHQtJmd0O2J1Y2tldHMgJiM0MzsgKGhhc2hfa2V5ICZhbXA7IHQtJmd0O21hc2spOwogCWhlYWQyID0gdXNlMiA/IHQyLSZndDtidWNrZXRzICYjNDM7IChoYXNoX2tleTIgJmFtcDsgdDItJmd0O21hc2spIDogaGVhZDsKIAotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQkvKiBEbyBub3QgdG91Y2ggc2VxY291bnQsIHRoaXMgaXMgYSBzYWZlIG9wZXJhdGlvbiAqLwotCi0JaWYgKGlkeCAmbHQ7PSBpZHgyKSB7CiYjNDM7CWlmIChpZHggJmd0OyBpZHgyIHx8IChoZWFkICZndDsgaGVhZDIgJmFtcDsmYW1wOyBpZHggPT0gaWR4MikpIHsKJiM0MzsJCWhsaXN0X2JsX2xvY2soaGVhZDIpOwogCQlobGlzdF9ibF9sb2NrKGhlYWQpOwotCQlpZiAoaGVhZCAhPSBoZWFkMikKLQkJCWhsaXN0X2JsX2xvY2soaGVhZDIpOwogCX0gZWxzZSB7Ci0JCWhsaXN0X2JsX2xvY2soaGVhZDIpOwogCQlobGlzdF9ibF9sb2NrKGhlYWQpOwomIzQzOwkJaWYgKGhlYWQgIT0gaGVhZDIpCiYjNDM7CQkJaGxpc3RfYmxfbG9jayhoZWFkMik7CiAJfQogCWlmICghbmV3X2hhc2gpIHsKJiM0MzsJCWJvb2wgY2hhbmdlZDsKJiM0MzsKIAkJLyogRW5zdXJlIGhhc2hfa2V5IGlzIHJlYWQgdW5kZXIgbG9jayAqLwogCQloYXNoX2tleV9uZXcgPSBSRUFEX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSk7Ci0JCWhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSk7CiYjNDM7CQljaGFuZ2VkID0gaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3OwomIzQzOwkJaWYgKHVzZTIgJmFtcDsmYW1wOyAhbmV3X2hhc2gyKSB7CiYjNDM7CQkJaGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5KTsKJiM0MzsJCQljaGFuZ2VkIHw9IGhhc2hfa2V5MiAhPSBoYXNoX2tleV9uZXcyOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQloYXNoX2tleV9uZXcyID0gaGFzaF9rZXkyOwomIzQzOwkJfQogCQkvKiBIYXNoIGNoYW5nZWQgPyAqLwotCQlpZiAoaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3IHx8Ci0JCSAgICAoaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzIgJmFtcDsmYW1wOyB1c2UyKSkgewomIzQzOwkJaWYgKGNoYW5nZWQpIHsKIAkJCWlmIChoZWFkICE9IGhlYWQyKQogCQkJCWhsaXN0X2JsX3VubG9jayhoZWFkMik7CiAJCQlobGlzdF9ibF91bmxvY2soaGVhZCk7Ci0JCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJCWhhc2hfa2V5ID0gaGFzaF9rZXlfbmV3OwogCQkJaGFzaF9rZXkyID0gaGFzaF9rZXlfbmV3MjsKIAkJCWdvdG8gcmV0cnk7CkBAIC0xNTUsNyAmIzQzOzE3NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25uX3RhYl91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsCiAJaWYgKGhlYWQgIT0gaGVhZDIpCiAJCWhsaXN0X2JsX3VubG9jayhoZWFkMik7CiAJaGxpc3RfYmxfdW5sb2NrKGhlYWQpOwotCWxvY2FsX2JoX2VuYWJsZSgpOwogfQogCiBzdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7CkBAIC0yNjgsOCAmIzQzOzI4Niw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiAJCXVzZTIgPSBmYWxzZTsKIAl9CiAKLQljb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLAotCQkgICAgICAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CWNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sCiYjNDM7CQkgICAgICB0cnVlIC8qIG5ld19oYXNoMiAqLywgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKIAogCWNwLSZndDtmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEOwogCVdSSVRFX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSwgaGFzaF9rZXkpOwpAQCAtMjgwLDYgJiM0MzsyOTksNyBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogCQlobGlzdF9ibF9hZGRfaGVhZF9yY3UoJmFtcDtjcC0mZ3Q7aG4xLm5vZGUsIGhlYWQyKTsKIAogCWNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwogCXJldCA9IDE7CiAKIAkvKiBTY2hlZHVsZSByZXNpemluZyBpZiBsb2FkIGluY3JlYXNlcyAqLwpAQCAtMzA2LDE4ICYjNDM7MzI2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiAJCXJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKCZhbXA7Y3AtJmd0O3JlZmNudCk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKIAogCXQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy0mZ3Q7Y29ubl90YWIpOwogCWhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXkpOwogCWhhc2hfa2V5MiA9IFJFQURfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5KTsKIAl1c2UyID0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApOwogCi0JY29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sCi0JCSAgICAgICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiYjNDM7CWNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLAomIzQzOwkJICAgICAgZmFsc2UgLyogbmV3X2hhc2gyICovLCAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwogCiAJaWYgKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfSEFTSEVEKSB7CiAJCS8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovCi0JCWlmIChyZWZjb3VudF9kZWNfaWZfb25lKCZhbXA7Y3AtJmd0O3JlZmNudCkpIHsKJiM0MzsJCWlmICh1c2UyID09IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcmVmY291bnRfZGVjX2lmX29uZSgmYW1wO2NwLSZndDtyZWZjbnQpKSB7CiAJCQlobGlzdF9ibF9kZWxfcmN1KCZhbXA7Y3AtJmd0O2huMC5ub2RlKTsKIAkJCWlmICh1c2UyKQogCQkJCWhsaXN0X2JsX2RlbF9yY3UoJmFtcDtjcC0mZ3Q7aG4xLm5vZGUpOwpAQCAtMzI4LDYgJiM0MzszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogCiAJY29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTsKIAomIzQzOwlsb2NhbF9iaF9lbmFibGUoKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CkBAIC02MzIsNiAmIzQzOzY1NSw3IEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KQogCWludCBudGJsOwogCWludCBkaXI7CiAKJiM0MztyZXN0YXJ0OgogCS8qIE5vIHBhY2tldHMgZnJvbSBpbnNpZGUsIHNvIHdlIGNhbiBkbyBpdCBpbiAyIHN0ZXBzLiAqLwogCWRpciA9IHVzZTIgPyAxIDogMDsKIApAQCAtNjg2LDYgJiM0Mzs3MTAsMjMgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpCiAJLyogUHJvdGVjdCB0aGUgY3AtJmd0O2ZsYWdzIG1vZGlmaWNhdGlvbiAqLwogCXNwaW5fbG9ja19iaCgmYW1wO2NwLSZndDtsb2NrKTsKIAomIzQzOwkvKiBSZWNoZWNrIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrICovCiYjNDM7CWlmICh1c2UyICE9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkgewomIzQzOwkJdXNlMiA9ICF1c2UyOwomIzQzOwkJaWYgKHVzZTIpIHsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2NwLSZndDtsb2NrKTsKJiM0MzsJCQkvKiBSZXN0YXJ0IHdpdGggbmV3IHVzZTIgdmFsdWUgKi8KJiM0MzsJCQlnb3RvIHJlc3RhcnQ7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZGlyKSB7CiYjNDM7CQkJLyogTm90IHN0YXJ0ZWQgeWV0LCBzbyBqdXN0IHNraXAgZGlyIDEgKi8KJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2NwLSZndDtsb2NrKTsKJiM0MzsJCQlkaXItLTsKJiM0MzsJCQlnb3RvIG5leHRfZGlyOwomIzQzOwkJfQomIzQzOwkJLyogSnVzdCBmaW5pc2ggZGlyIDAgKi8KJiM0MzsJfQomIzQzOwogCS8qIExvY2sgc2VxY291bnQgb25seSBmb3IgdGhlIG9sZCBidWNrZXQsIGV2ZW4gaWYgd2UgYXJlIG9uIG5ldyB0YWJsZQogCSAqIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgZGVsIG9wZXJhdGlvbiwgbm90IHRoZSBhZGRpbmcuCiAJICovCkBAIC03NTIsNiAmIzQzOzc5Myw2MSBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydCkKIAkJZ290byBuZXh0X2RpcjsKIH0KIAomIzQzOy8qIENoYW5nZSBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gKi8KJiM0MztzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IGNwLSZndDtpcHZzOwomIzQzOwlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyOwomIzQzOwl1MzIgaGFzaDIsIGhhc2hfa2V5LCBoYXNoX2tleTI7CiYjNDM7CXN0cnVjdCBpcF92c19yaHQgKnQsICp0MjsKJiM0MzsKJiM0MzsJLyogU2VlIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKCkgZm9yIHJlZmVyZW5jZSAqLwomIzQzOwlpZiAoKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8CiYjNDM7CSAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqLwomIzQzOwkgICAgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRKSA9PQomIzQzOwkgICAgKChuZXdfZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkpIHsKJiM0MzsJCWNwLSZndDtmbGFncyA9IG5ld19mbGFnczsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwl0ID0gcmN1X2RlcmVmZXJlbmNlKGlwdnMtJmd0O2Nvbm5fdGFiKTsKJiM0MzsJaWYgKGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkgewomIzQzOwkJLyogU3RvcCBkb3VibGUgaGFzaGluZyAqLwomIzQzOwkJaGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSk7CiYjNDM7CQloYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSk7CiYjNDM7CiYjNDM7CQljb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sCiYjNDM7CQkJICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIGZhbHNlIC8qIG5ld19oYXNoMiAqLywKJiM0MzsJCQkgICAgICAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwomIzQzOwomIzQzOwkJLyogS2VlcCBib3RoIGhhc2gga2V5cyBpbiBzYW1lIHRhYmxlICovCiYjNDM7CQloYXNoX2tleSA9IFJFQURfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5KTsKJiM0MzsJCVdSSVRFX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSwgaGFzaF9rZXkpOwomIzQzOwkJaGxpc3RfYmxfZGVsX3JjdSgmYW1wO2NwLSZndDtobjEubm9kZSk7CiYjNDM7CQljcC0mZ3Q7ZmxhZ3MgPSBuZXdfZmxhZ3M7CiYjNDM7CiYjNDM7CQljb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogU3RhcnQgZG91YmxlIGhhc2hpbmcgKi8KJiM0MzsKJiM0MzsJCWhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXkpOwomIzQzOwomIzQzOwkJdDIgPSByY3VfZGVyZWZlcmVuY2UodC0mZ3Q7bmV3X3RibCk7CiYjNDM7CQloYXNoMiA9IGlwX3ZzX2Nvbm5faGFzaGtleV9jb25uKHQyLCBjcCwgdHJ1ZSk7CiYjNDM7CQloYXNoX2tleTIgPSBpcF92c19yaHRfYnVpbGRfaGFzaF9rZXkodDIsIGhhc2gyKTsKJiM0MzsKJiM0MzsJCS8qIENoYW5nZSB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9ja2VkIGhuMCAqLwomIzQzOwkJY29ubl90YWJfbG9jayh0LCB0MiwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLywKJiM0MzsJCQkgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sCiYjNDM7CQkJICAgICAgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UoY3AtJmd0O2huMS5oYXNoX2tleSwgaGFzaF9rZXkyKTsKJiM0MzsJCWNwLSZndDtmbGFncyA9IG5ld19mbGFnczsKJiM0MzsJCWhsaXN0X2JsX2FkZF9oZWFkX3JjdSgmYW1wO2NwLSZndDtobjEubm9kZSwgaGVhZDIpOwomIzQzOwomIzQzOwkJY29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qIEdldCBkZWZhdWx0IGxvYWQgZmFjdG9yIHRvIG1hcCBjb25uX2NvdW50L3VfdGhyZXNoIHRvIHQtJmd0O3NpemUgKi8KIHN0YXRpYyBpbnQgaXBfdnNfY29ubl9kZWZhdWx0X2xvYWRfZmFjdG9yKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKQogewpAQCAtMTAxNCw2ICYjNDM7MTExMCw5IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogCWZsYWdzID0gY3AtJmd0O2ZsYWdzOwogCS8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovCiAJaWYgKGZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TWU5DKSB7CiYjNDM7CQkvKiBTeW5jZWQgY29ubnMgYXJlIGhhc2hlZCwgc28gdGhleSBjYW4gbm90IGdldCB0aGlzIGZsYWcgKi8KJiM0MzsJCWNvbm5fZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDsKJiM0MzsKIAkJLyogaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHRlbXBsYXRlIGFuZCBpcyBjcmVhdGVkCiAJCSAqIGJ5IHN5bmMsIHByZXNlcnZlIHRoZSBhY3Rpdml0eSBmbGFnLgogCQkgKi8KQEAgLTEwMjEsOSAmIzQzOzExMjAsMTggQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCiAJCQljb25uX2ZsYWdzICZhbXA7PSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFOwogCQkvKiBjb25uZWN0aW9ucyBpbmhlcml0IGZvcndhcmRpbmcgbWV0aG9kIGZyb20gZGVzdCAqLwogCQlmbGFncyAmYW1wOz0gfihJUF9WU19DT05OX0ZfRldEX01BU0sgfCBJUF9WU19DT05OX0ZfTk9PVVRQVVQpOwomIzQzOwkJZmxhZ3MgfD0gY29ubl9mbGFnczsKJiM0MzsJCS8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW4KJiM0MzsJCSAqIGhhcHBlbiBvbmx5IHVuZGVyIGxvY2tzCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX0hBU0hFRCkKJiM0MzsJCQlpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpOwomIzQzOwkJZWxzZQomIzQzOwkJCWNwLSZndDtmbGFncyA9IGZsYWdzOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZmxhZ3MgfD0gY29ubl9mbGFnczsKJiM0MzsJCWNwLSZndDtmbGFncyA9IGZsYWdzOwogCX0KLQlmbGFncyB8PSBjb25uX2ZsYWdzOwotCWNwLSZndDtmbGFncyA9IGZsYWdzOwogCWNwLSZndDtkZXN0ID0gZGVzdDsKIAogCUlQX1ZTX0RCR19CVUYoNywgJiMzNDtCaW5kLWRlc3QgJXMgYzolczolZCB2OiVzOiVkICYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBJUFZTIENvbm5lY3Rpb24gSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNgLiBJdCYjMzk7cyBhbGwgYWJvdXQgaG93IElQVlMgY29ubmVjdGlvbnMgYXJlIGhhc2hlZCBhbmQgbG9ja2VkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBkb3VibGUgaGFzaGluZyBhbmQgaG93IGZvcndhcmRpbmcgaXMgaGFuZGxlZC4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AgYW5kIHRoZXkmIzM5O3ZlIGFsc28gZmlkZGxlZCB3aXRoIGBjb25uX3RhYl9sb2NrYC4gUmlnaHQgYXdheSwgSSBzZWUgdGhpcyBpcyBjb3JlIElQVlMgbG9naWMg4oCTIHRoZSBndXRzIG9mIGl0cyBjb25uZWN0aW9uIG1hbmFnZW1lbnQuCgpUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIHVwIGluIG15IGhlYWQgaXMgYWx3YXlzOiAmIzM0O0lzIHRoaXMgcmVhY2hhYmxlPyYjMzQ7IENvbnNpZGVyaW5nIElQVlMgaXMgYSBrZXJuZWwgbG9hZCBiYWxhbmNlciwgdXNlZCB0aHJvdWdoIG5ldGxpbmsgb3Igc29ja2V0IG9wdGlvbnMsIGFuZCBwcm9jZXNzZXMgYWN0dWFsIG5ldHdvcmsgcGFja2V0cywgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgJiMzNDt5ZXMmIzM0Oy4gVGhpcyB0aGluZyAqYWJzb2x1dGVseSogbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzY3JlYW1zIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGhpdCB0aGlzIGhhcmQuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBwaW5wb2ludCB0aGUgZXhhY3QgZnVuY3Rpb25zIHRoYXQgdGhpcyBwYXRjaCBoYXMgbW9kaWZpZWQuIFdlIG5lZWQgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gQWxyaWdodCwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBjb25uX3RhYl9sb2NrYCAod2hpY2gsIGZyb20gdGhlIGxvb2tzIG9mIGl0LCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24pLCBgaXBfdnNfY29ubl9oYXNoYCwgYGlwX3ZzX2Nvbm5fdW5saW5rYCwgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAsIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AsIGFuZCBgaXBfdnNfYmluZF9kZXN0YC4gSSYjMzk7dmUgZ290IGEgZ29vZCBsaXN0IHRvIHN0YXJ0IHdpdGguCgpTbyBteSBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHdpbGwgYmU6IGBpcF92c19jb25uX2hhc2hgLCBgaXBfdnNfY29ubl91bmxpbmtgLCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYW5kIGBpcF92c19iaW5kX2Rlc3RgLgoKQmVmb3JlIEkgZm9yZ2V0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGVuYWJsZWQuIE9idmlvdXNseSwgSVBWUyBuZWVkcyB0byBiZSB1cCBhbmQgcnVubmluZyBmb3IgYW55IG9mIHRoaXMgdG8gbWF0dGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIElQVlMsIHdoaWNoIHNob3VsZCBiZSBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBHZW5lcmFsbHksIEkgdGhpbmsgaXQmIzM5O3MgYENPTkZJR19JUF9WU2AgdGhhdCB3ZSBuZWVkLiBKdXN0IHRvIGJlIHN1cmUsIGxldCBtZSBydW4gYSBxdWljayBncmVwIHRvIHZlcmlmeSBhbmQgY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgSVBWUyBDb25maWd1cmF0aW9uIGZvciBTeW5jaHJvbml6YXRpb24gYW5kIE5BVCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggYElQX1ZTYCBoZXJlLiBUaGF0JiMzOTtzIHRoZSBjb3JlLiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoOyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgcGljdHVyZSBhbmQgdGhlIHBvdGVudGlhbCBpbnRlcmRlcGVuZGVuY2llcy4gTGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIHRoZSBsYW5kc2NhcGUuIEFoLCB0aGUgcGF0Y2ggbm90ZXMgbWVudGlvbiBgSVBfVlNfQ09OTl9GX01BU1FgLCBgSVBfVlNfQ09OTl9GX1NZTkNgLCBhbmQgYElQX1ZTX0NPTk5fRl9URU1QTEFURWAuIEludGVyZXN0aW5nLiBUaGV5JiMzOTtyZSBmbGFncywgbm90IGRpcmVjdCBjb25maWdzLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gVGhleSYjMzk7bGwgaW5mbHVlbmNlIGJlaGF2aW9yLCBjZXJ0YWlubHksIGJ1dCB0aGV5JiMzOTtyZSBub3QgdGhlIHByaW1hcnkga25vYnMgdG8gdHdpZGRsZS4gR2l2ZW4gdGhpcyBjb250ZXh0LCBJIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gSVBWUyBzeW5jaHJvbml6YXRpb24gb3IgTkFUIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IHNldHRpbmdzLiBJdCYjMzk7cyB0aW1lIHRvIHJlZmluZSB0aGUgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSVBWUyBDb25maWd1cmF0aW9uIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUFZTLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgdGhlIGBLY29uZmlnYCBmaWxlcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgSVBWUyBpcyBhIHBhcnQgb2YgbmV0ZmlsdGVyLiBUbyBxdWlja2x5IGZpbHRlciBkb3duIHRvIHdoYXQgSSBuZWVkLCBJJiMzOTtsbCB1c2UgYGdyZXBgLiBJJiMzOTtsbCBydW4gYGdyZXAgSVBfVlNgIG9uIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgcHVsbCBvdXQgYWxsIHRoZSBsaW5lcyB0aGF0IGRlZmluZSBvciByZWxhdGUgdG8gSVBWUyBjb25maWd1cmF0aW9ucy4gVGhpcyB3aWxsIGhvcGVmdWxseSBnaXZlIG1lIGEgY29uY2lzZSBsaXN0IHRvIHdvcmsgZnJvbSwgcmF0aGVyIHRoYW4gbmVlZGluZyB0byBtYW51YWxseSBzY2FuIHRoZSBlbnRpcmUgYEtjb25maWdgIGZpbGUuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIElQVlMgZmVhdHVyZXMgYW5kIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmNvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQVlMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBob2xkIG9uLiBMb29raW5nIGJhY2ssIGl0JiMzOTtzIGNsZWFyIHRoYXQgZm9jdXNpbmcgb24gYG1lbnVjb25maWcgSVBfVlNgIGlzIGFjdHVhbGx5IG1pc2xlYWRpbmcuIFRoZSByZWFsIGNvcmUgb2YgdGhlIG1hdHRlciBpcyB0aGUgYElQX1ZTYCBvcHRpb24gaXRzZWxmLiBUaGF0JiMzOTtzIHRoZSBvbmUgd2UgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGVuYWJsaW5nIGp1c3QgYElQX1ZTYCBnaXZlIHVzIHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZD8gT3IsIGRvIHdlIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGVuYWJsZSB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgbW9kdWxlcyB0b28sIGxpa2UgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgc28gZm9ydGg/IFRpbWUgdG8gY2hlY2sgdGhhdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmNvbmZpZyBJUF9WU19QUk9UTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZSwgdGhpbmtpbmcgbGlrZSBhIGtlcm5lbCBuZXR3b3JraW5nIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIHF1aWNrbHkgc2NhbiB0aGUgYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIElQVlMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGZvciBkZXBsb3ltZW50IG9yIHRyb3VibGVzaG9vdGluZy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB3aGljaCBvcHRpb25zIGFyZSBkaXJlY3RseSBleHBvc2VkIHRvIHRoZSB1c2VyIHZlcnN1cyB0aG9zZSBoYW5kbGVkIGludGVybmFsbHkuIEkmIzM5O20gZXhwZWN0aW5nIHRoZSB1c3VhbCBLY29uZmlnIGNvbnZlbnRpb25zLCBidXQgSSB3YW50IHRvIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgYXMgcGFydGljdWxhcmx5IGlubm92YXRpdmUgb3IgcHJvYmxlbWF0aWMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEJhc2ljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGluIGEgZmV3IHNlY29uZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSVAgVmlydHVhbCBTZXJ2ZXIgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51Y29uZmlnIElQX1ZTXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuICAgODpcdFx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBJUCBWaXJ0dWFsIFNlcnZlciBzdXBwb3J0IHdpbGwgbGV0IHlvdSBidWlsZCBhIGhpZ2gtcGVyZm9ybWFuY2VcbiAgMTE6XHRcdCAgdmlydHVhbCBzZXJ2ZXIgYmFzZWQgb24gY2x1c3RlciBvZiB0d28gb3IgbW9yZSByZWFsIHNlcnZlcnMuIFRoaXNcbiAgMTI6XHRcdCAgb3B0aW9uIG11c3QgYmUgZW5hYmxlZCBmb3IgYXQgbGVhc3Qgb25lIG9mIHRoZSBjbHVzdGVyZWQgY29tcHV0ZXJzXG4gIDEzOlx0XHQgIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgaW50ZXJjZXB0aW5nIGluY29taW5nIGNvbm5lY3Rpb25zIHRvIGFcbiAgMTQ6XHRcdCAgc2luZ2xlIElQIGFkZHJlc3MgYW5kIHNjaGVkdWxpbmcgdGhlbSB0byByZWFsIHNlcnZlcnMuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRocmVlIHJlcXVlc3QgZGlzcGF0Y2hpbmcgdGVjaG5pcXVlcyBhcmUgaW1wbGVtZW50ZWQsIHRoZXkgYXJlXG4gIDE3Olx0XHQgIHZpcnR1YWwgc2VydmVyIHZpYSBOQVQsIHZpcnR1YWwgc2VydmVyIHZpYSB0dW5uZWxpbmcgYW5kIHZpcnR1YWxcbiAgMTg6XHRcdCAgc2VydmVyIHZpYSBkaXJlY3Qgcm91dGluZy4gVGhlIHNldmVyYWwgc2NoZWR1bGluZyBhbGdvcml0aG1zIGNhblxuICAxOTpcdFx0ICBiZSB1c2VkIHRvIGNob29zZSB3aGljaCBzZXJ2ZXIgdGhlIGNvbm5lY3Rpb24gaXMgZGlyZWN0ZWQgdG8sXG4gIDIwOlx0XHQgIHRodXMgbG9hZCBiYWxhbmNpbmcgY2FuIGJlIGFjaGlldmVkIGFtb25nIHRoZSBzZXJ2ZXJzLiAgRm9yIG1vcmVcbiAgMjE6XHRcdCAgaW5mb3JtYXRpb24gYW5kIGl0cyBhZG1pbmlzdHJhdGlvbiBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgdGhlXG4gIDIyOlx0XHQgIGZvbGxvd2luZyBVUkw6IFx1MDAzY2h0dHA6Ly93d3cubGludXh2aXJ0dWFsc2VydmVyLm9yZy9cdTAwM2UuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXG4gIDI1Olx0XHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjY6XHRcbiAgMjc6XHRpZiBJUF9WU1xuICAyODpcdFxuICAyOTpcdGNvbmZpZ1x0SVBfVlNfSVBWNlxuICAzMDpcdFx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIElQVlNcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gSVBWNiA9IHkgfHwgSVBfVlMgPSBJUFY2XG4gIDMyOlx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjZcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgQWRkIElQdjYgc3VwcG9ydCB0byBJUFZTLlxuICAzNTpcdFxuICAzNjpcdFx0ICBTYXkgWSBpZiB1bnN1cmUuXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnXHRJUF9WU19ERUJVR1xuICAzOTpcdFx0Ym9vbCBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBkZWJ1Z2dpbmdcJiMzNDtcbiAgNDA6XHRcdGhlbHBcbiAgNDE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBnZXQgYWRkaXRpb25hbCBtZXNzYWdlcyB1c2VmdWwgaW5cbiAgNDI6XHRcdCAgZGVidWdnaW5nIHRoZSBJUCB2aXJ0dWFsIHNlcnZlciBjb2RlLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVidWdcbiAgNDM6XHRcdCAgbGV2ZWwgaW4gL3Byb2Mvc3lzL25ldC9pcHY0L3ZzL2RlYnVnX2xldmVsXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnXHRJUF9WU19UQUJfQklUU1xuICA0NjpcdFx0aW50IFwmIzM0O0lQVlMgY29ubmVjdGlvbiB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4gIDQ3Olx0XHRyYW5nZSA4IDIwIGlmICE2NEJJVFxuICA0ODpcdFx0cmFuZ2UgOCAyNyBpZiA2NEJJVFxuICA0OTpcdFx0ZGVmYXVsdCAxMlxuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBUaGUgSVBWUyBjb25uZWN0aW9uIGhhc2ggdGFibGUgdXNlcyB0aGUgY2hhaW5pbmcgc2NoZW1lIHRvIGhhbmRsZVxuICA1MjpcdFx0ICBoYXNoIGNvbGxpc2lvbnMuIFVzaW5nIGEgYmlnIElQVlMgY29ubmVjdGlvbiBoYXNoIHRhYmxlIHdpbGwgZ3JlYXRseVxuICA1MzpcdFx0ICByZWR1Y2UgY29uZmxpY3RzIHdoZW4gdGhlcmUgYXJlIGh1bmRyZWRzIG9mIHRob3VzYW5kcyBvZiBjb25uZWN0aW9uc1xuICA1NDpcdFx0ICBpbiB0aGUgaGFzaCB0YWJsZS5cbiAgNTU6XHRcbiAgNTY6XHRcdCAgTm90ZSB0aGUgdGFibGUgc2l6ZSBtdXN0IGJlIHBvd2VyIG9mIDIuIFRoZSB0YWJsZSBzaXplIHdpbGwgYmUgdGhlXG4gIDU3Olx0XHQgIHZhbHVlIG9mIDIgdG8gdGhlIHlvdXIgaW5wdXQgbnVtYmVyIHBvd2VyLiBUaGUgbnVtYmVyIHRvIGNob29zZSBpc1xuICA1ODpcdFx0ICBmcm9tIDggdG8gMjcgZm9yIDY0QklUKDIwIG90aGVyd2lzZSksIHRoZSBkZWZhdWx0IG51bWJlciBpcyAxMixcbiAgNTk6XHRcdCAgd2hpY2ggbWVhbnMgdGhlIHRhYmxlIHNpemUgaXMgNDA5Ni4gRG9uJiMzOTt0IGlucHV0IHRoZSBudW1iZXIgdG9vXG4gIDYwOlx0XHQgIHNtYWxsLCBvdGhlcndpc2UgeW91IHdpbGwgbG9zZSBwZXJmb3JtYW5jZSBvbiBpdC4gWW91IGNhbiBhZGFwdCB0aGVcbiAgNjE6XHRcdCAgdGFibGUgc2l6ZSB5b3Vyc2VsZiwgYWNjb3JkaW5nIHRvIHlvdXIgdmlydHVhbCBzZXJ2ZXIgYXBwbGljYXRpb24uXG4gIDYyOlx0XHQgIEl0IGlzIGdvb2QgdG8gc2V0IHRoZSB0YWJsZSBzaXplIG5vdCBmYXIgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2ZcbiAgNjM6XHRcdCAgY29ubmVjdGlvbnMgcGVyIHNlY29uZCBtdWx0aXBseWluZyBhdmVyYWdlIGxhc3RpbmcgdGltZSBvZlxuICA2NDpcdFx0ICBjb25uZWN0aW9uIGluIHRoZSB0YWJsZS4gIEZvciBleGFtcGxlLCB5b3VyIHZpcnR1YWwgc2VydmVyIGdldHMgMjAwXG4gIDY1Olx0XHQgIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQsIHRoZSBjb25uZWN0aW9uIGxhc3RzIGZvciAyMDAgc2Vjb25kcyBpblxuICA2NjpcdFx0ICBhdmVyYWdlIGluIHRoZSBjb25uZWN0aW9uIHRhYmxlLCB0aGUgdGFibGUgc2l6ZSBzaG91bGQgYmUgbm90IGZhclxuICA2NzpcdFx0ICBsZXNzIHRoYW4gMjAweDIwMCwgaXQgaXMgZ29vZCB0byBzZXQgdGhlIHRhYmxlIHNpemUgMzI3NjggKDIqKjE1KS5cbiAgNjg6XHRcbiAgNjk6XHRcdCAgQW5vdGhlciBub3RlIHRoYXQgZWFjaCBjb25uZWN0aW9uIG9jY3VwaWVzIDEyOCBieXRlcyBlZmZlY3RpdmVseSBhbmRcbiAgNzA6XHRcdCAgZWFjaCBoYXNoIGVudHJ5IHVzZXMgOCBieXRlcywgc28geW91IGNhbiBlc3RpbWF0ZSBob3cgbXVjaCBtZW1vcnkgaXNcbiAgNzE6XHRcdCAgbmVlZGVkIGZvciB5b3VyIGJveC5cbiAgNzI6XHRcbiAgNzM6XHRcdCAgWW91IGNhbiBvdmVyd3JpdGUgdGhpcyBudW1iZXIgc2V0dGluZyBjb25uX3RhYl9iaXRzIG1vZHVsZSBwYXJhbWV0ZXJcbiAgNzQ6XHRcdCAgb3IgYnkgYXBwZW5kaW5nIGlwX3ZzLmNvbm5fdGFiX2JpdHM9PyB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBpZlxuICA3NTpcdFx0ICBJUCBWUyB3YXMgY29tcGlsZWQgYnVpbHQtaW4uXG4gIDc2Olx0XG4gIDc3Olx0Y29tbWVudCBcJiMzNDtJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDc4Olx0XG4gIDc5Olx0Y29uZmlnXHRJUF9WU19QUk9UT19UQ1BcbiAgODA6XHRcdGJvb2wgXCYjMzQ7VENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAgODE6XHRcdGhlbHBcbiAgODI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBUQ1AgdHJhbnNwb3J0XG4gIDgzOlx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDg0Olx0XG4gIDg1Olx0Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbiAgODY6XHRcdGJvb2wgXCYjMzQ7VURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbiAgODc6XHRcdGhlbHBcbiAgODg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XG4gIDg5Olx0XHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXG4gIDkwOlx0XG4gIDkxOlx0Y29uZmlnXHRJUF9WU19QUk9UT19BSF9FU1BcbiAgOTI6XHRcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxuICA5MzpcdFxuICA5NDpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fRVNQXG4gIDk1Olx0XHRib29sIFwmIzM0O0VTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgRVNQIChFbmNhcHN1bGF0aW9uXG4gIDk4Olx0XHQgIFNlY3VyaXR5IFBheWxvYWQpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZ1x0SVBfVlNfUFJPVE9fQUhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTgKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogNTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIElQVlMgQ29ubmVjdGlvbiBNYW5hZ2VtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0aGlzIHBhdGNoIGlzIHJlYWxseSBkb2luZy4gVGhlIGNvcmUgbW9kdWxlIGlzIHVuZG91YnRlZGx5IGBJUF9WU2AsIGFuZCB3aGlsZSB3ZSBjb3VsZCBiZSBleGhhdXN0aXZlIGFuZCBpbmNsdWRlIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBmb3IgY29tcGxldGVuZXNzLCBgSVBfVlNgIGlzIHRoZSBjcml0aWNhbCBwaWVjZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgaGVyZS4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgaXQgdG91Y2hlcyBgaXBfdnNfY29ubi5jYC4gTGV0JiMzOTtzIGNsYXJpZnkgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4gSSByZWNhbGwgdGhlbSBidXQgSSB3aWxsIG1ha2Ugc3VyZSBJIGhhdmUgdGhlbSBleGFjdGx5IHJpZ2h0LiBJdCYjMzk7czogYGNvbm5fdGFiX2xvY2tgLCBgaXBfdnNfY29ubl9oYXNoYCwgYGlwX3ZzX2Nvbm5fdW5saW5rYCwgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAsIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AsIGFuZCBgaXBfdnNfYmluZF9kZXN0YC4KCkkmIzM5O3ZlIGdvdCB0aGUgbGlzdC4gVGltZSB0byByZWZpbmUgdGhpcyBsaXN0LiBgY29ubl90YWJfbG9ja2AgaXMgbWFya2VkIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYCwgc28gSSBjYW4gYWxtb3N0IGlnbm9yZSBpdCwgYXMgaXQgaXMgaW5saW5lZC4KClNvIHRoZSBtYWluIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGlwX3ZzX2Nvbm5faGFzaGAsIGBpcF92c19jb25uX3VubGlua2AsIGBpcF92c19jb25uX2ZpbGxfY3BvcnRgLCBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLCBhbmQgYGlwX3ZzX2JpbmRfZGVzdGAuIEkgc2hvdWxkIGdpdmUgYWRkaXRpb25hbCBjb25zaWRlcmF0aW9uIHRvIGBpcF92c19jb25uX2hhc2hgIGFuZCBgaXBfdnNfY29ubl91bmxpbmtgLCBnaXZlbiB0aGV5IGxpa2VseSBzaXQgb24gdGhlIGhvdCBwYXRoLiBUaGVzZSBhcmUgY2FsbGVkIGZvciBldmVyeSBjb25uZWN0aW9uLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIuIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AgaXMgY2FsbGVkIHdoZW4gYSBmb3J3YXJkaW5nIG1ldGhvZCBjaGFuZ2VzOyBgaXBfdnNfYmluZF9kZXN0YCBpcyBjYWxsZWQgd2hlbiBiaW5kaW5nIGEgZGVzdGluYXRpb24sIGFuZCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCBpcyBmb3IgdGhlIGNsaWVudCBwb3J0LCBzbyB0aGV5IGFyZSBub3QgcXVpdGUgYXMgaG90LCBidXQgbW9yZSBzcGVjaWZpYy4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9ucywgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AgYW5kIGBpcF92c19iaW5kX2Rlc3RgIGFzIHRoZXkgYXJlIG1vcmUgc3BlY2lhbGl6ZWQgYW5kIGxpa2VseSBpbXBhY3Qgc3BlY2lmaWMgY29ubmVjdGlvbiBiZWhhdmlvcnMuIGBpcF92c19jb25uX2ZpbGxfY3BvcnRgIGlzIGFsc28gZ29vZC4KCkkgd2lsbCBhbHNvIHF1aWNrbHkgY2hlY2sgd2hldGhlciBhbnkgYXJlIGBzdGF0aWNgLiBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgIGlzIHN0YXRpYzsgdGhlIHJlc3QgYXJlIG5vdC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdyBJJiMzOTttIHJlYWR5IHRvIHByZXNlbnQgbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19UQ1AmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVURQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2smIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2hhc2gmIzM0OywKICAgICYjMzQ7aXBfdnNfY29ubl91bmxpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIElQVlMgY29ubmVjdGlvbiBoYXNoaW5nIGFuZCBsb2NraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgZG91YmxlIGhhc2hpbmcgYW5kIGZvcndhcmRpbmcgbWV0aG9kcyBhcmUgaGFuZGxlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2JpbmRfZGVzdCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2ZpbGxfY3BvcnQmIzM0OywKICAgICYjMzQ7aXBfdnNfY29ubl9oYXNoJiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fdW5saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBJUFZTIGNvbm5lY3Rpb24gaGFzaGluZyBhbmQgbG9ja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGNoYW5nZXMgdG8gaG93IGRvdWJsZSBoYXNoaW5nIGFuZCBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIGhhbmRsZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODoxNS4yOTY0NjQ5NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODk5MjMyNjczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jb25uX2NoYW5nZV9md2RfbWFza1wiLFxuICAgIFwiaXBfdnNfYmluZF9kZXN0XCIsXG4gICAgXCJpcF92c19jb25uX2ZpbGxfY3BvcnRcIixcbiAgICBcImlwX3ZzX2Nvbm5faGFzaFwiLFxuICAgIFwiaXBfdnNfY29ubl91bmxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVBWUyBjb25uZWN0aW9uIGhhc2hpbmcgYW5kIGxvY2tpbmcgbG9naWMsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBjaGFuZ2VzIHRvIGhvdyBkb3VibGUgaGFzaGluZyBhbmQgZm9yd2FyZGluZyBtZXRob2RzIGFyZSBoYW5kbGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODoxNS4yOTY0NzAzOTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDkzMzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY3NzUxZDk3NDU5OTI0YWJkMWNhNDM1YzJkYWE1YjA2YWVkMDAwZmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAwMjo1ODoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbmluZGV4IGNiMzY2NDFmOGQxY2MxLi4yYTkwM2FmOTI3Zjc2YiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbkBAIC03MCwyNSArNzAsNDUgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxcbiAgKiAtIGhhc2ggdGFibGUgcmVzaXplIHdvcmtzIGxpa2UgcmVoYXNoIGJ1dCBhbHdheXMgcmVoYXNoZXMgaW50byBuZXcgdGFibGVcXG4gICogLSBiaXQgbG9jayBvbiBidWNrZXQgc2VyaWFsaXplcyBhbGwgb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGUgY2hhaW5cXG4rICogLSBvbiByZXNpemUsIGJ1Y2tldCBmcm9tIHRoZSBvbGQgdGFibGUgaXMgbG9ja2VkIGJlZm9yZSBidWNrZXQgZnJvbSB0aGVcXG4rICogbmV3IHRhYmxlXFxuICAqIC0gY3AtXFx1MDAzZWxvY2sgcHJvdGVjdHMgY29ubiBmaWVsZHMgbGlrZSBjcC1cXHUwMDNlZmxhZ3MsIGNwLVxcdTAwM2VkZXN0XFxuICAqL1xcbiBcXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXFxuKy8qKlxcbisgICogY29ubl90YWJfbG9jayAtIExvY2sgY29ubl90YWIgYnVja2V0cyBmb3IgY29ubiBoYXNoL3VuaGFzaCwgbm90IGZvciByZWhhc2hcXG4rICAqIEB0OlxcdFxcdGhhc2ggdGFibGUgZm9yIGhuMCwgbmV3X3RibCB3aGVuIG5ld19oYXNoPXRydWVcXG4rICAqIEB0MjpcXHRoYXNoIHRhYmxlIGZvciBobjEsIG5ld190Ymwgd2hlbiBuZXdfaGFzaDI9dHJ1ZVxcbisgICogQGNwOlxcdGNvbm5lY3Rpb25cXG4rICAqIEBoYXNoX2tleTpcXHRoYXNoIGtleSBmb3IgaG4wXFxuKyAgKiBAaGFzaF9rZXkyOlxcdGhhc2gga2V5IGZvciBobjFcXG4rICAqIEB1c2UyOlxcdHVzaW5nIGhuMSAoZG91YmxlIGhhc2hpbmcpIGJhc2VkIG9uIHRoZSBmb3J3YXJkaW5nIG1ldGhvZFxcbisgICogQG5ld19oYXNoOlxcdG1vZGUgZm9yIGhuMCwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKVxcbisgICogQG5ld19oYXNoMjpcXHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcXG4rICAqIEBoZWFkX3JldDpcXHRyZXR1cm5lZCBoZWFkIGZvciBobjBcXG4rICAqIEBoZWFkMl9yZXQ6XFx0cmV0dXJuZWQgaGVhZCBmb3IgaG4xXFxuKyAgKlxcbisgICogV2Ugc3VwcG9ydCAzIG1vZGVzOlxcbisgICogLSBzZWVrIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIHVuaGFzaGluZ1xcbisgICogLSBoYXNoIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIGhhc2hpbmdcXG4rICAqIC0gc2VlayBobjAgYW5kIGhhc2ggaG4xLCB1c2VkIHdoZW4gZm9yd2FyZGluZyBtZXRob2QgaXMgY2hhbmdlZFxcbisgICovXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZFxcbi1jb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LFxcbi1cXHQgICAgICB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXFxuLVxcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxcbitjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19yaHQgKnQyLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuK1xcdCAgICAgIHUzMiBoYXNoX2tleSwgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxcbitcXHQgICAgICBib29sIG5ld19oYXNoMiwgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkX3JldCxcXG4rXFx0ICAgICAgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkMl9yZXQpXFxuIHtcXG4gXFx0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcXG4gXFx0dTMyIGhhc2hfa2V5X25ldywgaGFzaF9rZXlfbmV3MjtcXG4tXFx0c3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0O1xcbi1cXHR1MzIgaWR4LCBpZHgyO1xcbitcXHRpbnQgaWR4ID0gMCwgaWR4MiA9IDA7XFxuK1xcbitcXHQvKiBBZHZhbmNlIGlkeDIgd2hlbiBuZXdfaGFzaCBpcyBub3Qgc2V0IGJ1dCBoYXNoX2tleTJcXG4rXFx0ICogaXMgZm9yIG5ldyB0YWJsZVxcbitcXHQgKi9cXG4rXFx0aWYgKG5ld19oYXNoMiBcXHUwMDI2XFx1MDAyNiB1c2UyIFxcdTAwMjZcXHUwMDI2IHQgIT0gdDIpXFxuK1xcdFxcdGlkeDIrKztcXG4gXFxuLVxcdGlkeCA9IGhhc2hfa2V5IFxcdTAwMjYgdC1cXHUwMDNlbWFzaztcXG4tXFx0aWYgKHVzZTIpXFxuLVxcdFxcdGlkeDIgPSBoYXNoX2tleTIgXFx1MDAyNiB0LVxcdTAwM2VtYXNrO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGlkeDIgPSBpZHg7XFxuIFxcdGlmICghbmV3X2hhc2gpIHtcXG4gXFx0XFx0LyogV2UgbmVlZCB0byBsb2NrIHRoZSBidWNrZXQgaW4gdGhlIHJpZ2h0IHRhYmxlICovXFxuIFxcbkBAIC0xMDAsNDYgKzEyMCw0NSBAQCBjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LFxcbiBcXHRcXHRcXHQgKiBib3RoIG5vZGVzIGluIGRpZmZlcmVudCB0YWJsZXMsIHVzZSBpZHgvaWR4MlxcbiBcXHRcXHRcXHQgKiBmb3IgcHJvcGVyIGxvY2sgb3JkZXJpbmcgZm9yIGhlYWRzLlxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWR4ID0gaGFzaF9rZXkgXFx1MDAyNiB0LVxcdTAwM2VtYXNrO1xcbi1cXHRcXHRcXHRpZHggfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKHVzZTIpIHtcXG4tXFx0XFx0XFx0aWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xcbi1cXHRcXHRcXHRcXHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xcbi1cXHRcXHRcXHRcXHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cXHUwMDNlbmV3X3RibCk7XFxuLVxcdFxcdFxcdFxcdGlkeDIgPSBoYXNoX2tleTIgXFx1MDAyNiB0Mi1cXHUwMDNlbWFzaztcXG4tXFx0XFx0XFx0XFx0aWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRpZHgyID0gaWR4O1xcbitcXHRcXHRcXHRpZHgrKztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcdGlmICh1c2UyIFxcdTAwMjZcXHUwMDI2ICFuZXdfaGFzaDIgXFx1MDAyNlxcdTAwMjYgIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7XFxuK1xcdFxcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXFxuK1xcdFxcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQyLVxcdTAwM2VuZXdfdGJsKTtcXG4rXFx0XFx0aWR4MisrO1xcbitcXHR9XFxuIFxcbitcXHRpZiAoIXVzZTIpXFxuK1xcdFxcdGlkeDIgPSBpZHg7XFxuIFxcdGhlYWQgPSB0LVxcdTAwM2VidWNrZXRzICsgKGhhc2hfa2V5IFxcdTAwMjYgdC1cXHUwMDNlbWFzayk7XFxuIFxcdGhlYWQyID0gdXNlMiA/IHQyLVxcdTAwM2VidWNrZXRzICsgKGhhc2hfa2V5MiBcXHUwMDI2IHQyLVxcdTAwM2VtYXNrKSA6IGhlYWQ7XFxuIFxcbi1cXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuLVxcdC8qIERvIG5vdCB0b3VjaCBzZXFjb3VudCwgdGhpcyBpcyBhIHNhZmUgb3BlcmF0aW9uICovXFxuLVxcbi1cXHRpZiAoaWR4IFxcdTAwM2M9IGlkeDIpIHtcXG4rXFx0aWYgKGlkeCBcXHUwMDNlIGlkeDIgfHwgKGhlYWQgXFx1MDAzZSBoZWFkMiBcXHUwMDI2XFx1MDAyNiBpZHggPT0gaWR4MikpIHtcXG4rXFx0XFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XFxuIFxcdFxcdGhsaXN0X2JsX2xvY2soaGVhZCk7XFxuLVxcdFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbi1cXHRcXHRcXHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XFxuIFxcdFxcdGhsaXN0X2JsX2xvY2soaGVhZCk7XFxuK1xcdFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbitcXHRcXHRcXHRobGlzdF9ibF9sb2NrKGhlYWQyKTtcXG4gXFx0fVxcbiBcXHRpZiAoIW5ld19oYXNoKSB7XFxuK1xcdFxcdGJvb2wgY2hhbmdlZDtcXG4rXFxuIFxcdFxcdC8qIEVuc3VyZSBoYXNoX2tleSBpcyByZWFkIHVuZGVyIGxvY2sgKi9cXG4gXFx0XFx0aGFzaF9rZXlfbmV3ID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXkpO1xcbi1cXHRcXHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbitcXHRcXHRjaGFuZ2VkID0gaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3O1xcbitcXHRcXHRpZiAodXNlMiBcXHUwMDI2XFx1MDAyNiAhbmV3X2hhc2gyKSB7XFxuK1xcdFxcdFxcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMS5oYXNoX2tleSk7XFxuK1xcdFxcdFxcdGNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGhhc2hfa2V5X25ldzIgPSBoYXNoX2tleTI7XFxuK1xcdFxcdH1cXG4gXFx0XFx0LyogSGFzaCBjaGFuZ2VkID8gKi9cXG4tXFx0XFx0aWYgKGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldyB8fFxcbi1cXHRcXHQgICAgKGhhc2hfa2V5MiAhPSBoYXNoX2tleV9uZXcyIFxcdTAwMjZcXHUwMDI2IHVzZTIpKSB7XFxuK1xcdFxcdGlmIChjaGFuZ2VkKSB7XFxuIFxcdFxcdFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbiBcXHRcXHRcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xcbiBcXHRcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XFxuLVxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiBcXHRcXHRcXHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcXG4gXFx0XFx0XFx0aGFzaF9rZXkyID0gaGFzaF9rZXlfbmV3MjtcXG4gXFx0XFx0XFx0Z290byByZXRyeTtcXG5AQCAtMTU1LDcgKzE3NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25uX3RhYl91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsXFxuIFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbiBcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xcbiBcXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XFxuLVxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuQEAgLTI2OCw4ICsyODYsOSBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXHRcXHR1c2UyID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuLVxcdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXFxuLVxcdFxcdCAgICAgIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbitcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuK1xcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXFxuK1xcdFxcdCAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4gXFxuIFxcdGNwLVxcdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xcbiBcXHRXUklURV9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcXG5AQCAtMjgwLDYgKzI5OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuIFxcdFxcdGhsaXN0X2JsX2FkZF9oZWFkX3JjdShcXHUwMDI2Y3AtXFx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XFxuIFxcbiBcXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0cmV0ID0gMTtcXG4gXFxuIFxcdC8qIFNjaGVkdWxlIHJlc2l6aW5nIGlmIGxvYWQgaW5jcmVhc2VzICovXFxuQEAgLTMwNiwxOCArMzI2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuIFxcdFxcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFxcdTAwMjZjcC1cXHUwMDNlcmVmY250KTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiBcXG4gXFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVxcdTAwM2Vjb25uX3RhYik7XFxuIFxcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXkpO1xcbiBcXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMS5oYXNoX2tleSk7XFxuIFxcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XFxuIFxcbi1cXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcXG4tXFx0XFx0ICAgICAgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuK1xcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLFxcbitcXHRcXHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbiBcXG4gXFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHtcXG4gXFx0XFx0LyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi9cXG4tXFx0XFx0aWYgKHJlZmNvdW50X2RlY19pZl9vbmUoXFx1MDAyNmNwLVxcdTAwM2VyZWZjbnQpKSB7XFxuK1xcdFxcdGlmICh1c2UyID09IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmVmY291bnRfZGVjX2lmX29uZShcXHUwMDI2Y3AtXFx1MDAzZXJlZmNudCkpIHtcXG4gXFx0XFx0XFx0aGxpc3RfYmxfZGVsX3JjdShcXHUwMDI2Y3AtXFx1MDAzZWhuMC5ub2RlKTtcXG4gXFx0XFx0XFx0aWYgKHVzZTIpXFxuIFxcdFxcdFxcdFxcdGhsaXN0X2JsX2RlbF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjEubm9kZSk7XFxuQEAgLTMyOCw2ICszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXG4gXFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcXG4gXFxuK1xcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTYzMiw2ICs2NTUsNyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcXG4gXFx0aW50IG50Ymw7XFxuIFxcdGludCBkaXI7XFxuIFxcbityZXN0YXJ0OlxcbiBcXHQvKiBObyBwYWNrZXRzIGZyb20gaW5zaWRlLCBzbyB3ZSBjYW4gZG8gaXQgaW4gMiBzdGVwcy4gKi9cXG4gXFx0ZGlyID0gdXNlMiA/IDEgOiAwO1xcbiBcXG5AQCAtNjg2LDYgKzcxMCwyMyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcXG4gXFx0LyogUHJvdGVjdCB0aGUgY3AtXFx1MDAzZWZsYWdzIG1vZGlmaWNhdGlvbiAqL1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG4gXFxuK1xcdC8qIFJlY2hlY2sgdGhlIGZvcndhcmRpbmcgbWV0aG9kIHVuZGVyIGxvY2sgKi9cXG4rXFx0aWYgKHVzZTIgIT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XFxuK1xcdFxcdHVzZTIgPSAhdXNlMjtcXG4rXFx0XFx0aWYgKHVzZTIpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0LyogUmVzdGFydCB3aXRoIG5ldyB1c2UyIHZhbHVlICovXFxuK1xcdFxcdFxcdGdvdG8gcmVzdGFydDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoZGlyKSB7XFxuK1xcdFxcdFxcdC8qIE5vdCBzdGFydGVkIHlldCwgc28ganVzdCBza2lwIGRpciAxICovXFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdGRpci0tO1xcbitcXHRcXHRcXHRnb3RvIG5leHRfZGlyO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIEp1c3QgZmluaXNoIGRpciAwICovXFxuK1xcdH1cXG4rXFxuIFxcdC8qIExvY2sgc2VxY291bnQgb25seSBmb3IgdGhlIG9sZCBidWNrZXQsIGV2ZW4gaWYgd2UgYXJlIG9uIG5ldyB0YWJsZVxcbiBcXHQgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLlxcbiBcXHQgKi9cXG5AQCAtNzUyLDYgKzc5Myw2MSBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcXG4gXFx0XFx0Z290byBuZXh0X2RpcjtcXG4gfVxcbiBcXG4rLyogQ2hhbmdlIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiAqL1xcbitzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBjcC1cXHUwMDNlaXB2cztcXG4rXFx0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcXG4rXFx0dTMyIGhhc2gyLCBoYXNoX2tleSwgaGFzaF9rZXkyO1xcbitcXHRzdHJ1Y3QgaXBfdnNfcmh0ICp0LCAqdDI7XFxuK1xcbitcXHQvKiBTZWUgaXBfdnNfY29ubl91c2VfaGFzaDIoKSBmb3IgcmVmZXJlbmNlICovXFxuK1xcdGlmICgoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSB8fFxcbitcXHQgICAgLyogTm8gY2hhbmdlIGluIGRvdWJsZSBoYXNoaW5nID8gKi9cXG4rXFx0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkgPT1cXG4rXFx0ICAgICgobmV3X2ZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSA9PSBJUF9WU19DT05OX0ZfTUFTUSkpIHtcXG4rXFx0XFx0Y3AtXFx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVxcdTAwM2Vjb25uX3RhYik7XFxuK1xcdGlmIChpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcXG4rXFx0XFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFx0XFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbitcXG4rXFx0XFx0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxcbitcXHRcXHRcXHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgZmFsc2UgLyogbmV3X2hhc2gyICovLFxcbitcXHRcXHRcXHQgICAgICBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4rXFxuK1xcdFxcdC8qIEtlZXAgYm90aCBoYXNoIGtleXMgaW4gc2FtZSB0YWJsZSAqL1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFx0XFx0V1JJVEVfT05DRShjcC1cXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7XFxuK1xcdFxcdGhsaXN0X2JsX2RlbF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjEubm9kZSk7XFxuK1xcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4rXFxuK1xcdFxcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovXFxuK1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFxuK1xcdFxcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQtXFx1MDAzZW5ld190YmwpO1xcbitcXHRcXHRoYXNoMiA9IGlwX3ZzX2Nvbm5faGFzaGtleV9jb25uKHQyLCBjcCwgdHJ1ZSk7XFxuK1xcdFxcdGhhc2hfa2V5MiA9IGlwX3ZzX3JodF9idWlsZF9oYXNoX2tleSh0MiwgaGFzaDIpO1xcbitcXG4rXFx0XFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXFxuK1xcdFxcdGNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sXFxuK1xcdFxcdFxcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCB0cnVlIC8qIG5ld19oYXNoMiAqLyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuK1xcbitcXHRcXHRXUklURV9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5Mik7XFxuK1xcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4rXFx0XFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFxcdTAwMjZjcC1cXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcXG4rXFxuK1xcdFxcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cXHUwMDNlc2l6ZSAqL1xcbiBzdGF0aWMgaW50IGlwX3ZzX2Nvbm5fZGVmYXVsdF9sb2FkX2ZhY3RvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG4ge1xcbkBAIC0xMDE0LDYgKzExMTAsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0ZmxhZ3MgPSBjcC1cXHUwMDNlZmxhZ3M7XFxuIFxcdC8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TWU5DKSB7XFxuK1xcdFxcdC8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqL1xcbitcXHRcXHRjb25uX2ZsYWdzIFxcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcXG4rXFxuIFxcdFxcdC8qIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB0ZW1wbGF0ZSBhbmQgaXMgY3JlYXRlZFxcbiBcXHRcXHQgKiBieSBzeW5jLCBwcmVzZXJ2ZSB0aGUgYWN0aXZpdHkgZmxhZy5cXG4gXFx0XFx0ICovXFxuQEAgLTEwMjEsOSArMTEyMCwxOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0XFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFO1xcbiBcXHRcXHQvKiBjb25uZWN0aW9ucyBpbmhlcml0IGZvcndhcmRpbmcgbWV0aG9kIGZyb20gZGVzdCAqL1xcbiBcXHRcXHRmbGFncyBcXHUwMDI2PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7XFxuK1xcdFxcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XFxuK1xcdFxcdC8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW5cXG4rXFx0XFx0ICogaGFwcGVuIG9ubHkgdW5kZXIgbG9ja3NcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKVxcbitcXHRcXHRcXHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGNwLVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbitcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0fVxcbi1cXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbi1cXHRjcC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0Y3AtXFx1MDAzZWRlc3QgPSBkZXN0O1xcbiBcXG4gXFx0SVBfVlNfREJHX0JVRig3LCBcXFwiQmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCBcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjU4OjE1Ljg5ODM2NzczNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzOTA0MTE2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX2JpbmRfZGVzdFwiLFxuICAgIFwiaXBfdnNfY29ubl9maWxsX2Nwb3J0XCIsXG4gICAgXCJpcF92c19jb25uX2hhc2hcIixcbiAgICBcImlwX3ZzX2Nvbm5fdW5saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIElQVlMgY29ubmVjdGlvbiBoYXNoaW5nIGFuZCBsb2NraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgY2hhbmdlcyB0byBob3cgZG91YmxlIGhhc2hpbmcgYW5kIGZvcndhcmRpbmcgbWV0aG9kcyBhcmUgaGFuZGxlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNzc1MWQ5NzQ1OTkyNGFiZDFjYTQzNWMyZGFhNWIwNmFlZDAwMGZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMjo1ODoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG5pbmRleCBjYjM2NjQxZjhkMWNjMS4uMmE5MDNhZjkyN2Y3NmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jXG5AQCAtNzAsMjUgKzcwLDQ1IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxuICAqIC0gaGFzaCB0YWJsZSByZXNpemUgd29ya3MgbGlrZSByZWhhc2ggYnV0IGFsd2F5cyByZWhhc2hlcyBpbnRvIG5ldyB0YWJsZVxuICAqIC0gYml0IGxvY2sgb24gYnVja2V0IHNlcmlhbGl6ZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIGNoYWluXG4rICogLSBvbiByZXNpemUsIGJ1Y2tldCBmcm9tIHRoZSBvbGQgdGFibGUgaXMgbG9ja2VkIGJlZm9yZSBidWNrZXQgZnJvbSB0aGVcbisgKiBuZXcgdGFibGVcbiAgKiAtIGNwLVx1MDAzZWxvY2sgcHJvdGVjdHMgY29ubiBmaWVsZHMgbGlrZSBjcC1cdTAwM2VmbGFncywgY3AtXHUwMDNlZGVzdFxuICAqL1xuIFxuLS8qIExvY2sgY29ubl90YWIgYnVja2V0IGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaCAqL1xuKy8qKlxuKyAgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaFxuKyAgKiBAdDpcdFx0aGFzaCB0YWJsZSBmb3IgaG4wLCBuZXdfdGJsIHdoZW4gbmV3X2hhc2g9dHJ1ZVxuKyAgKiBAdDI6XHRoYXNoIHRhYmxlIGZvciBobjEsIG5ld190Ymwgd2hlbiBuZXdfaGFzaDI9dHJ1ZVxuKyAgKiBAY3A6XHRjb25uZWN0aW9uXG4rICAqIEBoYXNoX2tleTpcdGhhc2gga2V5IGZvciBobjBcbisgICogQGhhc2hfa2V5MjpcdGhhc2gga2V5IGZvciBobjFcbisgICogQHVzZTI6XHR1c2luZyBobjEgKGRvdWJsZSBoYXNoaW5nKSBiYXNlZCBvbiB0aGUgZm9yd2FyZGluZyBtZXRob2RcbisgICogQG5ld19oYXNoOlx0bW9kZSBmb3IgaG4wLCBoYXNoIG5vZGUgKHRydWUpIG9yIHNlZWsgbm9kZSAoZmFsc2UpXG4rICAqIEBuZXdfaGFzaDI6XHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbisgICogQGhlYWRfcmV0Olx0cmV0dXJuZWQgaGVhZCBmb3IgaG4wXG4rICAqIEBoZWFkMl9yZXQ6XHRyZXR1cm5lZCBoZWFkIGZvciBobjFcbisgICpcbisgICogV2Ugc3VwcG9ydCAzIG1vZGVzOlxuKyAgKiAtIHNlZWsgbW9kZSBmb3IgYm90aCBub2RlcywgdXNlZCBmb3IgdW5oYXNoaW5nXG4rICAqIC0gaGFzaCBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciBoYXNoaW5nXG4rICAqIC0gc2VlayBobjAgYW5kIGhhc2ggaG4xLCB1c2VkIHdoZW4gZm9yd2FyZGluZyBtZXRob2QgaXMgY2hhbmdlZFxuKyAgKi9cbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWRcbi1jb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LFxuLVx0ICAgICAgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxuLVx0ICAgICAgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkX3JldCwgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkMl9yZXQpXG4rY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfcmh0ICp0Miwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuK1x0ICAgICAgdTMyIGhhc2hfa2V5LCB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXG4rXHQgICAgICBib29sIG5ld19oYXNoMiwgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkX3JldCxcbitcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxuIHtcbiBcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XG4gXHR1MzIgaGFzaF9rZXlfbmV3LCBoYXNoX2tleV9uZXcyO1xuLVx0c3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0O1xuLVx0dTMyIGlkeCwgaWR4MjtcbitcdGludCBpZHggPSAwLCBpZHgyID0gMDtcbitcbitcdC8qIEFkdmFuY2UgaWR4MiB3aGVuIG5ld19oYXNoIGlzIG5vdCBzZXQgYnV0IGhhc2hfa2V5MlxuK1x0ICogaXMgZm9yIG5ldyB0YWJsZVxuK1x0ICovXG4rXHRpZiAobmV3X2hhc2gyIFx1MDAyNlx1MDAyNiB1c2UyIFx1MDAyNlx1MDAyNiB0ICE9IHQyKVxuK1x0XHRpZHgyKys7XG4gXG4tXHRpZHggPSBoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuLVx0aWYgKHVzZTIpXG4tXHRcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdGVsc2Vcbi1cdFx0aWR4MiA9IGlkeDtcbiBcdGlmICghbmV3X2hhc2gpIHtcbiBcdFx0LyogV2UgbmVlZCB0byBsb2NrIHRoZSBidWNrZXQgaW4gdGhlIHJpZ2h0IHRhYmxlICovXG4gXG5AQCAtMTAwLDQ2ICsxMjAsNDUgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbiBcdFx0XHQgKiBib3RoIG5vZGVzIGluIGRpZmZlcmVudCB0YWJsZXMsIHVzZSBpZHgvaWR4MlxuIFx0XHRcdCAqIGZvciBwcm9wZXIgbG9jayBvcmRlcmluZyBmb3IgaGVhZHMuXG4gXHRcdFx0ICovXG4tXHRcdFx0aWR4ID0gaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdFx0XHRpZHggfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XG4tXHRcdH1cbi1cdFx0aWYgKHVzZTIpIHtcbi1cdFx0XHRpZiAoIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7XG4tXHRcdFx0XHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xuLVx0XHRcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXHUwMDNlbmV3X3RibCk7XG4tXHRcdFx0XHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrO1xuLVx0XHRcdFx0aWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbi1cdFx0XHR9XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWR4MiA9IGlkeDtcbitcdFx0XHRpZHgrKztcbiBcdFx0fVxuIFx0fVxuK1x0aWYgKHVzZTIgXHUwMDI2XHUwMDI2ICFuZXdfaGFzaDIgXHUwMDI2XHUwMDI2ICFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xuK1x0XHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xuK1x0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cdTAwM2VuZXdfdGJsKTtcbitcdFx0aWR4MisrO1xuK1x0fVxuIFxuK1x0aWYgKCF1c2UyKVxuK1x0XHRpZHgyID0gaWR4O1xuIFx0aGVhZCA9IHQtXHUwMDNlYnVja2V0cyArIChoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrKTtcbiBcdGhlYWQyID0gdXNlMiA/IHQyLVx1MDAzZWJ1Y2tldHMgKyAoaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrKSA6IGhlYWQ7XG4gXG4tXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHQvKiBEbyBub3QgdG91Y2ggc2VxY291bnQsIHRoaXMgaXMgYSBzYWZlIG9wZXJhdGlvbiAqL1xuLVxuLVx0aWYgKGlkeCBcdTAwM2M9IGlkeDIpIHtcbitcdGlmIChpZHggXHUwMDNlIGlkeDIgfHwgKGhlYWQgXHUwMDNlIGhlYWQyIFx1MDAyNlx1MDAyNiBpZHggPT0gaWR4MikpIHtcbitcdFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XG4gXHRcdGhsaXN0X2JsX2xvY2soaGVhZCk7XG4tXHRcdGlmIChoZWFkICE9IGhlYWQyKVxuLVx0XHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0fSBlbHNlIHtcbi1cdFx0aGxpc3RfYmxfbG9jayhoZWFkMik7XG4gXHRcdGhsaXN0X2JsX2xvY2soaGVhZCk7XG4rXHRcdGlmIChoZWFkICE9IGhlYWQyKVxuK1x0XHRcdGhsaXN0X2JsX2xvY2soaGVhZDIpO1xuIFx0fVxuIFx0aWYgKCFuZXdfaGFzaCkge1xuK1x0XHRib29sIGNoYW5nZWQ7XG4rXG4gXHRcdC8qIEVuc3VyZSBoYXNoX2tleSBpcyByZWFkIHVuZGVyIGxvY2sgKi9cbiBcdFx0aGFzaF9rZXlfbmV3ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4tXHRcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbitcdFx0Y2hhbmdlZCA9IGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldztcbitcdFx0aWYgKHVzZTIgXHUwMDI2XHUwMDI2ICFuZXdfaGFzaDIpIHtcbitcdFx0XHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4rXHRcdFx0Y2hhbmdlZCB8PSBoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRoYXNoX2tleV9uZXcyID0gaGFzaF9rZXkyO1xuK1x0XHR9XG4gXHRcdC8qIEhhc2ggY2hhbmdlZCA/ICovXG4tXHRcdGlmIChoYXNoX2tleSAhPSBoYXNoX2tleV9uZXcgfHxcbi1cdFx0ICAgIChoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MiBcdTAwMjZcdTAwMjYgdXNlMikpIHtcbitcdFx0aWYgKGNoYW5nZWQpIHtcbiBcdFx0XHRpZiAoaGVhZCAhPSBoZWFkMilcbiBcdFx0XHRcdGhsaXN0X2JsX3VubG9jayhoZWFkMik7XG4gXHRcdFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQpO1xuLVx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0XHRcdGhhc2hfa2V5ID0gaGFzaF9rZXlfbmV3O1xuIFx0XHRcdGhhc2hfa2V5MiA9IGhhc2hfa2V5X25ldzI7XG4gXHRcdFx0Z290byByZXRyeTtcbkBAIC0xNTUsNyArMTc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbm5fdGFiX3VubG9jayhzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCxcbiBcdGlmIChoZWFkICE9IGhlYWQyKVxuIFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQpO1xuLVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbkBAIC0yNjgsOCArMjg2LDkgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0dXNlMiA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0Y29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLyxcbitcdFx0ICAgICAgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiBcbiBcdGNwLVx1MDAzZWZsYWdzIHw9IElQX1ZTX0NPTk5fRl9IQVNIRUQ7XG4gXHRXUklURV9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSwgaGFzaF9rZXkpO1xuQEAgLTI4MCw2ICsyOTksNyBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFx0XHRobGlzdF9ibF9hZGRfaGVhZF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcbiBcbiBcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJldCA9IDE7XG4gXG4gXHQvKiBTY2hlZHVsZSByZXNpemluZyBpZiBsb2FkIGluY3JlYXNlcyAqL1xuQEAgLTMwNiwxOCArMzI2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXG4gXHR0ID0gcmN1X2RlcmVmZXJlbmNlKGlwdnMtXHUwMDNlY29ubl90YWIpO1xuIFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiBcdGhhc2hfa2V5MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuIFx0dXNlMiA9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKTtcbiBcbi1cdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLFxuLVx0XHQgICAgICBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4rXHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbitcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHtcbiBcdFx0LyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi9cbi1cdFx0aWYgKHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KSkge1xuK1x0XHRpZiAodXNlMiA9PSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCkpIHtcbiBcdFx0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMC5ub2RlKTtcbiBcdFx0XHRpZiAodXNlMilcbiBcdFx0XHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUpO1xuQEAgLTMyOCw2ICszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFxuIFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiBcbitcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTYzMiw2ICs2NTUsNyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbiBcdGludCBudGJsO1xuIFx0aW50IGRpcjtcbiBcbityZXN0YXJ0OlxuIFx0LyogTm8gcGFja2V0cyBmcm9tIGluc2lkZSwgc28gd2UgY2FuIGRvIGl0IGluIDIgc3RlcHMuICovXG4gXHRkaXIgPSB1c2UyID8gMSA6IDA7XG4gXG5AQCAtNjg2LDYgKzcxMCwyMyBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbiBcdC8qIFByb3RlY3QgdGhlIGNwLVx1MDAzZWZsYWdzIG1vZGlmaWNhdGlvbiAqL1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuIFxuK1x0LyogUmVjaGVjayB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9jayAqL1xuK1x0aWYgKHVzZTIgIT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7XG4rXHRcdHVzZTIgPSAhdXNlMjtcbitcdFx0aWYgKHVzZTIpIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbitcdFx0XHQvKiBSZXN0YXJ0IHdpdGggbmV3IHVzZTIgdmFsdWUgKi9cbitcdFx0XHRnb3RvIHJlc3RhcnQ7XG4rXHRcdH1cbitcdFx0aWYgKGRpcikge1xuK1x0XHRcdC8qIE5vdCBzdGFydGVkIHlldCwgc28ganVzdCBza2lwIGRpciAxICovXG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4rXHRcdFx0ZGlyLS07XG4rXHRcdFx0Z290byBuZXh0X2RpcjtcbitcdFx0fVxuK1x0XHQvKiBKdXN0IGZpbmlzaCBkaXIgMCAqL1xuK1x0fVxuK1xuIFx0LyogTG9jayBzZXFjb3VudCBvbmx5IGZvciB0aGUgb2xkIGJ1Y2tldCwgZXZlbiBpZiB3ZSBhcmUgb24gbmV3IHRhYmxlXG4gXHQgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLlxuIFx0ICovXG5AQCAtNzUyLDYgKzc5Myw2MSBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbiBcdFx0Z290byBuZXh0X2RpcjtcbiB9XG4gXG4rLyogQ2hhbmdlIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiAqL1xuK3N0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIG5ld19mbGFncylcbit7XG4rXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IGNwLVx1MDAzZWlwdnM7XG4rXHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyO1xuK1x0dTMyIGhhc2gyLCBoYXNoX2tleSwgaGFzaF9rZXkyO1xuK1x0c3RydWN0IGlwX3ZzX3JodCAqdCwgKnQyO1xuK1xuK1x0LyogU2VlIGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKCkgZm9yIHJlZmVyZW5jZSAqL1xuK1x0aWYgKChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSB8fFxuK1x0ICAgIC8qIE5vIGNoYW5nZSBpbiBkb3VibGUgaGFzaGluZyA/ICovXG4rXHQgICAgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRKSA9PVxuK1x0ICAgICgobmV3X2ZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfRldEX01BU0spID09IElQX1ZTX0NPTk5fRl9NQVNRKSkge1xuK1x0XHRjcC1cdTAwM2VmbGFncyA9IG5ld19mbGFncztcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbitcdGlmIChpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcbitcdFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xuK1x0XHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuK1x0XHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbitcbitcdFx0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuK1x0XHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sXG4rXHRcdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuK1xuK1x0XHQvKiBLZWVwIGJvdGggaGFzaCBrZXlzIGluIHNhbWUgdGFibGUgKi9cbitcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbitcdFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5KTtcbitcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjEubm9kZSk7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuK1xuK1x0XHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogU3RhcnQgZG91YmxlIGhhc2hpbmcgKi9cbitcbitcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbitcbitcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodC1cdTAwM2VuZXdfdGJsKTtcbitcdFx0aGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpO1xuK1x0XHRoYXNoX2tleTIgPSBpcF92c19yaHRfYnVpbGRfaGFzaF9rZXkodDIsIGhhc2gyKTtcbitcbitcdFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXG4rXHRcdGNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sXG4rXHRcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIHRydWUgLyogbmV3X2hhc2gyICovLFxuK1x0XHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbitcbitcdFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5Mik7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuK1x0XHRobGlzdF9ibF9hZGRfaGVhZF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcbitcbitcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbitcdH1cbit9XG4rXG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cdTAwM2VzaXplICovXG4gc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4ge1xuQEAgLTEwMTQsNiArMTExMCw5IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0ZmxhZ3MgPSBjcC1cdTAwM2VmbGFncztcbiBcdC8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TWU5DKSB7XG4rXHRcdC8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqL1xuK1x0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUO1xuK1xuIFx0XHQvKiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdGVtcGxhdGUgYW5kIGlzIGNyZWF0ZWRcbiBcdFx0ICogYnkgc3luYywgcHJlc2VydmUgdGhlIGFjdGl2aXR5IGZsYWcuXG4gXHRcdCAqL1xuQEAgLTEwMjEsOSArMTEyMCwxOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdFx0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTtcbiBcdFx0LyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi9cbiBcdFx0ZmxhZ3MgXHUwMDI2PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7XG4rXHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4rXHRcdC8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW5cbitcdFx0ICogaGFwcGVuIG9ubHkgdW5kZXIgbG9ja3NcbitcdFx0ICovXG4rXHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcbitcdFx0XHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xuK1x0XHRlbHNlXG4rXHRcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbitcdH0gZWxzZSB7XG4rXHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHR9XG4tXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xuLVx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGNwLVx1MDAzZWRlc3QgPSBkZXN0O1xuIFxuIFx0SVBfVlNfREJHX0JVRig3LCBcIkJpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjU4OjE1Ljg5ODM3MDA1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTY4NjY2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBJUFZTIENvbm5lY3Rpb24gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jYC4gSXQncyBhbGwgYWJvdXQgaG93IElQVlMgY29ubmVjdGlvbnMgYXJlIGhhc2hlZCBhbmQgbG9ja2VkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBkb3VibGUgaGFzaGluZyBhbmQgaG93IGZvcndhcmRpbmcgaXMgaGFuZGxlZC4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AgYW5kIHRoZXkndmUgYWxzbyBmaWRkbGVkIHdpdGggYGNvbm5fdGFiX2xvY2tgLiBSaWdodCBhd2F5LCBJIHNlZSB0aGlzIGlzIGNvcmUgSVBWUyBsb2dpYyDigJMgdGhlIGd1dHMgb2YgaXRzIGNvbm5lY3Rpb24gbWFuYWdlbWVudC5cblxuVGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgcG9wcyB1cCBpbiBteSBoZWFkIGlzIGFsd2F5czogXCJJcyB0aGlzIHJlYWNoYWJsZT9cIiBDb25zaWRlcmluZyBJUFZTIGlzIGEga2VybmVsIGxvYWQgYmFsYW5jZXIsIHVzZWQgdGhyb3VnaCBuZXRsaW5rIG9yIHNvY2tldCBvcHRpb25zLCBhbmQgcHJvY2Vzc2VzIGFjdHVhbCBuZXR3b3JrIHBhY2tldHMsIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIFwieWVzXCIuIFRoaXMgdGhpbmcgKmFic29sdXRlbHkqIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2NyZWFtcyBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBoaXQgdGhpcyBoYXJkLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gYW5kIHBpbnBvaW50IHRoZSBleGFjdCBmdW5jdGlvbnMgdGhhdCB0aGlzIHBhdGNoIGhhcyBtb2RpZmllZC4gV2UgbmVlZCB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzLiBBbHJpZ2h0LCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYGNvbm5fdGFiX2xvY2tgICh3aGljaCwgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIGlzIGFuIGlubGluZSBmdW5jdGlvbiksIGBpcF92c19jb25uX2hhc2hgLCBgaXBfdnNfY29ubl91bmxpbmtgLCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYW5kIGBpcF92c19iaW5kX2Rlc3RgLiBJJ3ZlIGdvdCBhIGdvb2QgbGlzdCB0byBzdGFydCB3aXRoLlxuXG5TbyBteSBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHdpbGwgYmU6IGBpcF92c19jb25uX2hhc2hgLCBgaXBfdnNfY29ubl91bmxpbmtgLCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYW5kIGBpcF92c19iaW5kX2Rlc3RgLlxuXG5CZWZvcmUgSSBmb3JnZXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSBuZWNlc3NhcnkgY29uZmlncyBlbmFibGVkLiBPYnZpb3VzbHksIElQVlMgbmVlZHMgdG8gYmUgdXAgYW5kIHJ1bm5pbmcgZm9yIGFueSBvZiB0aGlzIHRvIG1hdHRlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIElQVlMsIHdoaWNoIHNob3VsZCBiZSBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBHZW5lcmFsbHksIEkgdGhpbmsgaXQncyBgQ09ORklHX0lQX1ZTYCB0aGF0IHdlIG5lZWQuIEp1c3QgdG8gYmUgc3VyZSwgbGV0IG1lIHJ1biBhIHF1aWNrIGdyZXAgdG8gdmVyaWZ5IGFuZCBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6MjIuMzE1MjM4MzI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTIxMzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODoyMi40MDIxNjY1MTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIyOTI1MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBJUFZTIENvbmZpZ3VyYXRpb24gZm9yIFN5bmNocm9uaXphdGlvbiBhbmQgTkFUKipcblxuUmlnaHQsIHNvIHdlJ3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggYElQX1ZTYCBoZXJlLiBUaGF0J3MgdGhlIGNvcmUuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2g7IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCB0aGUgcG90ZW50aWFsIGludGVyZGVwZW5kZW5jaWVzLiBMZXQgbWUganVzdCBxdWlja2x5IHNjYW4gdGhlIGxhbmRzY2FwZS4gQWgsIHRoZSBwYXRjaCBub3RlcyBtZW50aW9uIGBJUF9WU19DT05OX0ZfTUFTUWAsIGBJUF9WU19DT05OX0ZfU1lOQ2AsIGFuZCBgSVBfVlNfQ09OTl9GX1RFTVBMQVRFYC4gSW50ZXJlc3RpbmcuIFRoZXkncmUgZmxhZ3MsIG5vdCBkaXJlY3QgY29uZmlncywgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuIFRoZXknbGwgaW5mbHVlbmNlIGJlaGF2aW9yLCBjZXJ0YWlubHksIGJ1dCB0aGV5J3JlIG5vdCB0aGUgcHJpbWFyeSBrbm9icyB0byB0d2lkZGxlLiBHaXZlbiB0aGlzIGNvbnRleHQsIEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBJUFZTIHN5bmNocm9uaXphdGlvbiBvciBOQVQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIGNvbnNpZGVyaW5nIGFsbCByZWxldmFudCBzZXR0aW5ncy4gSXQncyB0aW1lIHRvIHJlZmluZSB0aGUgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6MjUuODI1MDkzMTY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjg3OTg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfVlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICdJUFZTIFNIIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cXHRpbnQgXFxcIklQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICdJUFZTIE1IIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXFx0aW50IFxcXCJJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6MjUuOTMxOTc3NTg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNjg3NTg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKklQVlMgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUFZTLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgdGhlIGBLY29uZmlnYCBmaWxlcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhhdCBJUFZTIGlzIGEgcGFydCBvZiBuZXRmaWx0ZXIuIFRvIHF1aWNrbHkgZmlsdGVyIGRvd24gdG8gd2hhdCBJIG5lZWQsIEknbGwgdXNlIGBncmVwYC4gSSdsbCBydW4gYGdyZXAgSVBfVlNgIG9uIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgcHVsbCBvdXQgYWxsIHRoZSBsaW5lcyB0aGF0IGRlZmluZSBvciByZWxhdGUgdG8gSVBWUyBjb25maWd1cmF0aW9ucy4gVGhpcyB3aWxsIGhvcGVmdWxseSBnaXZlIG1lIGEgY29uY2lzZSBsaXN0IHRvIHdvcmsgZnJvbSwgcmF0aGVyIHRoYW4gbmVlZGluZyB0byBtYW51YWxseSBzY2FuIHRoZSBlbnRpcmUgYEtjb25maWdgIGZpbGUuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIElQVlMgZmVhdHVyZXMgYW5kIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODoyOS4wNDg4NTYxMzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxOTYyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjU4OjI5LjEzMzA1NjU5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NjU3ODUwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uLiBMb29raW5nIGJhY2ssIGl0J3MgY2xlYXIgdGhhdCBmb2N1c2luZyBvbiBgbWVudWNvbmZpZyBJUF9WU2AgaXMgYWN0dWFsbHkgbWlzbGVhZGluZy4gVGhlIHJlYWwgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoZSBgSVBfVlNgIG9wdGlvbiBpdHNlbGYuIFRoYXQncyB0aGUgb25lIHdlIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGguXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGVuYWJsaW5nIGp1c3QgYElQX1ZTYCBnaXZlIHVzIHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZD8gT3IsIGRvIHdlIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGVuYWJsZSB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgbW9kdWxlcyB0b28sIGxpa2UgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgc28gZm9ydGg/IFRpbWUgdG8gY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODozMS43OTg4NDM2NjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjUxMDM4NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmNvbmZpZyBJUF9WU19QUk9UT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6MzEuOTE1MzYxMTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwNDY3NDUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZSwgdGhpbmtpbmcgbGlrZSBhIGtlcm5lbCBuZXR3b3JraW5nIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgSVBWUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBxdWlja2x5IHNjYW4gdGhlIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBJUFZTLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGZvciBkZXBsb3ltZW50IG9yIHRyb3VibGVzaG9vdGluZy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHdoaWNoIG9wdGlvbnMgYXJlIGRpcmVjdGx5IGV4cG9zZWQgdG8gdGhlIHVzZXIgdmVyc3VzIHRob3NlIGhhbmRsZWQgaW50ZXJuYWxseS4gSSdtIGV4cGVjdGluZyB0aGUgdXN1YWwgS2NvbmZpZyBjb252ZW50aW9ucywgYnV0IEkgd2FudCB0byBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGFzIHBhcnRpY3VsYXJseSBpbm5vdmF0aXZlIG9yIHByb2JsZW1hdGljIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBCYXNpY2FsbHksIEknbSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIHRoZSBJUFZTIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGluIGEgZmV3IHNlY29uZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjo1ODozNC45MjAwMzc0NDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIElQIFZpcnR1YWwgU2VydmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdG1lbnVjb25maWcgSVBfVlNcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJUCBWaXJ0dWFsIFNlcnZlciBzdXBwb3J0IHdpbGwgbGV0IHlvdSBidWlsZCBhIGhpZ2gtcGVyZm9ybWFuY2VcXG4gIDExOlxcdFxcdCAgdmlydHVhbCBzZXJ2ZXIgYmFzZWQgb24gY2x1c3RlciBvZiB0d28gb3IgbW9yZSByZWFsIHNlcnZlcnMuIFRoaXNcXG4gIDEyOlxcdFxcdCAgb3B0aW9uIG11c3QgYmUgZW5hYmxlZCBmb3IgYXQgbGVhc3Qgb25lIG9mIHRoZSBjbHVzdGVyZWQgY29tcHV0ZXJzXFxuICAxMzpcXHRcXHQgIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgaW50ZXJjZXB0aW5nIGluY29taW5nIGNvbm5lY3Rpb25zIHRvIGFcXG4gIDE0OlxcdFxcdCAgc2luZ2xlIElQIGFkZHJlc3MgYW5kIHNjaGVkdWxpbmcgdGhlbSB0byByZWFsIHNlcnZlcnMuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgVGhyZWUgcmVxdWVzdCBkaXNwYXRjaGluZyB0ZWNobmlxdWVzIGFyZSBpbXBsZW1lbnRlZCwgdGhleSBhcmVcXG4gIDE3OlxcdFxcdCAgdmlydHVhbCBzZXJ2ZXIgdmlhIE5BVCwgdmlydHVhbCBzZXJ2ZXIgdmlhIHR1bm5lbGluZyBhbmQgdmlydHVhbFxcbiAgMTg6XFx0XFx0ICBzZXJ2ZXIgdmlhIGRpcmVjdCByb3V0aW5nLiBUaGUgc2V2ZXJhbCBzY2hlZHVsaW5nIGFsZ29yaXRobXMgY2FuXFxuICAxOTpcXHRcXHQgIGJlIHVzZWQgdG8gY2hvb3NlIHdoaWNoIHNlcnZlciB0aGUgY29ubmVjdGlvbiBpcyBkaXJlY3RlZCB0byxcXG4gIDIwOlxcdFxcdCAgdGh1cyBsb2FkIGJhbGFuY2luZyBjYW4gYmUgYWNoaWV2ZWQgYW1vbmcgdGhlIHNlcnZlcnMuICBGb3IgbW9yZVxcbiAgMjE6XFx0XFx0ICBpbmZvcm1hdGlvbiBhbmQgaXRzIGFkbWluaXN0cmF0aW9uIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB0aGVcXG4gIDIyOlxcdFxcdCAgZm9sbG93aW5nIFVSTDogXFx1MDAzY2h0dHA6Ly93d3cubGludXh2aXJ0dWFsc2VydmVyLm9yZy9cXHUwMDNlLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgaW4ga2VybmVsLCBzYXkgWS4gVG8gY29tcGlsZSBpdCBhcyBhXFxuICAyNTpcXHRcXHQgIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0aWYgSVBfVlNcXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnXFx0SVBfVlNfSVBWNlxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwiSVB2NiBzdXBwb3J0IGZvciBJUFZTXFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcXG4gIDMyOlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNlxcbiAgMzM6XFx0XFx0aGVscFxcbiAgMzQ6XFx0XFx0ICBBZGQgSVB2NiBzdXBwb3J0IHRvIElQVlMuXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaWYgdW5zdXJlLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWdcXHRJUF9WU19ERUJVR1xcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgZGVidWdnaW5nXFxcIlxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGdldCBhZGRpdGlvbmFsIG1lc3NhZ2VzIHVzZWZ1bCBpblxcbiAgNDI6XFx0XFx0ICBkZWJ1Z2dpbmcgdGhlIElQIHZpcnR1YWwgc2VydmVyIGNvZGUuIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWJ1Z1xcbiAgNDM6XFx0XFx0ICBsZXZlbCBpbiAvcHJvYy9zeXMvbmV0L2lwdjQvdnMvZGVidWdfbGV2ZWxcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0Y29uZmlnXFx0SVBfVlNfVEFCX0JJVFNcXG4gIDQ2OlxcdFxcdGludCBcXFwiSVBWUyBjb25uZWN0aW9uIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuICA0NzpcXHRcXHRyYW5nZSA4IDIwIGlmICE2NEJJVFxcbiAgNDg6XFx0XFx0cmFuZ2UgOCAyNyBpZiA2NEJJVFxcbiAgNDk6XFx0XFx0ZGVmYXVsdCAxMlxcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBUaGUgSVBWUyBjb25uZWN0aW9uIGhhc2ggdGFibGUgdXNlcyB0aGUgY2hhaW5pbmcgc2NoZW1lIHRvIGhhbmRsZVxcbiAgNTI6XFx0XFx0ICBoYXNoIGNvbGxpc2lvbnMuIFVzaW5nIGEgYmlnIElQVlMgY29ubmVjdGlvbiBoYXNoIHRhYmxlIHdpbGwgZ3JlYXRseVxcbiAgNTM6XFx0XFx0ICByZWR1Y2UgY29uZmxpY3RzIHdoZW4gdGhlcmUgYXJlIGh1bmRyZWRzIG9mIHRob3VzYW5kcyBvZiBjb25uZWN0aW9uc1xcbiAgNTQ6XFx0XFx0ICBpbiB0aGUgaGFzaCB0YWJsZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBOb3RlIHRoZSB0YWJsZSBzaXplIG11c3QgYmUgcG93ZXIgb2YgMi4gVGhlIHRhYmxlIHNpemUgd2lsbCBiZSB0aGVcXG4gIDU3OlxcdFxcdCAgdmFsdWUgb2YgMiB0byB0aGUgeW91ciBpbnB1dCBudW1iZXIgcG93ZXIuIFRoZSBudW1iZXIgdG8gY2hvb3NlIGlzXFxuICA1ODpcXHRcXHQgIGZyb20gOCB0byAyNyBmb3IgNjRCSVQoMjAgb3RoZXJ3aXNlKSwgdGhlIGRlZmF1bHQgbnVtYmVyIGlzIDEyLFxcbiAgNTk6XFx0XFx0ICB3aGljaCBtZWFucyB0aGUgdGFibGUgc2l6ZSBpcyA0MDk2LiBEb24ndCBpbnB1dCB0aGUgbnVtYmVyIHRvb1xcbiAgNjA6XFx0XFx0ICBzbWFsbCwgb3RoZXJ3aXNlIHlvdSB3aWxsIGxvc2UgcGVyZm9ybWFuY2Ugb24gaXQuIFlvdSBjYW4gYWRhcHQgdGhlXFxuICA2MTpcXHRcXHQgIHRhYmxlIHNpemUgeW91cnNlbGYsIGFjY29yZGluZyB0byB5b3VyIHZpcnR1YWwgc2VydmVyIGFwcGxpY2F0aW9uLlxcbiAgNjI6XFx0XFx0ICBJdCBpcyBnb29kIHRvIHNldCB0aGUgdGFibGUgc2l6ZSBub3QgZmFyIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mXFxuICA2MzpcXHRcXHQgIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQgbXVsdGlwbHlpbmcgYXZlcmFnZSBsYXN0aW5nIHRpbWUgb2ZcXG4gIDY0OlxcdFxcdCAgY29ubmVjdGlvbiBpbiB0aGUgdGFibGUuICBGb3IgZXhhbXBsZSwgeW91ciB2aXJ0dWFsIHNlcnZlciBnZXRzIDIwMFxcbiAgNjU6XFx0XFx0ICBjb25uZWN0aW9ucyBwZXIgc2Vjb25kLCB0aGUgY29ubmVjdGlvbiBsYXN0cyBmb3IgMjAwIHNlY29uZHMgaW5cXG4gIDY2OlxcdFxcdCAgYXZlcmFnZSBpbiB0aGUgY29ubmVjdGlvbiB0YWJsZSwgdGhlIHRhYmxlIHNpemUgc2hvdWxkIGJlIG5vdCBmYXJcXG4gIDY3OlxcdFxcdCAgbGVzcyB0aGFuIDIwMHgyMDAsIGl0IGlzIGdvb2QgdG8gc2V0IHRoZSB0YWJsZSBzaXplIDMyNzY4ICgyKioxNSkuXFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdCAgQW5vdGhlciBub3RlIHRoYXQgZWFjaCBjb25uZWN0aW9uIG9jY3VwaWVzIDEyOCBieXRlcyBlZmZlY3RpdmVseSBhbmRcXG4gIDcwOlxcdFxcdCAgZWFjaCBoYXNoIGVudHJ5IHVzZXMgOCBieXRlcywgc28geW91IGNhbiBlc3RpbWF0ZSBob3cgbXVjaCBtZW1vcnkgaXNcXG4gIDcxOlxcdFxcdCAgbmVlZGVkIGZvciB5b3VyIGJveC5cXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0ICBZb3UgY2FuIG92ZXJ3cml0ZSB0aGlzIG51bWJlciBzZXR0aW5nIGNvbm5fdGFiX2JpdHMgbW9kdWxlIHBhcmFtZXRlclxcbiAgNzQ6XFx0XFx0ICBvciBieSBhcHBlbmRpbmcgaXBfdnMuY29ubl90YWJfYml0cz0/IHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIGlmXFxuICA3NTpcXHRcXHQgIElQIFZTIHdhcyBjb21waWxlZCBidWlsdC1pbi5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0Y29tbWVudCBcXFwiSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29uZmlnXFx0SVBfVlNfUFJPVE9fVENQXFxuICA4MDpcXHRcXHRib29sIFxcXCJUQ1AgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG4gIDgxOlxcdFxcdGhlbHBcXG4gIDgyOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBUQ1AgdHJhbnNwb3J0XFxuICA4MzpcXHRcXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXFxuICA4NDpcXHRcXG4gIDg1OlxcdGNvbmZpZ1xcdElQX1ZTX1BST1RPX1VEUFxcbiAgODY6XFx0XFx0Ym9vbCBcXFwiVURQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuICA4NzpcXHRcXHRoZWxwXFxuICA4ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgVURQIHRyYW5zcG9ydFxcbiAgODk6XFx0XFx0ICBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLlxcbiAgOTA6XFx0XFxuICA5MTpcXHRjb25maWdcXHRJUF9WU19QUk9UT19BSF9FU1BcXG4gIDkyOlxcdFxcdGRlZl9ib29sIElQX1ZTX1BST1RPX0VTUCB8fCBJUF9WU19QUk9UT19BSFxcbiAgOTM6XFx0XFxuICA5NDpcXHRjb25maWdcXHRJUF9WU19QUk9UT19FU1BcXG4gIDk1OlxcdFxcdGJvb2wgXFxcIkVTUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbiAgOTY6XFx0XFx0aGVscFxcbiAgOTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIEVTUCAoRW5jYXBzdWxhdGlvblxcbiAgOTg6XFx0XFx0ICBTZWN1cml0eSBQYXlsb2FkKSB0cmFuc3BvcnQgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cXG4gIDk5OlxcdFxcbiAxMDA6XFx0Y29uZmlnXFx0SVBfVlNfUFJPVE9fQUhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6MzQuOTIwMTIzNTE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDg2NDU5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSVBWUyBDb25uZWN0aW9uIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIGRvd24gd2hhdCB0aGlzIHBhdGNoIGlzIHJlYWxseSBkb2luZy4gVGhlIGNvcmUgbW9kdWxlIGlzIHVuZG91YnRlZGx5IGBJUF9WU2AsIGFuZCB3aGlsZSB3ZSBjb3VsZCBiZSBleGhhdXN0aXZlIGFuZCBpbmNsdWRlIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBmb3IgY29tcGxldGVuZXNzLCBgSVBfVlNgIGlzIHRoZSBjcml0aWNhbCBwaWVjZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBoZXJlLlxuXG5JJ3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgaXQgdG91Y2hlcyBgaXBfdnNfY29ubi5jYC4gTGV0J3MgY2xhcmlmeSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJIHJlY2FsbCB0aGVtIGJ1dCBJIHdpbGwgbWFrZSBzdXJlIEkgaGF2ZSB0aGVtIGV4YWN0bHkgcmlnaHQuIEl0J3M6IGBjb25uX3RhYl9sb2NrYCwgYGlwX3ZzX2Nvbm5faGFzaGAsIGBpcF92c19jb25uX3VubGlua2AsIGBpcF92c19jb25uX2ZpbGxfY3BvcnRgLCBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLCBhbmQgYGlwX3ZzX2JpbmRfZGVzdGAuXG5cbkkndmUgZ290IHRoZSBsaXN0LiBUaW1lIHRvIHJlZmluZSB0aGlzIGxpc3QuIGBjb25uX3RhYl9sb2NrYCBpcyBtYXJrZWQgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLCBzbyBJIGNhbiBhbG1vc3QgaWdub3JlIGl0LCBhcyBpdCBpcyBpbmxpbmVkLlxuXG5TbyB0aGUgbWFpbiBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBpcF92c19jb25uX2hhc2hgLCBgaXBfdnNfY29ubl91bmxpbmtgLCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYW5kIGBpcF92c19iaW5kX2Rlc3RgLiBJIHNob3VsZCBnaXZlIGFkZGl0aW9uYWwgY29uc2lkZXJhdGlvbiB0byBgaXBfdnNfY29ubl9oYXNoYCBhbmQgYGlwX3ZzX2Nvbm5fdW5saW5rYCwgZ2l2ZW4gdGhleSBsaWtlbHkgc2l0IG9uIHRoZSBob3QgcGF0aC4gVGhlc2UgYXJlIGNhbGxlZCBmb3IgZXZlcnkgY29ubmVjdGlvbiwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLiBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgIGlzIGNhbGxlZCB3aGVuIGEgZm9yd2FyZGluZyBtZXRob2QgY2hhbmdlczsgYGlwX3ZzX2JpbmRfZGVzdGAgaXMgY2FsbGVkIHdoZW4gYmluZGluZyBhIGRlc3RpbmF0aW9uLCBhbmQgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAgaXMgZm9yIHRoZSBjbGllbnQgcG9ydCwgc28gdGhleSBhcmUgbm90IHF1aXRlIGFzIGhvdCwgYnV0IG1vcmUgc3BlY2lmaWMuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9ucywgSSdtIGdvaW5nIHRvIGluY2x1ZGUgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCBhbmQgYGlwX3ZzX2JpbmRfZGVzdGAgYXMgdGhleSBhcmUgbW9yZSBzcGVjaWFsaXplZCBhbmQgbGlrZWx5IGltcGFjdCBzcGVjaWZpYyBjb25uZWN0aW9uIGJlaGF2aW9ycy4gYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAgaXMgYWxzbyBnb29kLlxuXG5JIHdpbGwgYWxzbyBxdWlja2x5IGNoZWNrIHdoZXRoZXIgYW55IGFyZSBgc3RhdGljYC4gYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCBpcyBzdGF0aWM7IHRoZSByZXN0IGFyZSBub3QuIFRoYXQncyBnb29kIHRvIGtub3cuIE5vdyBJJ20gcmVhZHkgdG8gcHJlc2VudCBteSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNTgsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6NTg6NDQuMTI4NzcxMDUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMDAwNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jb25uX2NoYW5nZV9md2RfbWFza1wiLFxuICAgIFwiaXBfdnNfYmluZF9kZXN0XCIsXG4gICAgXCJpcF92c19jb25uX2ZpbGxfY3BvcnRcIixcbiAgICBcImlwX3ZzX2Nvbm5faGFzaFwiLFxuICAgIFwiaXBfdnNfY29ubl91bmxpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgSVBWUyBjb25uZWN0aW9uIGhhc2hpbmcgYW5kIGxvY2tpbmcgbG9naWMsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBjaGFuZ2VzIHRvIGhvdyBkb3VibGUgaGFzaGluZyBhbmQgZm9yd2FyZGluZyBtZXRob2RzIGFyZSBoYW5kbGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19QUk9UT19UQ1BcIixcbiAgICBcIklQX1ZTX1BST1RPX1VEUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrXCIsXG4gICAgXCJpcF92c19iaW5kX2Rlc3RcIixcbiAgICBcImlwX3ZzX2Nvbm5fZmlsbF9jcG9ydFwiLFxuICAgIFwiaXBfdnNfY29ubl9oYXNoXCIsXG4gICAgXCJpcF92c19jb25uX3VubGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBJUFZTIGNvbm5lY3Rpb24gaGFzaGluZyBhbmQgbG9ja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGNoYW5nZXMgdG8gaG93IGRvdWJsZSBoYXNoaW5nIGFuZCBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIGhhbmRsZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdkpv[1] Phase: Succeeded StartedAt: 2026-07-02 02:59:14 +0000 UTC FinishedAt: 2026-07-02 02:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 02:59:14 +0000 UTC FinishedAt: 2026-07-02 02:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2] Phase: Succeeded StartedAt: 2026-07-02 02:59:14 +0000 UTC FinishedAt: 2026-07-02 06:59:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 02:59:14 +0000 UTC FinishedAt: 2026-07-02 06:59:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 02:59:14 +0000 UTC FinishedAt: 2026-07-02 02:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 02:59:14 +0000 UTC FinishedAt: 2026-07-02 02:59:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowqdkpv/series-workflowqdkpv-convert-artifact-2770329176/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 02:59:34 +0000 UTC FinishedAt: 2026-07-02 03:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 02:59:34 +0000 UTC FinishedAt: 2026-07-02 03:27:23 +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:*e6837513-bb9c-46ac-9fbd-5e2f66964edd,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-workflowqdkpv/series-workflowqdkpv-convert-artifact-2770329176/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": "ad6a0b48-2cfd-4bce-ab31-e87267db9149", "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-workflowqdkpv/series-workflowqdkpv-build-action-1695315598/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 02:59:34 +0000 UTC FinishedAt: 2026-07-02 03:26:58 +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:*e6837513-bb9c-46ac-9fbd-5e2f66964edd,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-workflowqdkpv/series-workflowqdkpv-convert-artifact-2770329176/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": "ad6a0b48-2cfd-4bce-ab31-e87267db9149", "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-workflowqdkpv/series-workflowqdkpv-build-action-1695315598/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 03:27:23 +0000 UTC FinishedAt: 2026-07-02 03:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 03:27:23 +0000 UTC FinishedAt: 2026-07-02 03:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 03:27:23 +0000 UTC FinishedAt: 2026-07-02 03:27:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 03:27:23 +0000 UTC FinishedAt: 2026-07-02 03:27:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowqdkpv/series-workflowqdkpv-convert-artifact-1147420607/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 03:27:33 +0000 UTC FinishedAt: 2026-07-02 03:29:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 03:27:33 +0000 UTC FinishedAt: 2026-07-02 03:29:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ad6a0b48-2cfd-4bce-ab31-e87267db9149,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-workflowqdkpv/series-workflowqdkpv-build-action-1695315598/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-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 03:29:49 +0000 UTC FinishedAt: 2026-07-02 03:29:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 03:29:49 +0000 UTC FinishedAt: 2026-07-02 03:29:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 03:29:49 +0000 UTC FinishedAt: 2026-07-02 03:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 03:29:49 +0000 UTC FinishedAt: 2026-07-02 03:55:10 +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:*e6837513-bb9c-46ac-9fbd-5e2f66964edd,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-workflowqdkpv/series-workflowqdkpv-convert-artifact-1147420607/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": "d11cafc3-e6db-46a8-8b4e-8de128536523", "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-workflowqdkpv/series-workflowqdkpv-build-action-2002404307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 03:29:49 +0000 UTC FinishedAt: 2026-07-02 03:53:32 +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:*e6837513-bb9c-46ac-9fbd-5e2f66964edd,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-workflowqdkpv/series-workflowqdkpv-convert-artifact-1147420607/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": "d11cafc3-e6db-46a8-8b4e-8de128536523", "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-workflowqdkpv/series-workflowqdkpv-build-action-2002404307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 03:55:10 +0000 UTC FinishedAt: 2026-07-02 03:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 03:55:10 +0000 UTC FinishedAt: 2026-07-02 03:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 03:55:10 +0000 UTC FinishedAt: 2026-07-02 03:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 03:55:10 +0000 UTC FinishedAt: 2026-07-02 03:57:16 +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:*d11cafc3-e6db-46a8-8b4e-8de128536523,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-workflowqdkpv/series-workflowqdkpv-build-action-2002404307/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-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 03:57:25 +0000 UTC FinishedAt: 2026-07-02 06:59:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 03:57:25 +0000 UTC FinishedAt: 2026-07-02 06:59:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"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:*ad6a0b48-2cfd-4bce-ab31-e87267db9149,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d11cafc3-e6db-46a8-8b4e-8de128536523,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-workflowqdkpv/series-workflowqdkpv-build-action-1695315598/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-workflowqdkpv/series-workflowqdkpv-build-action-2002404307/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 03:57:25 +0000 UTC FinishedAt: 2026-07-02 03:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 03:57:25 +0000 UTC FinishedAt: 2026-07-02 03:57:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"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-workflowqdkpv/series-workflowqdkpv-convert-artifact-252599128/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 03:57:25 +0000 UTC FinishedAt: 2026-07-02 03:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 03:57:25 +0000 UTC FinishedAt: 2026-07-02 03:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 03:57:25 +0000 UTC FinishedAt: 2026-07-02 03:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 03:57:35 +0000 UTC FinishedAt: 2026-07-02 06:59:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqdkpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport","ip_vs_conn_hash","ip_vs_conn_unlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0469d460a598d03fc85ebd97f99640e6c579e2a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP"],"series_id":"54085cdb-fd76-48f0-abeb-709525173bee","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 03:57:35 +0000 UTC FinishedAt: 2026-07-02 06:59:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ad6a0b48-2cfd-4bce-ab31-e87267db9149,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d11cafc3-e6db-46a8-8b4e-8de128536523,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-workflowqdkpv/series-workflowqdkpv-build-action-1695315598/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-workflowqdkpv/series-workflowqdkpv-build-action-2002404307/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-workflowqdkpv/series-workflowqdkpv-convert-artifact-252599128/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,}