Name: series-workflowq9h2d Phase: Succeeded StartedAt: 2026-08-18 22:53:25 +0000 UTC FinishedAt: 2026-08-19 02:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[0] Phase: Succeeded StartedAt: 2026-08-18 22:53:25 +0000 UTC FinishedAt: 2026-08-18 22:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 22:53:25 +0000 UTC FinishedAt: 2026-08-18 22:58:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a3dee9bb902ee4357fa02e49b415d7724ee0140a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_SKBMOD", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a3dee9bb902ee4357fa02e49b415d7724ee0140a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_SKBMOD", "NET_CLS_ACT" ], "series_id": "0b91ff46-9947-4fe5-a45c-4f977fe351bb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_skbmod_act" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfU0tCTU9EJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3NrYm1vZF9hY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgYWN0X3NrYm1vZGAgd2hlcmUgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgd2FzIGluY29ycmVjdGx5IHVzZWQgdG8gZW5zdXJlIHRoZSBNQUMgaGVhZGVyIGlzIHdyaXRhYmxlLiBCZWNhdXNlIHRoZSBNQUMgaGVhZGVyIGNhbiBiZSBsb2NhdGVkIGluIHRoZSBza2IgaGVhZHJvb20gKGF0IGEgbmVnYXRpdmUgb2Zmc2V0IHJlbGF0aXZlIHRvIGBza2ItXHUwMDNlZGF0YWApLCBjYWxsaW5nIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIHdpdGgganVzdCB0aGUgaGVhZGVyIGxlbmd0aCBkb2VzIG5vdCBjb3JyZWN0bHkgdW5zaGFyZSBvciBwdWxsIHRoZSBNQUMgaGVhZGVyIGlmIGl0JiMzOTtzIGF0IGEgbmVnYXRpdmUgb2Zmc2V0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tibW9kX2Vuc3VyZV93cml0YWJsZSgpYCB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBuZWdhdGl2ZSBvZmZzZXRzIGJ5IGNhbGxpbmcgYHNrYl9jb3coKWAgZm9yIHRoZSBoZWFkcm9vbSBhbmQgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgZm9yIHRoZSBkYXRhIHBvcnRpb24uXG5cblRoaXMgaXMgYSBmaXggZm9yIGEgc2hhcmVkIGJ1ZmZlciBtb2RpZmljYXRpb24gKHdyaXRpbmcgdG8gY2xvbmVkIHNrYiBkYXRhKSBvciBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIHNrYiBoZWFkcm9vbS4gVGhlc2UgdHlwZXMgb2YgYnVncyBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2tibW9kIHRjIGFjdGlvbiB0byBjb3JyZWN0bHkgaGFuZGxlIG5lZ2F0aXZlIG9mZnNldHMgd2hlbiBjYWxsaW5nIHNrYl9lbnN1cmVfd3JpdGFibGUuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwYWNrZXQgc2NoZWR1bGluZyBsb2dpYyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB0YyBuZXRsaW5rIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcwNDZkMmQyMjA1OWJlZGE1NGQ1ZTNjYzliMWI1ZTYwMDZhZDkwMDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjo1Njo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jIGIvbmV0L3NjaGVkL2FjdF9za2Jtb2QuY1xuaW5kZXggYTQ2NGIwYTNjMWI4MS4uODVmNGVkMDI5MWI1MSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbkBAIC0yMiwxMyAmIzQzOzIyLDI0IEBAXG4gXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9za2Jtb2Rfb3BzO1xuIFxuJiM0MztzdGF0aWMgaW50IHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgaW50IGxlbilcbiYjNDM7e1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGlmIChza2JfY293KHNrYiwgLW9mZnNldCkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0aWYgKG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIDApXG4mIzQzO1x0XHRcdHJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICYjNDM7IGxlbik7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQgJiM0MzsgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcylcbiB7XG4gXHRzdHJ1Y3QgdGNmX3NrYm1vZCAqZCA9IHRvX3NrYm1vZChhKTtcbiBcdHN0cnVjdCB0Y2Zfc2tibW9kX3BhcmFtcyAqcDtcbi1cdGludCBtYXhfZWRpdF9sZW4sIGVycjtcbiBcdHU2NCBmbGFncztcbiBcbiBcdHRjZl9sYXN0dXNlX3VwZGF0ZShcdTAwMjZkLVx1MDAzZXRjZl90bSk7XG5AQCAtMzgsNyAmIzQzOzQ5LDYgQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAodW5saWtlbHkocC1cdTAwM2VhY3Rpb24gPT0gVENfQUNUX1NIT1QpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4tXHRtYXhfZWRpdF9sZW4gPSBza2JfbWFjX2hlYWRlcl9sZW4oc2tiKTtcbiBcdGZsYWdzID0gcC1cdTAwM2VmbGFncztcbiBcbiBcdC8qIHRjZl9za2Jtb2RfaW5pdCgpIGd1YXJhbnRlZXMgXCYjMzQ7ZmxhZ3NcJiMzNDsgdG8gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5AQCAtNTIsMTkgJiM0Mzs2MiwyMCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0c3dpdGNoIChza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkge1xuIFx0XHRjYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKTpcbiBcdFx0Y2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KTpcbi1cdFx0XHRtYXhfZWRpdF9sZW4gJiM0Mzs9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbiYjNDM7XHRcdFx0aWYgKHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKSlcbiYjNDM7XHRcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdH0gZWxzZSBpZiAoIXNrYi1cdTAwM2VkZXYgfHwgc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUikge1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXhfZWRpdF9sZW4pO1xuLVx0aWYgKHVubGlrZWx5KGVycikpIC8qIGJlc3QgcG9saWN5IGlzIHRvIGRyb3Agb24gdGhlIGZsb29yICovXG4tXHRcdGdvdG8gZHJvcDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCFza2ItXHUwMDNlZGV2IHx8IHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfRVRIRVIpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdFx0aWYgKHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2JfbWFjX29mZnNldChza2IpLCBFVEhfSExFTikpXG4mIzQzO1x0XHRcdGdvdG8gZHJvcDtcbiYjNDM7XHR9XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFNLQk1PRF9GX0RNQUMpXG4gXHRcdGV0aGVyX2FkZHJfY29weShldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0LCBwLVx1MDAzZWV0aF9kc3QpO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JNT0RfRl9TTUFDKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQUNUX1NLQk1PRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9za2Jtb2RfYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza2Jtb2QgdGMgYWN0aW9uIHRvIGNvcnJlY3RseSBoYW5kbGUgbmVnYXRpdmUgb2Zmc2V0cyB3aGVuIGNhbGxpbmcgc2tiX2Vuc3VyZV93cml0YWJsZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhY2tldCBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHRjIG5ldGxpbmsgaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzA0NmQyZDIyMDU5YmVkYTU0ZDVlM2NjOWIxYjVlNjAwNmFkOTAwMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDIyOjU2OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9za2Jtb2QuYyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmMKaW5kZXggYTQ2NGIwYTNjMWI4MS4uODVmNGVkMDI5MWI1MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9za2Jtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jCkBAIC0yMiwxMyAmIzQzOzIyLDI0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2tibW9kX29wczsKIAomIzQzO3N0YXRpYyBpbnQgc2tibW9kX2Vuc3VyZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKQomIzQzO3sKJiM0MzsJaWYgKG9mZnNldCAmbHQ7IDApIHsKJiM0MzsJCWlmIChza2JfY293KHNrYiwgLW9mZnNldCkpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlpZiAob2Zmc2V0ICYjNDM7IGxlbiAmZ3Q7IDApCiYjNDM7CQkJcmV0dXJuIHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQgJiM0MzsgbGVuKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICYjNDM7IGxlbik7CiYjNDM7fQomIzQzOwogVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCQkJCSAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKIHsKIAlzdHJ1Y3QgdGNmX3NrYm1vZCAqZCA9IHRvX3NrYm1vZChhKTsKIAlzdHJ1Y3QgdGNmX3NrYm1vZF9wYXJhbXMgKnA7Ci0JaW50IG1heF9lZGl0X2xlbiwgZXJyOwogCXU2NCBmbGFnczsKIAogCXRjZl9sYXN0dXNlX3VwZGF0ZSgmYW1wO2QtJmd0O3RjZl90bSk7CkBAIC0zOCw3ICYjNDM7NDksNiBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAodW5saWtlbHkocC0mZ3Q7YWN0aW9uID09IFRDX0FDVF9TSE9UKSkKIAkJZ290byBkcm9wOwogCi0JbWF4X2VkaXRfbGVuID0gc2tiX21hY19oZWFkZXJfbGVuKHNrYik7CiAJZmxhZ3MgPSBwLSZndDtmbGFnczsKIAogCS8qIHRjZl9za2Jtb2RfaW5pdCgpIGd1YXJhbnRlZXMgJiMzNDtmbGFncyYjMzQ7IHRvIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgpAQCAtNTIsMTkgJiM0Mzs2MiwyMCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3dpdGNoIChza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkgewogCQljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKLQkJCW1heF9lZGl0X2xlbiAmIzQzOz0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpOwomIzQzOwkJCWlmIChza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYiksCiYjNDM7CQkJCQkJICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKSkKJiM0MzsJCQkJZ290byBkcm9wOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIG91dDsKIAkJfQotCX0gZWxzZSBpZiAoIXNrYi0mZ3Q7ZGV2IHx8IHNrYi0mZ3Q7ZGV2LSZndDt0eXBlICE9IEFSUEhSRF9FVEhFUikgewotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWF4X2VkaXRfbGVuKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgLyogYmVzdCBwb2xpY3kgaXMgdG8gZHJvcCBvbiB0aGUgZmxvb3IgKi8KLQkJZ290byBkcm9wOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFza2ItJmd0O2RldiB8fCBza2ItJmd0O2Rldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfRVRIRVIpCiYjNDM7CQkJZ290byBvdXQ7CiAKJiM0MzsJCWlmIChza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHNrYiwgc2tiX21hY19vZmZzZXQoc2tiKSwgRVRIX0hMRU4pKQomIzQzOwkJCWdvdG8gZHJvcDsKJiM0MzsJfQogCWlmIChmbGFncyAmYW1wOyBTS0JNT0RfRl9ETUFDKQogCQlldGhlcl9hZGRyX2NvcHkoZXRoX2hkcihza2IpLSZndDtoX2Rlc3QsIHAtJmd0O2V0aF9kc3QpOwogCWlmIChmbGFncyAmYW1wOyBTS0JNT0RfRl9TTUFDKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0tCTU9EIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSBtb2RpZmljYXRpb24gaW4gYG5ldC9zY2hlZC9hY3Rfc2tibW9kLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgYSBuZXcgZnVuY3Rpb246IGBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlYC4gSG1tLCBhbmQgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gYHRjZl9za2Jtb2RfYWN0YC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgSSYjMzk7bSBiZXR0aW5nIHRoaXMgcmVsYXRlcyB0byBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBTdHJlYW0gQ29udHJvbCBCbG9jaywgb3IgU0tCLCB3aXRoIHRoZSBgc2tibW9kYCB0cmFmZmljIGNvbnRyb2wgKHRjKSBhY3Rpb24uCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHJlZmluZSBob3cgd2UgY2FsbCBgc2tiX2Vuc3VyZV93cml0YWJsZWAuIFRoZSBjbHVlIGlzIGluIHRoZSBoYW5kbGluZyBvZiB0aG9zZSBuZWdhdGl2ZSBvZmZzZXRzLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzaWduIG9mIGlzc3VlcyByZWxhdGVkIHRvIGBza2JfbWFjX29mZnNldChza2IpYCBvciBgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIHBvdGVudGlhbGx5IHJldHVybmluZyBuZWdhdGl2ZSB2YWx1ZXMuIFRoYXQgY291bGQgaGFwcGVuIGluIGVkZ2UgY2FzZXMgb3Igd2l0aCBtYWxmb3JtZWQgcGFja2V0cy4gVGhpcyBzdWdnZXN0cyBhIHN1YnRsZSBidWcgZml4IG9yIG1heWJlIGV2ZW4gYSBiZWhhdmlvciBjaGFuZ2Ugd2l0aGluIHRoZSBgc2tibW9kYCBhY3Rpb24gaXRzZWxmLgoKVGltZSB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9hY3Rfc2tibW9kLmNgIGFuZCBpdHMgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbmV3IGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLCBhbmQgaG93IGl0IGlzIGJlaW5nIHVzZWQgaW4gY29udGV4dCwgYXMgd2VsbCBhcyB0aGUgY29uZmlnLiBIb3BlZnVsbHksIHRoaXMgZXhwbGFpbnMgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FDVF9TS0JNT0QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODY1PWNvbmZpZyBORVRfQUNUX0NUSU5GT1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg4MS1cbm5ldC9zY2hlZC9LY29uZmlnOjg4Mjpjb25maWcgTkVUX0FDVF9TS0JNT0Rcbm5ldC9zY2hlZC9LY29uZmlnLTg4My1cdHRyaXN0YXRlIFwmIzM0O3NrYiBkYXRhIG1vZGlmaWNhdGlvbiBhY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYE5FVF9BQ1RfU0tCTU9EYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBORVRfQUNUX1NLQk1PRGAuIEl0JiMzOTtzIGEga2VybmVsIG1vZHVsZSwgd2hpY2ggaW1tZWRpYXRlbHkgbWVhbnMgSSBoYXZlIHRvIGJlIGNhcmVmdWwg4oCTIHRoZXNlIHRoaW5ncyBjYW4gYmUgdHJpY2t5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0IHJlbGllcyBvbiwgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBwb3RlbnRpYWxseSBhZmZlY3RlZCBieSBpdCwgYW5kIHdoYXQgbXkgb3B0aW9ucyBhcmUgaWYgaXQmIzM5O3Mgbm90IGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBEZXBlbmRlbmN5IGFuYWx5c2lzIGlzIGtleSBoZXJlLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gU28sIGxldCYjMzk7cyBzdGFydCBieSBtZXRob2RpY2FsbHkgdHJhY2luZyBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIG1vZHVsZXMgb3Iga2VybmVsIGZlYXR1cmVzIGlzIGl0IHB1bGxpbmcgaW4/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuLCBpZiBuZWNlc3NhcnksIEkmIzM5O2xsIGdvIGRlZXBlciB0byBsb29rIGF0IHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhpcyBzaG91bGQgdGVsbCBtZSBob3cgdGlnaHRseSBjb3VwbGVkIGl0IGlzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGluZm9ybSBob3cgZWFzaWx5IGl0IGNhbiBiZSBtb2RpZmllZCwgcmVtb3ZlZCwgb3IgZGVidWdnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX0FDVF9TS0JNT0QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz04NjU9Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXG4tLVxubmV0L3NjaGVkL0tjb25maWctODgxLVxubmV0L3NjaGVkL0tjb25maWc6ODgyOmNvbmZpZyBORVRfQUNUX1NLQk1PRFxubmV0L3NjaGVkL0tjb25maWctODgzLVx0dHJpc3RhdGUgXCYjMzQ7c2tiIGRhdGEgbW9kaWZpY2F0aW9uIGFjdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG5ldC9zY2hlZC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDg4Mi4gSSYjMzk7bSBob3BpbmcgdGhhdCBhcmVhIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIG92ZXJ2aWV3IG9mIHRoZSByZWxldmFudCBvcHRpb25zIG9yIGZlYXR1cmVzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgb3IgYXQgbGVhc3QgcG9pbnQgbWUgdG93YXJkcyB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBJdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBoaWdoLWxldmVsIHZpZXcgYmVmb3JlIEkgZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIHVuZGVybHlpbmcgY29kZS4gRnJvbSB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVzY3JpcHRpb25zIG9mIG9wdGlvbnMgcmVsYXRlZCB0byAqW2luc2VydCBleHBlY3RlZCB0b3BpYyBiYXNlZCBvbiB0aGVpciBleHBlcnRpc2VdKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmFyZ3VtZW50ICYjMzQ7Rmlyc3RMaW5lJiMzNDsgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogJiMzNDs4NzAmIzM0OywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAmIzM0OzMwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7YXJndW1lbnQgXCYjMzQ7Rmlyc3RMaW5lXCYjMzQ7IGhhcyB3cm9uZyB0eXBlOiBnb3Qgc3RyaW5nLCB3YW50IGludCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIFRob3VnaHRzIG9uIFZhcmlhYmxlIERlY2xhcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNuaXBwZXQgb2YgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGF0IGBGaXJzdExpbmVgIGlzIGJlaW5nIGRlY2xhcmVkLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHRoaXMgdmFyaWFibGUgcmVwcmVzZW50cyBhIGxpbmUgbnVtYmVyIG9yIHNvbWUgc29ydCBvZiBvcmRpbmFsIHZhbHVlLiBHaXZlbiB0aGF0LCBpdCByZWFsbHkgc2hvdWxkIGJlIGRlY2xhcmVkIGFzIGFuIGludGVnZXIuIFVzaW5nIGFueSBvdGhlciBkYXRhIHR5cGUgY291bGQgbGVhZCB0byBpbmNvbnNpc3RlbmNpZXMgYW5kIHBvdGVudGlhbCB0eXBlLXJlbGF0ZWQgZXJyb3JzIGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgaWYgYW55IGFyaXRobWV0aWMgb3BlcmF0aW9ucywgaW5kZXhpbmcsIG9yIGNvbXBhcmlzb25zIGFyZSBpbnRlbmRlZCBvbiB0aGlzIHZhbHVlLiBBIHF1aWNrIGNoYW5nZSBoZXJlIHdpbGwgbWFrZSB0aGUgY29kZSBzaWduaWZpY2FudGx5IG1vcmUgcm9idXN0LiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIHRoZSBkZWNsYXJhdGlvbnMgb2YgdGhlIG90aGVyIHNpbWlsYXIgdmFyaWFibGVzIG5lYXJieSBhcyB3ZWxsIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgdHJhbnNmZXIgb2YgYSBjb25ubWFyayBzdG9yZWQgaW5mb3JtYXRpb24uXG4gODcxOlx0XHQgIEN1cnJlbnQgYWN0aW9ucyB0cmFuc2ZlciBjb25ubWFyayBzdG9yZWQgRFNDUCBpbnRvXG4gODcyOlx0XHQgIGlwdjQvdjYgZGlmZnNlcnYgYW5kL29yIHRvIHRyYW5zZmVyIGNvbm5tYXJrIHRvIHBhY2tldFxuIDg3MzpcdFx0ICBtYXJrLiAgQm90aCBhcmUgdXNlZnVsIGZvciByZXN0b3JpbmcgZWdyZXNzIGJhc2VkIG1hcmtzXG4gODc0Olx0XHQgIGJhY2sgb250byBpbmdyZXNzIGNvbm5lY3Rpb25zIGZvciBxZGlzYyBwcmlvcml0eSBtYXBwaW5nXG4gODc1Olx0XHQgIHB1cnBvc2VzLlxuIDg3NjpcdFxuIDg3NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDg3ODpcdFxuIDg3OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODgwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3RpbmZvLlxuIDg4MTpcdFxuIDg4MjpcdGNvbmZpZyBORVRfQUNUX1NLQk1PRFxuIDg4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7c2tiIGRhdGEgbW9kaWZpY2F0aW9uIGFjdGlvblwmIzM0O1xuIDg4NDpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDg4NTpcdFx0aGVscFxuIDg4NjpcdFx0IFNheSBZIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIHNrYiBkYXRhXG4gODg3Olx0XG4gODg4Olx0XHQgSWYgdW5zdXJlLCBzYXkgTi5cbiA4ODk6XHRcbiA4OTA6XHRcdCBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODkxOlx0XHQgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9za2Jtb2QuXG4gODkyOlx0XG4gODkzOlx0Y29uZmlnIE5FVF9BQ1RfSUZFXG4gODk0Olx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcJiMzNDtcbiA4OTU6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA4OTY6XHRcdHNlbGVjdCBORVRfSUZFXG4gODk3Olx0XHRoZWxwXG4gODk4Olx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgZm9yIHNvdXJjaW5nIGFuZCB0ZXJtaW5hdGluZyBtZXRhZGF0YVxuIDg5OTpcdFx0ICBGb3IgZGV0YWlscyByZWZlciB0byBuZXRkZXYwMSBwYXBlcjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgdGNmX3NrYm1vZF9hY3RgIEtlcm5lbCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgTkVUX0FDVF9TS0JNT0RgIG1vZHVsZSwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgaGluZ2VzIG9uIGBORVRfQ0xTX0FDVGAuIFNpbmNlIEkga25vdyBteSB3YXkgYXJvdW5kIHRoZSBrZXJuZWwsIHRoZSBwYXRjaCBtb2RpZnlpbmcgYHRjZl9za2Jtb2RfYWN0YCBpbW1lZGlhdGVseSBmbGFncyBteSBpbnRlcmVzdC4gVGhpcyBpcyBjb3JlIGB0Y2AgYWN0aW9uIGxvZ2ljLCBhbmQgSSBzZWUgcmVhbCBwb3RlbnRpYWwgZm9yIGZ1enppbmcgaGVyZS4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYHRjZl9za2Jtb2RfYWN0YCBhcyB0aGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24uIFRvIG1ha2Ugc3VyZSBteSBmdXp6aW5nIGVudmlyb25tZW50IGlzIHNldCB1cCByaWdodCwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYm90aCBgTkVUX0FDVF9TS0JNT0RgIGFuZCBgTkVUX0NMU19BQ1RgIGluIHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGVzdGluZyB0aGUgcmlnaHQgZnVuY3Rpb25hbGl0eS4KCkxldCBtZSBkb3VibGUgY2hlY2ssIHRob3VnaCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucy4gT2theSwgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGVgIGlzIHN0YXRpYywgc28gSSBjYW4gc2FmZWx5IGlnbm9yZSB0aGF0IGZvciBub3c7IGB0Y2Zfc2tibW9kX2FjdGAgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgYWN0aW9uLiBJdCYjMzk7cyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgdG8gdGVzdC4gTm93IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBgTkVUX0NMU19BQ1RgIGRlcGVuZHMgb24gYW55dGhpbmcgZWxzZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfQUNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NjkwPWNvbmZpZyBORVRfRU1BVENIX0lQVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cbm5ldC9zY2hlZC9LY29uZmlnOjcwMjpjb25maWcgTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBUcmFmZmljIFNoYXBpbmcgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUga2VybmVsJiMzOTtzIHRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbiBhcm91bmQgbGluZSA3MDIuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IGludG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIHNjaGVkdWxlciBvcHRpb25zIGFyZSBwcmVzZW50ZWQgYW5kIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0aGV5JiMzOTtyZSBlbmFibGVkLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEtub3dpbmcgdGhpcyBhcmVhIGluIHBhcnRpY3VsYXIgd2lsbCBlbmFibGUgbWUgdG8gZ3Jhc3AgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBmdXJ0aGVyIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5NTpcdFx0ICBtYXRjaGVzLlxuIDY5NjpcdFx0ICBDdXJyZW50IHN1cHBvcnRlZCBtYXRjaCBpcyBcJiMzNDtwb2xpY3lcJiMzNDsgd2hpY2ggYWxsb3dzIHBhY2tldCBjbGFzc2lmaWNhdGlvblxuIDY5NzpcdFx0ICBiYXNlZCBvbiBJUHNlYyBwb2xpY3kgdGhhdCB3YXMgdXNlZCBkdXJpbmcgZGVjYXBzdWxhdGlvblxuIDY5ODpcdFxuIDY5OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNzAwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbV9pcHQuXG4gNzAxOlx0XG4gNzAyOlx0Y29uZmlnIE5FVF9DTFNfQUNUXG4gNzAzOlx0XHRib29sIFwmIzM0O0FjdGlvbnNcJiMzNDtcbiA3MDQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNzA1Olx0XHRzZWxlY3QgTkVUX1hHUkVTU1xuIDcwNjpcdFx0aGVscFxuIDcwNzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0cmFmZmljIGNvbnRyb2wgYWN0aW9ucy4gQWN0aW9uc1xuIDcwODpcdFx0ICBnZXQgYXR0YWNoZWQgdG8gY2xhc3NpZmllcnMgYW5kIGFyZSBpbnZva2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bFxuIDcwOTpcdFx0ICBjbGFzc2lmaWNhdGlvbi4gVGhleSBhcmUgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGNsYXNzaWZpY2F0aW9uXG4gNzEwOlx0XHQgIHJlc3VsdCwgaW5zdGFudGx5IGRyb3Agb3IgcmVkaXJlY3QgcGFja2V0cywgZXRjLlxuIDcxMTpcdFxuIDcxMjpcdFx0ICBBIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBpcHJvdXRlMiBwYWNrYWdlIGlzIHJlcXVpcmVkIHRvIHVzZVxuIDcxMzpcdFx0ICBleHRlbmRlZCBtYXRjaGVzLlxuIDcxNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTA2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIE5ldHdvcmsgQ2xhc3NpZmllciBBY3RpdmF0aW9uKioKCkFscmlnaHQsIHNvIGBORVRfQ0xTX0FDVGAgaXMgY2xlYXJseSBhIGJvb2xlYW4uIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFjdGluZyBhcyBhIHN3aXRjaCBmb3IgYE5FVF9DTFNgLCBnb3QgaXQuIFRoZXJlZm9yZSwgaWYgd2UmIzM5O3JlIGVuYWJsaW5nIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBjbGFzc2lmaWVyLCBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRvIGFsc28gZW5hYmxlIHRoZSBzcGVjaWZpYyAmIzM0O3NrYm1vZCYjMzQ7IGFjdGl2YXRpb24g4oCTIGBORVRfQUNUX1NLQk1PRGAuIFRoYXQgc3luZXJneSBmZWVscyByaWdodC4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBpbnZvbHZlZCwgSSBzaG91bGQgcXVpY2tseSBqdW1wIGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBgbmV0L3NjaGVkL2FjdF9za2Jtb2QuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBvdmVybG9va2VkIGRldGFpbHMgaW4gdGhhdCBzcGVjaWZpYyBtb2R1bGUgcmVsYXRlZCB0byB0aGlzIGFjdGl2YXRpb24gZmxvdy4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIGFsbCBiYXNlcyB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBvciBjb25mbGljdHMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qIHRjZl9za2Jtb2RfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9za2Jtb2QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X3NrYm1vZC5jPTEwNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc2tibW9kX3BvbGljeVtUQ0FfU0tCTU9EX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTExMS1cbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmM6MTEyOnN0YXRpYyBpbnQgdGNmX3NrYm1vZF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYy0xMTMtXHRcdFx0ICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTIzNy1cbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmM6MjM4OnN0YXRpYyB2b2lkIHRjZl9za2Jtb2RfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYy0yMzkte1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMjQ3LVxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYzoyNDg6c3RhdGljIGludCB0Y2Zfc2tibW9kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMjQ5LVx0XHRcdCAgIGludCBiaW5kLCBpbnQgcmVmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDg0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipBbmFseXppbmcgdGhlIGB0Y2Zfc2tibW9kX2FjdGAgS2VybmVsIE1vZHVsZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoZSBgdGNmX3NrYm1vZF9hY3RgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IHRoaW5nIGJlaW5nIHRvdWNoZWQuIEkgc2VlIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYHRjZl9za2Jtb2RfYWN0YCBpdHNlbGYgYW5kIGFsc28gYWRkcyB0aGlzIGBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3by4gQmFzZWQgb24gdGhlIGRvY3VtZW50YXRpb24sIGB0Y2Zfc2tibW9kX2FjdGAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYWN0aW9uLCB3aGljaCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBmdW5jdGlvbiBpbiB0aGUgbW9kdWxlJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLgoKTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gd2hhdCB0aGUgbmV3IGZ1bmN0aW9uICpkb2VzKiwgSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgaXRzIHNjb3BlLiBJIHNob3VsZCBjaGVjayBpZiBgdGNmX3NrYm1vZF9hY3RgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSWYgaXQgaXNuJiMzOTt0IHN0YXRpYywgaXQmIzM5O3MgcG9zc2libGUgdGhpcyBjaGFuZ2UgaGFzIHdpZGVyIGltcGxpY2F0aW9ucyB0aGFuIGltbWVkaWF0ZWx5IGFwcGFyZW50LCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVW5kZXJzdGFuZGluZyB0aGUgc3RhdGljIGxpbmthZ2Ugd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHBvdGVudGlhbCBzaWRlLWVmZmVjdHMgb2YgdGhpcyBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9za2Jtb2RfYWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9za2Jtb2QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X3NrYm1vZC5jPTI1PXN0YXRpYyBpbnQgc2tibW9kX2Vuc3VyZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxuLS1cbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMzYtXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jOjM3OlRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYy0zOC1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jPTI4OT1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NrYm1vZF9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYy0yOTItXHQub3duZXJcdFx0PVx0VEhJU19NT0RVTEUsXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jOjI5MzpcdC5hY3RcdFx0PVx0dGNmX3NrYm1vZF9hY3QsXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTI5NC1cdC5kdW1wXHRcdD1cdHRjZl9za2Jtb2RfZHVtcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY4NwoJCQkJCQkJb3V0cHV0OiAxMDEKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3QoLi4uKWAuIFRoZSBgVENfSU5ESVJFQ1RfU0NPUEVgIG1hY3JvIHVzdWFsbHkgcmVzb2x2ZXMgdG8gc29tZXRoaW5nIGxpa2UgYF9fd2Vha2AsIGJ1dCB0aGUga2V5IGhlcmUgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgYHRjZl9za2Jtb2RfYWN0YCBpcyBhIHJlYWxseSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgpNeSByZWFzb25pbmc/IFdlbGwsIHRoZSBkZXNjcmlwdGlvbiBzYXlzIHRoaXMgZml4ZXMgYW4gaXNzdWUgaW4gdGhlIGBza2Jtb2RgIHRjIGFjdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBpbnZvbHZlIGBza2JfZW5zdXJlX3dyaXRhYmxlYCBhbmQgbmVnYXRpdmUgb2Zmc2V0cy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHRvdWNoZXMgY29yZSBuZXR3b3JrIHBhY2tldCBzY2hlZHVsaW5nIOKAkyBtZWFuaW5nIHRoaXMgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IHBlcmZvcm1hbmNlLiBBbmQgYmVjYXVzZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIFRDIGFjdGlvbiwgSSBrbm93IGl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgdGMgbmV0bGluayBpbnRlcmZhY2UuIFRoaXMgaXMgc29tZXRoaW5nIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHJlZ2FyZGluZyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgpCYXNlZCBvbiB0aGUgbWV0YWRhdGEsIEkgc2VlIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBgTkVUX0FDVF9TS0JNT0RgIGFuZCBgTkVUX0NMU19BQ1RgLiBUaGUgYEZvY3VzU3ltYm9sc2AgY29uZmlybXMgbXkgaW5pdGlhbCBpbnN0aW5jdCBvZiBgdGNmX3NrYm1vZF9hY3RgLiBBbmQgZmluYWxseSwgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIHRlbGxzIG1lIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBleGFtaW5hdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfU0tCTU9EJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3NrYm1vZF9hY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrYm1vZCB0YyBhY3Rpb24gdG8gY29ycmVjdGx5IGhhbmRsZSBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gY2FsbGluZyBza2JfZW5zdXJlX3dyaXRhYmxlLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGFja2V0IHNjaGVkdWxpbmcgbG9naWMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdGMgbmV0bGluayBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfU0tCTU9EJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3NrYm1vZF9hY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrYm1vZCB0YyBhY3Rpb24gdG8gY29ycmVjdGx5IGhhbmRsZSBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gY2FsbGluZyBza2JfZW5zdXJlX3dyaXRhYmxlLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGFja2V0IHNjaGVkdWxpbmcgbG9naWMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdGMgbmV0bGluayBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGFjdF9za2Jtb2RgIHdoZXJlIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIHdhcyBpbmNvcnJlY3RseSB1c2VkIHRvIGVuc3VyZSB0aGUgTUFDIGhlYWRlciBpcyB3cml0YWJsZS4gQmVjYXVzZSB0aGUgTUFDIGhlYWRlciBjYW4gYmUgbG9jYXRlZCBpbiB0aGUgc2tiIGhlYWRyb29tIChhdCBhIG5lZ2F0aXZlIG9mZnNldCByZWxhdGl2ZSB0byBgc2tiLVx1MDAzZWRhdGFgKSwgY2FsbGluZyBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3aXRoIGp1c3QgdGhlIGhlYWRlciBsZW5ndGggZG9lcyBub3QgY29ycmVjdGx5IHVuc2hhcmUgb3IgcHVsbCB0aGUgTUFDIGhlYWRlciBpZiBpdCYjMzk7cyBhdCBhIG5lZ2F0aXZlIG9mZnNldC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoKWAgd2hpY2ggY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgb2Zmc2V0cyBieSBjYWxsaW5nIGBza2JfY293KClgIGZvciB0aGUgaGVhZHJvb20gYW5kIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIGZvciB0aGUgZGF0YSBwb3J0aW9uLlxuXG5UaGlzIGlzIGEgZml4IGZvciBhIHNoYXJlZCBidWZmZXIgbW9kaWZpY2F0aW9uICh3cml0aW5nIHRvIGNsb25lZCBza2IgZGF0YSkgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIHRoZSBza2IgaGVhZHJvb20uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHdyaXRlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzA0NmQyZDIyMDU5YmVkYTU0ZDVlM2NjOWIxYjVlNjAwNmFkOTAwMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDIyOjU2OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9za2Jtb2QuYyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmMKaW5kZXggYTQ2NGIwYTNjMWI4MS4uODVmNGVkMDI5MWI1MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9za2Jtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jCkBAIC0yMiwxMyAmIzQzOzIyLDI0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2tibW9kX29wczsKIAomIzQzO3N0YXRpYyBpbnQgc2tibW9kX2Vuc3VyZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKQomIzQzO3sKJiM0MzsJaWYgKG9mZnNldCAmbHQ7IDApIHsKJiM0MzsJCWlmIChza2JfY293KHNrYiwgLW9mZnNldCkpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlpZiAob2Zmc2V0ICYjNDM7IGxlbiAmZ3Q7IDApCiYjNDM7CQkJcmV0dXJuIHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQgJiM0MzsgbGVuKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICYjNDM7IGxlbik7CiYjNDM7fQomIzQzOwogVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCQkJCSAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKIHsKIAlzdHJ1Y3QgdGNmX3NrYm1vZCAqZCA9IHRvX3NrYm1vZChhKTsKIAlzdHJ1Y3QgdGNmX3NrYm1vZF9wYXJhbXMgKnA7Ci0JaW50IG1heF9lZGl0X2xlbiwgZXJyOwogCXU2NCBmbGFnczsKIAogCXRjZl9sYXN0dXNlX3VwZGF0ZSgmYW1wO2QtJmd0O3RjZl90bSk7CkBAIC0zOCw3ICYjNDM7NDksNiBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAodW5saWtlbHkocC0mZ3Q7YWN0aW9uID09IFRDX0FDVF9TSE9UKSkKIAkJZ290byBkcm9wOwogCi0JbWF4X2VkaXRfbGVuID0gc2tiX21hY19oZWFkZXJfbGVuKHNrYik7CiAJZmxhZ3MgPSBwLSZndDtmbGFnczsKIAogCS8qIHRjZl9za2Jtb2RfaW5pdCgpIGd1YXJhbnRlZXMgJiMzNDtmbGFncyYjMzQ7IHRvIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgpAQCAtNTIsMTkgJiM0Mzs2MiwyMCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3dpdGNoIChza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkgewogCQljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKLQkJCW1heF9lZGl0X2xlbiAmIzQzOz0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpOwomIzQzOwkJCWlmIChza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYiksCiYjNDM7CQkJCQkJICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKSkKJiM0MzsJCQkJZ290byBkcm9wOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIG91dDsKIAkJfQotCX0gZWxzZSBpZiAoIXNrYi0mZ3Q7ZGV2IHx8IHNrYi0mZ3Q7ZGV2LSZndDt0eXBlICE9IEFSUEhSRF9FVEhFUikgewotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWF4X2VkaXRfbGVuKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgLyogYmVzdCBwb2xpY3kgaXMgdG8gZHJvcCBvbiB0aGUgZmxvb3IgKi8KLQkJZ290byBkcm9wOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFza2ItJmd0O2RldiB8fCBza2ItJmd0O2Rldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfRVRIRVIpCiYjNDM7CQkJZ290byBvdXQ7CiAKJiM0MzsJCWlmIChza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHNrYiwgc2tiX21hY19vZmZzZXQoc2tiKSwgRVRIX0hMRU4pKQomIzQzOwkJCWdvdG8gZHJvcDsKJiM0MzsJfQogCWlmIChmbGFncyAmYW1wOyBTS0JNT0RfRl9ETUFDKQogCQlldGhlcl9hZGRyX2NvcHkoZXRoX2hkcihza2IpLSZndDtoX2Rlc3QsIHAtJmd0O2V0aF9kc3QpOwogCWlmIChmbGFncyAmYW1wOyBTS0JNT0RfRl9TTUFDKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NgoJCQkJCQkJb3V0cHV0OiAyNTcKCQkJCQkJCXRob3VnaHRzOiAxMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2tibW9kIFBhdGNoIGZvciBNZW1vcnkgU2FmZXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2FjdF9za2Jtb2QuY2AsIHNwZWNpZmljYWxseSB0aGUgYHRjZl9za2Jtb2RfYWN0YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgYXJlIHRoZXkgaW50cm9kdWNpbmcgdGhpcyBuZXcgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGVgIGZ1bmN0aW9uPyBUaGUgZXhpc3RpbmcgYHNrYl9lbnN1cmVfd3JpdGFibGVgIHNob3VsZCBiZSBzdWZmaWNpZW50LCBzbyB3aGF0JiMzOTtzIGdvaW5nIG9uPwoKSXQgYXBwZWFycyB0aGUgcHJvYmxlbSBsaWVzIGluIGhvdyB0aGV5IHdlcmUgaGFuZGxpbmcgbmVnYXRpdmUgb2Zmc2V0cy4gVGhlIGNvZGUgbm93IGNvcnJlY3RseSBhZGRyZXNzZXMgdGhpcyBieSB1c2luZyBgc2tiX2Nvd2AgZm9yIG5lZ2F0aXZlIG9mZnNldHMgYW5kIHRoZW4gY2FsbGluZyBgc2tiX2Vuc3VyZV93cml0YWJsZWAgYXBwcm9wcmlhdGVseS4gV2FpdCwgYSBuZWdhdGl2ZSBgc2tiX21hY19vZmZzZXQoc2tiKWA/IFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gTGV0JiMzOTtzIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGUgY29kZSAqd2FzKiB3b3JraW5nLgoKVGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldCB3YXMgY2FsY3VsYXRpbmcgYG1heF9lZGl0X2xlbmAgdXNpbmcgYHNrYl9tYWNfaGVhZGVyX2xlbmAgYW5kIHBvc3NpYmx5IGBza2JfbmV0d29ya19oZWFkZXJfbGVuYC4gVGhlIGxvZ2ljIHRoZW4gY2FsbHMgYHNrYl9lbnN1cmVfd3JpdGFibGVgIHdpdGggdGhpcyBjYWxjdWxhdGVkIGxlbmd0aC4gVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IGBza2JfZW5zdXJlX3dyaXRhYmxlYCB3b3JrcyByZWxhdGl2ZSB0byBgc2tiLSZndDtkYXRhYCwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHRoZSBkYXRhIGJ1ZmZlci4gSWYgdGhlIE1BQyBoZWFkZXIgaXMgKmJlZm9yZSogYHNrYi0mZ3Q7ZGF0YWAsIG1lYW5pbmcgaXQmIzM5O3MgaW4gdGhlIGhlYWRyb29tLCBgc2tiX2Vuc3VyZV93cml0YWJsZWAgd29uJiMzOTt0IG1ha2UgdGhlIE1BQyBoZWFkZXIgd3JpdGFibGUuIEl0IHdpbGwgb25seSBlbnN1cmUgdGhlIGRhdGEgcG9ydGlvbiBpcyB3cml0YWJsZS4KClRoZSBuZXcgY29kZSYjMzk7cyB1c2Ugb2YgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGVgIHdpdGggYHNrYl9uZXR3b3JrX29mZnNldGAgYW5kIGBza2JfbWFjX29mZnNldGAgaXMgYSBmaXguIEl0IGNvcnJlY3RzIHRoZSBwcmV2aW91cyBmbGF3LiBCeSBzZXBhcmF0ZWx5IGhhbmRsaW5nIHRoZSBNQUMgYW5kIG5ldHdvcmsgaGVhZGVycywgZW5zdXJpbmcgdGhlIHdyaXRhYmlsaXR5IG9mIHRoZSBza2IgKmluY2x1ZGluZyogdGhlIGhlYWRyb29tLCB0aGUgcGF0Y2ggbm93IHByZXZlbnRzIHRoZSB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIGNvcnJ1cHRpb24gdGhhdCBjb3VsZCBvY2N1ciBkdWUgdG8gbW9kaWZ5aW5nIGEgc2hhcmVkIGJ1ZmZlci4gVGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgdXNlcyBgc2tiX2Nvd2AgYW5kIGBza2JfZW5zdXJlX3dyaXRhYmxlYCwgd2hpY2ggYXJlIGNvcnJlY3QgdG9vbHMgZm9yIHRoaXMgc2l0dWF0aW9uLgoKTm93LCBhIGtleSBxdWVzdGlvbiBmb3Igc2VjdXJpdHkgaXMgYWx3YXlzIHdoZXRoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcGxheSBoZXJlLiBUaGlzIHBhdGNoIGlzbiYjMzk7dCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSAqcGVyIHNlKi4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgc2hhcmVkIG1lbW9yeSBpc24mIzM5O3QgbW9kaWZpZWQuIFRoaXMgaXMgYSBzdGFuZGFyZCBza2IgY293L3Vuc2hhcmUgaXNzdWUuIFNvLCB0aGUgYnVnIGlzIGEgc2hhcmVkIG1lbW9yeSBtb2RpZmljYXRpb24sIG9yIG91dC1vZi1ib3VuZHMgd3JpdGUgaWYgdGhlIGhlYWRyb29tIHdhc24mIzM5O3QgbGFyZ2UgZW5vdWdoLCBhbHRob3VnaCBgc2tiX2Nvd2Agc2hvdWxkIGhhbmRsZSB0aGUgaGVhZHJvb20uCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIGZvciBhbnl0aGluZyB0aGF0ICpjb3VsZCogaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXZlbiBpbmRpcmVjdGx5LiBgc2tiX2Nvd2Agd2lsbCBhbGxvY2F0ZSBtZW1vcnkgaWYgaXQgbmVlZHMgdG8sIGJ1dCBpdCB3aWxsIGNvcHkgdmFsaWQgZGF0YSwgc28gdGhlIG5ldyBtZW1vcnkgc2hvdWxkIGJlIGluaXRpYWxpemVkLiBgc2tiX2Vuc3VyZV93cml0YWJsZWAgbWF5IHB1bGwgZGF0YSBmcm9tIGZyYWdtZW50cywgYnV0IHRoYXQgZGF0YSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIFNvLCBJIHNlZSBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqYmVpbmcgZXhwb3NlZCogdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuCgpOb3csIGdpdmVuIHRoZSBLTVNBTiBndWlkYW5jZToKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKVGhpcyBidWcgaXMgYSBjYXNlIG9mIHNoYXJlZCBtZW1vcnkgYmVpbmcgbW9kaWZpZWQgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgcGF0Y2ggZG9lcyBub3QgcmVsYXRlIHRvIG9yIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIGJ1dCBpdCBjYW4gYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gaWYgaXQmIzM5O3Mgb3V0LW9mLWJvdW5kcywgb3IgaXQmIzM5O3MganVzdCBhIGZ1bmN0aW9uYWwgYnVnLgoKU28sIGluIHN1bW1hcnk6IFRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYWN0X3NrYm1vZGAgd2hlcmUgYHNrYl9lbnN1cmVfd3JpdGFibGVgIHdhcyBiZWluZyBtaXN1c2VkIGFuZCBkb2VzIG5vdCBwcm90ZWN0IHRoZSBNQUMgaGVhZGVyIGlmIGl0IGlzIGluIHRoZSBza2IgaGVhZHJvb20uIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgb2Zmc2V0cywgZW5zdXJpbmcgdGhhdCB0aGUgTUFDIGhlYWRlciAoaGVhZHJvb20pIGlzIHdyaXRhYmxlIGJlZm9yZSBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgaW5mbHVlbmNlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGFjdF9za2Jtb2RgIHdoZXJlIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIHdhcyBpbmNvcnJlY3RseSB1c2VkIHRvIGVuc3VyZSB0aGUgTUFDIGhlYWRlciBpcyB3cml0YWJsZS4gQmVjYXVzZSB0aGUgTUFDIGhlYWRlciBjYW4gYmUgbG9jYXRlZCBpbiB0aGUgc2tiIGhlYWRyb29tIChhdCBhIG5lZ2F0aXZlIG9mZnNldCByZWxhdGl2ZSB0byBgc2tiLVx1MDAzZWRhdGFgKSwgY2FsbGluZyBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3aXRoIGp1c3QgdGhlIGhlYWRlciBsZW5ndGggZG9lcyBub3QgY29ycmVjdGx5IHVuc2hhcmUgb3IgcHVsbCB0aGUgTUFDIGhlYWRlciBpZiBpdCYjMzk7cyBhdCBhIG5lZ2F0aXZlIG9mZnNldC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoKWAgd2hpY2ggY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgb2Zmc2V0cyBieSBjYWxsaW5nIGBza2JfY293KClgIGZvciB0aGUgaGVhZHJvb20gYW5kIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIGZvciB0aGUgZGF0YSBwb3J0aW9uLlxuXG5UaGlzIGlzIGEgZml4IGZvciBhIHNoYXJlZCBidWZmZXIgbW9kaWZpY2F0aW9uICh3cml0aW5nIHRvIGNsb25lZCBza2IgZGF0YSkgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIHRoZSBza2IgaGVhZHJvb20uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHdyaXRlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIGBhY3Rfc2tibW9kYCB3aGVyZSBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3YXMgaW5jb3JyZWN0bHkgdXNlZCB0byBlbnN1cmUgdGhlIE1BQyBoZWFkZXIgaXMgd3JpdGFibGUuIEJlY2F1c2UgdGhlIE1BQyBoZWFkZXIgY2FuIGJlIGxvY2F0ZWQgaW4gdGhlIHNrYiBoZWFkcm9vbSAoYXQgYSBuZWdhdGl2ZSBvZmZzZXQgcmVsYXRpdmUgdG8gYHNrYi1cdTAwM2VkYXRhYCksIGNhbGxpbmcgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgd2l0aCBqdXN0IHRoZSBoZWFkZXIgbGVuZ3RoIGRvZXMgbm90IGNvcnJlY3RseSB1bnNoYXJlIG9yIHB1bGwgdGhlIE1BQyBoZWFkZXIgaWYgaXQmIzM5O3MgYXQgYSBuZWdhdGl2ZSBvZmZzZXQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKClgIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIG5lZ2F0aXZlIG9mZnNldHMgYnkgY2FsbGluZyBgc2tiX2NvdygpYCBmb3IgdGhlIGhlYWRyb29tIGFuZCBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCBmb3IgdGhlIGRhdGEgcG9ydGlvbi5cblxuVGhpcyBpcyBhIGZpeCBmb3IgYSBzaGFyZWQgYnVmZmVyIG1vZGlmaWNhdGlvbiAod3JpdGluZyB0byBjbG9uZWQgc2tiIGRhdGEpIG9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgc2tiIGhlYWRyb29tLiBUaGVzZSB0eXBlcyBvZiBidWdzIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU2OjUyLjM3NzE2MjIyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDYzNTA3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfU0tCTU9EXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9za2Jtb2RfYWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgYWN0X3NrYm1vZGAgd2hlcmUgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgd2FzIGluY29ycmVjdGx5IHVzZWQgdG8gZW5zdXJlIHRoZSBNQUMgaGVhZGVyIGlzIHdyaXRhYmxlLiBCZWNhdXNlIHRoZSBNQUMgaGVhZGVyIGNhbiBiZSBsb2NhdGVkIGluIHRoZSBza2IgaGVhZHJvb20gKGF0IGEgbmVnYXRpdmUgb2Zmc2V0IHJlbGF0aXZlIHRvIGBza2ItXFx1MDAzZWRhdGFgKSwgY2FsbGluZyBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3aXRoIGp1c3QgdGhlIGhlYWRlciBsZW5ndGggZG9lcyBub3QgY29ycmVjdGx5IHVuc2hhcmUgb3IgcHVsbCB0aGUgTUFDIGhlYWRlciBpZiBpdCdzIGF0IGEgbmVnYXRpdmUgb2Zmc2V0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tibW9kX2Vuc3VyZV93cml0YWJsZSgpYCB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBuZWdhdGl2ZSBvZmZzZXRzIGJ5IGNhbGxpbmcgYHNrYl9jb3coKWAgZm9yIHRoZSBoZWFkcm9vbSBhbmQgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgZm9yIHRoZSBkYXRhIHBvcnRpb24uXFxuXFxuVGhpcyBpcyBhIGZpeCBmb3IgYSBzaGFyZWQgYnVmZmVyIG1vZGlmaWNhdGlvbiAod3JpdGluZyB0byBjbG9uZWQgc2tiIGRhdGEpIG9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgc2tiIGhlYWRyb29tLiBUaGVzZSB0eXBlcyBvZiBidWdzIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrYm1vZCB0YyBhY3Rpb24gdG8gY29ycmVjdGx5IGhhbmRsZSBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gY2FsbGluZyBza2JfZW5zdXJlX3dyaXRhYmxlLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGFja2V0IHNjaGVkdWxpbmcgbG9naWMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdGMgbmV0bGluayBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU2OjUyLjM3NzE2ODU5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NzgxMTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcwNDZkMmQyMjA1OWJlZGE1NGQ1ZTNjYzliMWI1ZTYwMDZhZDkwMDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjI6NTY6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9za2Jtb2QuYyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcXG5pbmRleCBhNDY0YjBhM2MxYjgxLi44NWY0ZWQwMjkxYjUxIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jXFxuQEAgLTIyLDEzICsyMiwyNCBAQFxcbiBcXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9za2Jtb2Rfb3BzO1xcbiBcXG4rc3RhdGljIGludCBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4pXFxuK3tcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aWYgKHNrYl9jb3coc2tiLCAtb2Zmc2V0KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdGlmIChvZmZzZXQgKyBsZW4gXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCArIGxlbik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdHJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICsgbGVuKTtcXG4rfVxcbitcXG4gVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxcbiB7XFxuIFxcdHN0cnVjdCB0Y2Zfc2tibW9kICpkID0gdG9fc2tibW9kKGEpO1xcbiBcXHRzdHJ1Y3QgdGNmX3NrYm1vZF9wYXJhbXMgKnA7XFxuLVxcdGludCBtYXhfZWRpdF9sZW4sIGVycjtcXG4gXFx0dTY0IGZsYWdzO1xcbiBcXG4gXFx0dGNmX2xhc3R1c2VfdXBkYXRlKFxcdTAwMjZkLVxcdTAwM2V0Y2ZfdG0pO1xcbkBAIC0zOCw3ICs0OSw2IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAodW5saWtlbHkocC1cXHUwMDNlYWN0aW9uID09IFRDX0FDVF9TSE9UKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4tXFx0bWF4X2VkaXRfbGVuID0gc2tiX21hY19oZWFkZXJfbGVuKHNrYik7XFxuIFxcdGZsYWdzID0gcC1cXHUwMDNlZmxhZ3M7XFxuIFxcbiBcXHQvKiB0Y2Zfc2tibW9kX2luaXQoKSBndWFyYW50ZWVzIFxcXCJmbGFnc1xcXCIgdG8gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XFxuQEAgLTUyLDE5ICs2MiwyMCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0c3dpdGNoIChza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkge1xcbiBcXHRcXHRjYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKTpcXG4gXFx0XFx0Y2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KTpcXG4tXFx0XFx0XFx0bWF4X2VkaXRfbGVuICs9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcXG4rXFx0XFx0XFx0aWYgKHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKSlcXG4rXFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIGlmICghc2tiLVxcdTAwM2VkZXYgfHwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0VUSEVSKSB7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbi1cXHRlcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWF4X2VkaXRfbGVuKTtcXG4tXFx0aWYgKHVubGlrZWx5KGVycikpIC8qIGJlc3QgcG9saWN5IGlzIHRvIGRyb3Agb24gdGhlIGZsb29yICovXFxuLVxcdFxcdGdvdG8gZHJvcDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKCFza2ItXFx1MDAzZWRldiB8fCBza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfRVRIRVIpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0XFx0aWYgKHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2JfbWFjX29mZnNldChza2IpLCBFVEhfSExFTikpXFxuK1xcdFxcdFxcdGdvdG8gZHJvcDtcXG4rXFx0fVxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBTS0JNT0RfRl9ETUFDKVxcbiBcXHRcXHRldGhlcl9hZGRyX2NvcHkoZXRoX2hkcihza2IpLVxcdTAwM2VoX2Rlc3QsIHAtXFx1MDAzZWV0aF9kc3QpO1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBTS0JNT0RfRl9TTUFDKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1Njo1My44MjYwODE1ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNzYzMTIzMzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX1NLQk1PRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2Zfc2tibW9kX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza2Jtb2QgdGMgYWN0aW9uIHRvIGNvcnJlY3RseSBoYW5kbGUgbmVnYXRpdmUgb2Zmc2V0cyB3aGVuIGNhbGxpbmcgc2tiX2Vuc3VyZV93cml0YWJsZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhY2tldCBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHRjIG5ldGxpbmsgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MDQ2ZDJkMjIwNTliZWRhNTRkNWUzY2M5YjFiNWU2MDA2YWQ5MDAxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjI6NTY6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jIGIvbmV0L3NjaGVkL2FjdF9za2Jtb2QuY1xuaW5kZXggYTQ2NGIwYTNjMWI4MS4uODVmNGVkMDI5MWI1MSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbisrKyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbkBAIC0yMiwxMyArMjIsMjQgQEBcbiBcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NrYm1vZF9vcHM7XG4gXG4rc3RhdGljIGludCBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4pXG4re1xuK1x0aWYgKG9mZnNldCBcdTAwM2MgMCkge1xuK1x0XHRpZiAoc2tiX2Nvdyhza2IsIC1vZmZzZXQpKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRpZiAob2Zmc2V0ICsgbGVuIFx1MDAzZSAwKVxuK1x0XHRcdHJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICsgbGVuKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRyZXR1cm4gc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCArIGxlbik7XG4rfVxuK1xuIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxuIHtcbiBcdHN0cnVjdCB0Y2Zfc2tibW9kICpkID0gdG9fc2tibW9kKGEpO1xuIFx0c3RydWN0IHRjZl9za2Jtb2RfcGFyYW1zICpwO1xuLVx0aW50IG1heF9lZGl0X2xlbiwgZXJyO1xuIFx0dTY0IGZsYWdzO1xuIFxuIFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmQtXHUwMDNldGNmX3RtKTtcbkBAIC0zOCw3ICs0OSw2IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHVubGlrZWx5KHAtXHUwMDNlYWN0aW9uID09IFRDX0FDVF9TSE9UKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0bWF4X2VkaXRfbGVuID0gc2tiX21hY19oZWFkZXJfbGVuKHNrYik7XG4gXHRmbGFncyA9IHAtXHUwMDNlZmxhZ3M7XG4gXG4gXHQvKiB0Y2Zfc2tibW9kX2luaXQoKSBndWFyYW50ZWVzIFwiZmxhZ3NcIiB0byBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbkBAIC01MiwxOSArNjIsMjAgQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHN3aXRjaCAoc2tiX3Byb3RvY29sKHNrYiwgdHJ1ZSkpIHtcbiBcdFx0Y2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6XG4gXHRcdGNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6XG4tXHRcdFx0bWF4X2VkaXRfbGVuICs9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbitcdFx0XHRpZiAoc2tibW9kX2Vuc3VyZV93cml0YWJsZShza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpLFxuK1x0XHRcdFx0XHRcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSkpXG4rXHRcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdH0gZWxzZSBpZiAoIXNrYi1cdTAwM2VkZXYgfHwgc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUikge1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXhfZWRpdF9sZW4pO1xuLVx0aWYgKHVubGlrZWx5KGVycikpIC8qIGJlc3QgcG9saWN5IGlzIHRvIGRyb3Agb24gdGhlIGZsb29yICovXG4tXHRcdGdvdG8gZHJvcDtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0VUSEVSKVxuK1x0XHRcdGdvdG8gb3V0O1xuIFxuK1x0XHRpZiAoc2tibW9kX2Vuc3VyZV93cml0YWJsZShza2IsIHNrYl9tYWNfb2Zmc2V0KHNrYiksIEVUSF9ITEVOKSlcbitcdFx0XHRnb3RvIGRyb3A7XG4rXHR9XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFNLQk1PRF9GX0RNQUMpXG4gXHRcdGV0aGVyX2FkZHJfY29weShldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0LCBwLVx1MDAzZWV0aF9kc3QpO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JNT0RfRl9TTUFDKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTY6NTMuODI2MDg0ODA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2NjAwNjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNLQk1PRCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGEgbW9kaWZpY2F0aW9uIGluIGBuZXQvc2NoZWQvYWN0X3NrYm1vZC5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGEgbmV3IGZ1bmN0aW9uOiBgc2tibW9kX2Vuc3VyZV93cml0YWJsZWAuIEhtbSwgYW5kIGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gYHRjZl9za2Jtb2RfYWN0YC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgSSdtIGJldHRpbmcgdGhpcyByZWxhdGVzIHRvIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgU3RyZWFtIENvbnRyb2wgQmxvY2ssIG9yIFNLQiwgd2l0aCB0aGUgYHNrYm1vZGAgdHJhZmZpYyBjb250cm9sICh0YykgYWN0aW9uLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gcmVmaW5lIGhvdyB3ZSBjYWxsIGBza2JfZW5zdXJlX3dyaXRhYmxlYC4gVGhlIGNsdWUgaXMgaW4gdGhlIGhhbmRsaW5nIG9mIHRob3NlIG5lZ2F0aXZlIG9mZnNldHMuIFRoYXQncyBhIGNsYXNzaWMgc2lnbiBvZiBpc3N1ZXMgcmVsYXRlZCB0byBgc2tiX21hY19vZmZzZXQoc2tiKWAgb3IgYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCBwb3RlbnRpYWxseSByZXR1cm5pbmcgbmVnYXRpdmUgdmFsdWVzLiBUaGF0IGNvdWxkIGhhcHBlbiBpbiBlZGdlIGNhc2VzIG9yIHdpdGggbWFsZm9ybWVkIHBhY2tldHMuIFRoaXMgc3VnZ2VzdHMgYSBzdWJ0bGUgYnVnIGZpeCBvciBtYXliZSBldmVuIGEgYmVoYXZpb3IgY2hhbmdlIHdpdGhpbiB0aGUgYHNrYm1vZGAgYWN0aW9uIGl0c2VsZi5cblxuVGltZSB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9hY3Rfc2tibW9kLmNgIGFuZCBpdHMgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGUuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBuZXcgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQsIGFuZCBob3cgaXQgaXMgYmVpbmcgdXNlZCBpbiBjb250ZXh0LCBhcyB3ZWxsIGFzIHRoZSBjb25maWcuIEhvcGVmdWxseSwgdGhpcyBleHBsYWlucyB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTY6NTguMjkyMDk0MjczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTg5MTA4MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9BQ1RfU0tCTU9EXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTg2NT1jb25maWcgTkVUX0FDVF9DVElORk9cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg4MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4ODI6Y29uZmlnIE5FVF9BQ1RfU0tCTU9EXFxubmV0L3NjaGVkL0tjb25maWctODgzLVxcdHRyaXN0YXRlIFxcXCJza2IgZGF0YSBtb2RpZmljYXRpb24gYWN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzowMC44MTEwMTk1NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI1MzQyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX1NLQk1PRGAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBORVRfQUNUX1NLQk1PRGAuIEl0J3MgYSBrZXJuZWwgbW9kdWxlLCB3aGljaCBpbW1lZGlhdGVseSBtZWFucyBJIGhhdmUgdG8gYmUgY2FyZWZ1bCDigJMgdGhlc2UgdGhpbmdzIGNhbiBiZSB0cmlja3kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQgcmVsaWVzIG9uLCB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHBvdGVudGlhbGx5IGFmZmVjdGVkIGJ5IGl0LCBhbmQgd2hhdCBteSBvcHRpb25zIGFyZSBpZiBpdCdzIG5vdCBiZWhhdmluZyBhcyBleHBlY3RlZC4gRGVwZW5kZW5jeSBhbmFseXNpcyBpcyBrZXkgaGVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNvLCBsZXQncyBzdGFydCBieSBtZXRob2RpY2FsbHkgdHJhY2luZyBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIG1vZHVsZXMgb3Iga2VybmVsIGZlYXR1cmVzIGlzIGl0IHB1bGxpbmcgaW4/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY2llcywgYW5kIHRoZW4sIGlmIG5lY2Vzc2FyeSwgSSdsbCBnbyBkZWVwZXIgdG8gbG9vayBhdCB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgc2hvdWxkIHRlbGwgbWUgaG93IHRpZ2h0bHkgY291cGxlZCBpdCBpcyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBpbmZvcm0gaG93IGVhc2lseSBpdCBjYW4gYmUgbW9kaWZpZWQsIHJlbW92ZWQsIG9yIGRlYnVnZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MDMuOTM2MzY1Mzk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTUzMjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9BQ1RfU0tCTU9EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTg2NT1jb25maWcgTkVUX0FDVF9DVElORk9cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg4MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4ODI6Y29uZmlnIE5FVF9BQ1RfU0tCTU9EXFxubmV0L3NjaGVkL0tjb25maWctODgzLVxcdHRyaXN0YXRlIFxcXCJza2IgZGF0YSBtb2RpZmljYXRpb24gYWN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzowMy45OTc1MjY3NjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUzNTg1MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIHRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDg4Mi4gSSdtIGhvcGluZyB0aGF0IGFyZWEgd2lsbCBnaXZlIG1lIGEgY2xlYXIgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IG9wdGlvbnMgb3IgZmVhdHVyZXMgSSdtIGludGVyZXN0ZWQgaW4sIG9yIGF0IGxlYXN0IHBvaW50IG1lIHRvd2FyZHMgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSXQncyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBoaWdoLWxldmVsIHZpZXcgYmVmb3JlIEkgZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIHVuZGVybHlpbmcgY29kZS4gRnJvbSB0aGUgY29udGV4dCwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZXNjcmlwdGlvbnMgb2Ygb3B0aW9ucyByZWxhdGVkIHRvICpbaW5zZXJ0IGV4cGVjdGVkIHRvcGljIGJhc2VkIG9uIHRoZWlyIGV4cGVydGlzZV0qLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MDcuMDUxMTE3MDIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY4ODAsIkVycm9yIjoiYXJndW1lbnQgXCJGaXJzdExpbmVcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnQiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiBcIjg3MFwiLFxuICBcIkxpbmVDb3VudFwiOiBcIjMwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiYXJndW1lbnQgXFxcIkZpcnN0TGluZVxcXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjA3LjA1MTE4MDIwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTYxNjQwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgVGhvdWdodHMgb24gVmFyaWFibGUgRGVjbGFyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHNuaXBwZXQgb2YgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGF0IGBGaXJzdExpbmVgIGlzIGJlaW5nIGRlY2xhcmVkLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSdtIHByZXR0eSBzdXJlIHRoYXQgdGhpcyB2YXJpYWJsZSByZXByZXNlbnRzIGEgbGluZSBudW1iZXIgb3Igc29tZSBzb3J0IG9mIG9yZGluYWwgdmFsdWUuIEdpdmVuIHRoYXQsIGl0IHJlYWxseSBzaG91bGQgYmUgZGVjbGFyZWQgYXMgYW4gaW50ZWdlci4gVXNpbmcgYW55IG90aGVyIGRhdGEgdHlwZSBjb3VsZCBsZWFkIHRvIGluY29uc2lzdGVuY2llcyBhbmQgcG90ZW50aWFsIHR5cGUtcmVsYXRlZCBlcnJvcnMgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSBpZiBhbnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zLCBpbmRleGluZywgb3IgY29tcGFyaXNvbnMgYXJlIGludGVuZGVkIG9uIHRoaXMgdmFsdWUuIEEgcXVpY2sgY2hhbmdlIGhlcmUgd2lsbCBtYWtlIHRoZSBjb2RlIHNpZ25pZmljYW50bHkgbW9yZSByb2J1c3QuIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY2hlY2sgdGhlIGRlY2xhcmF0aW9ucyBvZiB0aGUgb3RoZXIgc2ltaWxhciB2YXJpYWJsZXMgbmVhcmJ5IGFzIHdlbGwgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODEwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjEwLjcwNzM0NzQ3OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODcwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyB0cmFuc2ZlciBvZiBhIGNvbm5tYXJrIHN0b3JlZCBpbmZvcm1hdGlvbi5cXG4gODcxOlxcdFxcdCAgQ3VycmVudCBhY3Rpb25zIHRyYW5zZmVyIGNvbm5tYXJrIHN0b3JlZCBEU0NQIGludG9cXG4gODcyOlxcdFxcdCAgaXB2NC92NiBkaWZmc2VydiBhbmQvb3IgdG8gdHJhbnNmZXIgY29ubm1hcmsgdG8gcGFja2V0XFxuIDg3MzpcXHRcXHQgIG1hcmsuICBCb3RoIGFyZSB1c2VmdWwgZm9yIHJlc3RvcmluZyBlZ3Jlc3MgYmFzZWQgbWFya3NcXG4gODc0OlxcdFxcdCAgYmFjayBvbnRvIGluZ3Jlc3MgY29ubmVjdGlvbnMgZm9yIHFkaXNjIHByaW9yaXR5IG1hcHBpbmdcXG4gODc1OlxcdFxcdCAgcHVycG9zZXMuXFxuIDg3NjpcXHRcXG4gODc3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gODc4OlxcdFxcbiA4Nzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDg4MDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3RpbmZvLlxcbiA4ODE6XFx0XFxuIDg4MjpcXHRjb25maWcgTkVUX0FDVF9TS0JNT0RcXG4gODgzOlxcdFxcdHRyaXN0YXRlIFxcXCJza2IgZGF0YSBtb2RpZmljYXRpb24gYWN0aW9uXFxcIlxcbiA4ODQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA4ODU6XFx0XFx0aGVscFxcbiA4ODY6XFx0XFx0IFNheSBZIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIHNrYiBkYXRhXFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdCBJZiB1bnN1cmUsIHNheSBOLlxcbiA4ODk6XFx0XFxuIDg5MDpcXHRcXHQgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4OTE6XFx0XFx0IG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfc2tibW9kLlxcbiA4OTI6XFx0XFxuIDg5MzpcXHRjb25maWcgTkVUX0FDVF9JRkVcXG4gODk0OlxcdFxcdHRyaXN0YXRlIFxcXCJJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcXFwiXFxuIDg5NTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDg5NjpcXHRcXHRzZWxlY3QgTkVUX0lGRVxcbiA4OTc6XFx0XFx0aGVscFxcbiA4OTg6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IGZvciBzb3VyY2luZyBhbmQgdGVybWluYXRpbmcgbWV0YWRhdGFcXG4gODk5OlxcdFxcdCAgRm9yIGRldGFpbHMgcmVmZXIgdG8gbmV0ZGV2MDEgcGFwZXI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjEwLjcwNzQ4NzcwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjI0NDM5NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGB0Y2Zfc2tibW9kX2FjdGAgS2VybmVsIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgTkVUX0FDVF9TS0JNT0RgIG1vZHVsZSwgYW5kIGl0J3MgY2xlYXIgdGhhdCBpdCBoaW5nZXMgb24gYE5FVF9DTFNfQUNUYC4gU2luY2UgSSBrbm93IG15IHdheSBhcm91bmQgdGhlIGtlcm5lbCwgdGhlIHBhdGNoIG1vZGlmeWluZyBgdGNmX3NrYm1vZF9hY3RgIGltbWVkaWF0ZWx5IGZsYWdzIG15IGludGVyZXN0LiBUaGlzIGlzIGNvcmUgYHRjYCBhY3Rpb24gbG9naWMsIGFuZCBJIHNlZSByZWFsIHBvdGVudGlhbCBmb3IgZnV6emluZyBoZXJlLiBJdCdzIGEgcHJpbWUgdGFyZ2V0LlxuXG5JJ20gemVyb2luZyBpbiBvbiBgdGNmX3NrYm1vZF9hY3RgIGFzIHRoZSBwcmltYXJ5IHN5bWJvbCB0byBmb2N1cyBvbi4gVG8gbWFrZSBzdXJlIG15IGZ1enppbmcgZW52aXJvbm1lbnQgaXMgc2V0IHVwIHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGJvdGggYE5FVF9BQ1RfU0tCTU9EYCBhbmQgYE5FVF9DTFNfQUNUYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGVzdGluZyB0aGUgcmlnaHQgZnVuY3Rpb25hbGl0eS5cblxuTGV0IG1lIGRvdWJsZSBjaGVjaywgdGhvdWdoLCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgZnVuY3Rpb25zLiBPa2F5LCBgc2tibW9kX2Vuc3VyZV93cml0YWJsZWAgaXMgc3RhdGljLCBzbyBJIGNhbiBzYWZlbHkgaWdub3JlIHRoYXQgZm9yIG5vdzsgYHRjZl9za2Jtb2RfYWN0YCBsb29rcyBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoZSBhY3Rpb24uIEl0J3MgdGhlIHByaW1hcnkgaW50ZXJmYWNlIHRvIHRlc3QuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYE5FVF9DTFNfQUNUYCBkZXBlbmRzIG9uIGFueXRoaW5nIGVsc2UgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzoxNS4zMzE5MzAyM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzMzEyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9DTFNfQUNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTY5MD1jb25maWcgTkVUX0VNQVRDSF9JUFRcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDI6Y29uZmlnIE5FVF9DTFNfQUNUXFxubmV0L3NjaGVkL0tjb25maWctNzAzLVxcdGJvb2wgXFxcIkFjdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjE1LjM5NTI2NzI1NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE1ODI5OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBUcmFmZmljIFNoYXBpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGtlcm5lbCdzIHRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDcwMi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgaW50byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2NoZWR1bGVyIG9wdGlvbnMgYXJlIHByZXNlbnRlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gSSdtIGhvcGluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCBob3cgdGhleSdyZSBlbmFibGVkLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEtub3dpbmcgdGhpcyBhcmVhIGluIHBhcnRpY3VsYXIgd2lsbCBlbmFibGUgbWUgdG8gZ3Jhc3AgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBmdXJ0aGVyIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzoxOC4zMTExMDAwNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5NTpcXHRcXHQgIG1hdGNoZXMuXFxuIDY5NjpcXHRcXHQgIEN1cnJlbnQgc3VwcG9ydGVkIG1hdGNoIGlzIFxcXCJwb2xpY3lcXFwiIHdoaWNoIGFsbG93cyBwYWNrZXQgY2xhc3NpZmljYXRpb25cXG4gNjk3OlxcdFxcdCAgYmFzZWQgb24gSVBzZWMgcG9saWN5IHRoYXQgd2FzIHVzZWQgZHVyaW5nIGRlY2Fwc3VsYXRpb25cXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDcwMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbV9pcHQuXFxuIDcwMTpcXHRcXG4gNzAyOlxcdGNvbmZpZyBORVRfQ0xTX0FDVFxcbiA3MDM6XFx0XFx0Ym9vbCBcXFwiQWN0aW9uc1xcXCJcXG4gNzA0OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDcwNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTU1xcbiA3MDY6XFx0XFx0aGVscFxcbiA3MDc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0cmFmZmljIGNvbnRyb2wgYWN0aW9ucy4gQWN0aW9uc1xcbiA3MDg6XFx0XFx0ICBnZXQgYXR0YWNoZWQgdG8gY2xhc3NpZmllcnMgYW5kIGFyZSBpbnZva2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bFxcbiA3MDk6XFx0XFx0ICBjbGFzc2lmaWNhdGlvbi4gVGhleSBhcmUgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGNsYXNzaWZpY2F0aW9uXFxuIDcxMDpcXHRcXHQgIHJlc3VsdCwgaW5zdGFudGx5IGRyb3Agb3IgcmVkaXJlY3QgcGFja2V0cywgZXRjLlxcbiA3MTE6XFx0XFxuIDcxMjpcXHRcXHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXFxuIDcxMzpcXHRcXHQgIGV4dGVuZGVkIG1hdGNoZXMuXFxuIDcxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MTguMzExMjY4MjQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjUyOTA3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIENsYXNzaWZpZXIgQWN0aXZhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBORVRfQ0xTX0FDVGAgaXMgY2xlYXJseSBhIGJvb2xlYW4uIEl0J3MgZXNzZW50aWFsbHkgYWN0aW5nIGFzIGEgc3dpdGNoIGZvciBgTkVUX0NMU2AsIGdvdCBpdC4gVGhlcmVmb3JlLCBpZiB3ZSdyZSBlbmFibGluZyB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgY2xhc3NpZmllciwgaXQgbWFrZXMgcGVyZmVjdCBzZW5zZSB0byBhbHNvIGVuYWJsZSB0aGUgc3BlY2lmaWMgXCJza2Jtb2RcIiBhY3RpdmF0aW9uIOKAkyBgTkVUX0FDVF9TS0JNT0RgLiBUaGF0IHN5bmVyZ3kgZmVlbHMgcmlnaHQuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGludm9sdmVkLCBJIHNob3VsZCBxdWlja2x5IGp1bXAgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGBuZXQvc2NoZWQvYWN0X3NrYm1vZC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgb3Igb3Zlcmxvb2tlZCBkZXRhaWxzIGluIHRoYXQgc3BlY2lmaWMgbW9kdWxlIHJlbGF0ZWQgdG8gdGhpcyBhY3RpdmF0aW9uIGZsb3cuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciBhbGwgYmFzZXMgdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgY29uZmxpY3RzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjIyLjAzNjU2MjY3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzMzEwMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIHRjZl9za2Jtb2RfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9hY3Rfc2tibW9kLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9za2Jtb2QuYz0xMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHNrYm1vZF9wb2xpY3lbVENBX1NLQk1PRF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMTExLVxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmM6MTEyOnN0YXRpYyBpbnQgdGNmX3NrYm1vZF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMTEzLVxcdFxcdFxcdCAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTIzNy1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jOjIzODpzdGF0aWMgdm9pZCB0Y2Zfc2tibW9kX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYSlcXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTIzOS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTI0Ny1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jOjI0ODpzdGF0aWMgaW50IHRjZl9za2Jtb2RfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMjQ5LVxcdFxcdFxcdCAgIGludCBiaW5kLCBpbnQgcmVmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzoyMi4xMDE4OTg3MjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2ODc1MzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCBpdDpcblxuKipBbmFseXppbmcgdGhlIGB0Y2Zfc2tibW9kX2FjdGAgS2VybmVsIE1vZHVsZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGB0Y2Zfc2tibW9kX2FjdGAgZnVuY3Rpb24uIFRoYXQncyB0aGUgcHJpbWFyeSB0aGluZyBiZWluZyB0b3VjaGVkLiBJIHNlZSB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGB0Y2Zfc2tibW9kX2FjdGAgaXRzZWxmIGFuZCBhbHNvIGFkZHMgdGhpcyBgc2tibW9kX2Vuc3VyZV93cml0YWJsZWAgZnVuY3Rpb24uIFRoYXQncyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3by4gQmFzZWQgb24gdGhlIGRvY3VtZW50YXRpb24sIGB0Y2Zfc2tibW9kX2FjdGAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYWN0aW9uLCB3aGljaCB0ZWxscyBtZSBpdCdzIGxpa2VseSBhIGNyaXRpY2FsIGZ1bmN0aW9uIGluIHRoZSBtb2R1bGUncyBleGVjdXRpb24gcGF0aC5cblxuTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gd2hhdCB0aGUgbmV3IGZ1bmN0aW9uICpkb2VzKiwgSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgaXRzIHNjb3BlLiBJIHNob3VsZCBjaGVjayBpZiBgdGNmX3NrYm1vZF9hY3RgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSWYgaXQgaXNuJ3Qgc3RhdGljLCBpdCdzIHBvc3NpYmxlIHRoaXMgY2hhbmdlIGhhcyB3aWRlciBpbXBsaWNhdGlvbnMgdGhhbiBpbW1lZGlhdGVseSBhcHBhcmVudCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFVuZGVyc3RhbmRpbmcgdGhlIHN0YXRpYyBsaW5rYWdlIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzIG9mIHRoaXMgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDg0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MjYuMzcwNjU0NTgzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODkyOTM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2Zfc2tibW9kX2FjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X3NrYm1vZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3Rfc2tibW9kLmM9MjU9c3RhdGljIGludCBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4pXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTM2LVxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmM6Mzc6VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYy0zOC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jPTI4OT1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NrYm1vZF9vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTI5Mi1cXHQub3duZXJcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYzoyOTM6XFx0LmFjdFxcdFxcdD1cXHR0Y2Zfc2tibW9kX2FjdCxcXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTI5NC1cXHQuZHVtcFxcdFxcdD1cXHR0Y2Zfc2tibW9kX2R1bXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjI2LjQzOTU5MzYwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY3MTcxMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdCguLi4pYC4gVGhlIGBUQ19JTkRJUkVDVF9TQ09QRWAgbWFjcm8gdXN1YWxseSByZXNvbHZlcyB0byBzb21ldGhpbmcgbGlrZSBgX193ZWFrYCwgYnV0IHRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0J3MgKm5vdCogc3RhdGljLiBUaGF0IHRlbGxzIG1lIGB0Y2Zfc2tibW9kX2FjdGAgaXMgYSByZWFsbHkgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gd2hlbiBJJ20gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cbk15IHJlYXNvbmluZz8gV2VsbCwgdGhlIGRlc2NyaXB0aW9uIHNheXMgdGhpcyBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgYHNrYm1vZGAgdGMgYWN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGludm9sdmUgYHNrYl9lbnN1cmVfd3JpdGFibGVgIGFuZCBuZWdhdGl2ZSBvZmZzZXRzLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCB0b3VjaGVzIGNvcmUgbmV0d29yayBwYWNrZXQgc2NoZWR1bGluZyDigJMgbWVhbmluZyB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gQW5kIGJlY2F1c2Ugd2UncmUgdGFsa2luZyBhYm91dCBhIFRDIGFjdGlvbiwgSSBrbm93IGl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSB0YyBuZXRsaW5rIGludGVyZmFjZS4gVGhpcyBpcyBzb21ldGhpbmcgSSdsbCBuZWVkIHRvIGtlZXAgaW4gbWluZCByZWdhcmRpbmcgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLlxuXG5CYXNlZCBvbiB0aGUgbWV0YWRhdGEsIEkgc2VlIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBgTkVUX0FDVF9TS0JNT0RgIGFuZCBgTkVUX0NMU19BQ1RgLiBUaGUgYEZvY3VzU3ltYm9sc2AgY29uZmlybXMgbXkgaW5pdGlhbCBpbnN0aW5jdCBvZiBgdGNmX3NrYm1vZF9hY3RgLiBBbmQgZmluYWxseSwgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIHRlbGxzIG1lIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBleGFtaW5hdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY4NywiT3V0cHV0VG9rZW5zIjoxMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MzEuMzA2NzY3ODIyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNTQzMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX1NLQk1PRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2Zfc2tibW9kX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza2Jtb2QgdGMgYWN0aW9uIHRvIGNvcnJlY3RseSBoYW5kbGUgbmVnYXRpdmUgb2Zmc2V0cyB3aGVuIGNhbGxpbmcgc2tiX2Vuc3VyZV93cml0YWJsZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhY2tldCBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHRjIG5ldGxpbmsgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfU0tCTU9EXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9za2Jtb2RfYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrYm1vZCB0YyBhY3Rpb24gdG8gY29ycmVjdGx5IGhhbmRsZSBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gY2FsbGluZyBza2JfZW5zdXJlX3dyaXRhYmxlLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGFja2V0IHNjaGVkdWxpbmcgbG9naWMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdGMgbmV0bGluayBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjMxLjQ1NzMyMDg3NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5ODMzMzQzODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzozMS40NTgzMjk2NzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTc5ODIzMTk3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIGBhY3Rfc2tibW9kYCB3aGVyZSBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3YXMgaW5jb3JyZWN0bHkgdXNlZCB0byBlbnN1cmUgdGhlIE1BQyBoZWFkZXIgaXMgd3JpdGFibGUuIEJlY2F1c2UgdGhlIE1BQyBoZWFkZXIgY2FuIGJlIGxvY2F0ZWQgaW4gdGhlIHNrYiBoZWFkcm9vbSAoYXQgYSBuZWdhdGl2ZSBvZmZzZXQgcmVsYXRpdmUgdG8gYHNrYi1cXHUwMDNlZGF0YWApLCBjYWxsaW5nIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIHdpdGgganVzdCB0aGUgaGVhZGVyIGxlbmd0aCBkb2VzIG5vdCBjb3JyZWN0bHkgdW5zaGFyZSBvciBwdWxsIHRoZSBNQUMgaGVhZGVyIGlmIGl0J3MgYXQgYSBuZWdhdGl2ZSBvZmZzZXQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKClgIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIG5lZ2F0aXZlIG9mZnNldHMgYnkgY2FsbGluZyBgc2tiX2NvdygpYCBmb3IgdGhlIGhlYWRyb29tIGFuZCBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCBmb3IgdGhlIGRhdGEgcG9ydGlvbi5cXG5cXG5UaGlzIGlzIGEgZml4IGZvciBhIHNoYXJlZCBidWZmZXIgbW9kaWZpY2F0aW9uICh3cml0aW5nIHRvIGNsb25lZCBza2IgZGF0YSkgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIHRoZSBza2IgaGVhZHJvb20uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHdyaXRlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MDQ2ZDJkMjIwNTliZWRhNTRkNWUzY2M5YjFiNWU2MDA2YWQ5MDAxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjI6NTY6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jIGIvbmV0L3NjaGVkL2FjdF9za2Jtb2QuY1xuaW5kZXggYTQ2NGIwYTNjMWI4MS4uODVmNGVkMDI5MWI1MSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbisrKyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbkBAIC0yMiwxMyArMjIsMjQgQEBcbiBcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NrYm1vZF9vcHM7XG4gXG4rc3RhdGljIGludCBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4pXG4re1xuK1x0aWYgKG9mZnNldCBcdTAwM2MgMCkge1xuK1x0XHRpZiAoc2tiX2Nvdyhza2IsIC1vZmZzZXQpKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRpZiAob2Zmc2V0ICsgbGVuIFx1MDAzZSAwKVxuK1x0XHRcdHJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICsgbGVuKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRyZXR1cm4gc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCArIGxlbik7XG4rfVxuK1xuIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxuIHtcbiBcdHN0cnVjdCB0Y2Zfc2tibW9kICpkID0gdG9fc2tibW9kKGEpO1xuIFx0c3RydWN0IHRjZl9za2Jtb2RfcGFyYW1zICpwO1xuLVx0aW50IG1heF9lZGl0X2xlbiwgZXJyO1xuIFx0dTY0IGZsYWdzO1xuIFxuIFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmQtXHUwMDNldGNmX3RtKTtcbkBAIC0zOCw3ICs0OSw2IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHVubGlrZWx5KHAtXHUwMDNlYWN0aW9uID09IFRDX0FDVF9TSE9UKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0bWF4X2VkaXRfbGVuID0gc2tiX21hY19oZWFkZXJfbGVuKHNrYik7XG4gXHRmbGFncyA9IHAtXHUwMDNlZmxhZ3M7XG4gXG4gXHQvKiB0Y2Zfc2tibW9kX2luaXQoKSBndWFyYW50ZWVzIFwiZmxhZ3NcIiB0byBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbkBAIC01MiwxOSArNjIsMjAgQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHN3aXRjaCAoc2tiX3Byb3RvY29sKHNrYiwgdHJ1ZSkpIHtcbiBcdFx0Y2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6XG4gXHRcdGNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6XG4tXHRcdFx0bWF4X2VkaXRfbGVuICs9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbitcdFx0XHRpZiAoc2tibW9kX2Vuc3VyZV93cml0YWJsZShza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpLFxuK1x0XHRcdFx0XHRcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSkpXG4rXHRcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdH0gZWxzZSBpZiAoIXNrYi1cdTAwM2VkZXYgfHwgc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUikge1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXhfZWRpdF9sZW4pO1xuLVx0aWYgKHVubGlrZWx5KGVycikpIC8qIGJlc3QgcG9saWN5IGlzIHRvIGRyb3Agb24gdGhlIGZsb29yICovXG4tXHRcdGdvdG8gZHJvcDtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0VUSEVSKVxuK1x0XHRcdGdvdG8gb3V0O1xuIFxuK1x0XHRpZiAoc2tibW9kX2Vuc3VyZV93cml0YWJsZShza2IsIHNrYl9tYWNfb2Zmc2V0KHNrYiksIEVUSF9ITEVOKSlcbitcdFx0XHRnb3RvIGRyb3A7XG4rXHR9XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFNLQk1PRF9GX0RNQUMpXG4gXHRcdGV0aGVyX2FkZHJfY29weShldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0LCBwLVx1MDAzZWV0aF9kc3QpO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JNT0RfRl9TTUFDKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MzEuNDU4MzMxMzE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTgyMjg5MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2tibW9kIFBhdGNoIGZvciBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9hY3Rfc2tibW9kLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0Y2Zfc2tibW9kX2FjdGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5IGFyZSB0aGV5IGludHJvZHVjaW5nIHRoaXMgbmV3IGBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlYCBmdW5jdGlvbj8gVGhlIGV4aXN0aW5nIGBza2JfZW5zdXJlX3dyaXRhYmxlYCBzaG91bGQgYmUgc3VmZmljaWVudCwgc28gd2hhdCdzIGdvaW5nIG9uP1xuXG5JdCBhcHBlYXJzIHRoZSBwcm9ibGVtIGxpZXMgaW4gaG93IHRoZXkgd2VyZSBoYW5kbGluZyBuZWdhdGl2ZSBvZmZzZXRzLiBUaGUgY29kZSBub3cgY29ycmVjdGx5IGFkZHJlc3NlcyB0aGlzIGJ5IHVzaW5nIGBza2JfY293YCBmb3IgbmVnYXRpdmUgb2Zmc2V0cyBhbmQgdGhlbiBjYWxsaW5nIGBza2JfZW5zdXJlX3dyaXRhYmxlYCBhcHByb3ByaWF0ZWx5LiBXYWl0LCBhIG5lZ2F0aXZlIGBza2JfbWFjX29mZnNldChza2IpYD8gVGhhdCdzIGEgcmVkIGZsYWcuIExldCdzIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGUgY29kZSAqd2FzKiB3b3JraW5nLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0IHdhcyBjYWxjdWxhdGluZyBgbWF4X2VkaXRfbGVuYCB1c2luZyBgc2tiX21hY19oZWFkZXJfbGVuYCBhbmQgcG9zc2libHkgYHNrYl9uZXR3b3JrX2hlYWRlcl9sZW5gLiBUaGUgbG9naWMgdGhlbiBjYWxscyBgc2tiX2Vuc3VyZV93cml0YWJsZWAgd2l0aCB0aGlzIGNhbGN1bGF0ZWQgbGVuZ3RoLiBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgYHNrYl9lbnN1cmVfd3JpdGFibGVgIHdvcmtzIHJlbGF0aXZlIHRvIGBza2ItXHUwMDNlZGF0YWAsIHdoaWNoIGlzIHRoZSBzdGFydCBvZiB0aGUgZGF0YSBidWZmZXIuIElmIHRoZSBNQUMgaGVhZGVyIGlzICpiZWZvcmUqIGBza2ItXHUwMDNlZGF0YWAsIG1lYW5pbmcgaXQncyBpbiB0aGUgaGVhZHJvb20sIGBza2JfZW5zdXJlX3dyaXRhYmxlYCB3b24ndCBtYWtlIHRoZSBNQUMgaGVhZGVyIHdyaXRhYmxlLiBJdCB3aWxsIG9ubHkgZW5zdXJlIHRoZSBkYXRhIHBvcnRpb24gaXMgd3JpdGFibGUuXG5cblRoZSBuZXcgY29kZSdzIHVzZSBvZiBgc2tibW9kX2Vuc3VyZV93cml0YWJsZWAgd2l0aCBgc2tiX25ldHdvcmtfb2Zmc2V0YCBhbmQgYHNrYl9tYWNfb2Zmc2V0YCBpcyBhIGZpeC4gSXQgY29ycmVjdHMgdGhlIHByZXZpb3VzIGZsYXcuIEJ5IHNlcGFyYXRlbHkgaGFuZGxpbmcgdGhlIE1BQyBhbmQgbmV0d29yayBoZWFkZXJzLCBlbnN1cmluZyB0aGUgd3JpdGFiaWxpdHkgb2YgdGhlIHNrYiAqaW5jbHVkaW5nKiB0aGUgaGVhZHJvb20sIHRoZSBwYXRjaCBub3cgcHJldmVudHMgdGhlIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgY29ycnVwdGlvbiB0aGF0IGNvdWxkIG9jY3VyIGR1ZSB0byBtb2RpZnlpbmcgYSBzaGFyZWQgYnVmZmVyLiBUaGUgY29kZSBub3cgZXhwbGljaXRseSB1c2VzIGBza2JfY293YCBhbmQgYHNrYl9lbnN1cmVfd3JpdGFibGVgLCB3aGljaCBhcmUgY29ycmVjdCB0b29scyBmb3IgdGhpcyBzaXR1YXRpb24uXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gZm9yIHNlY3VyaXR5IGlzIGFsd2F5cyB3aGV0aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGF0IHBsYXkgaGVyZS4gVGhpcyBwYXRjaCBpc24ndCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSAqcGVyIHNlKi4gSXQncyBhYm91dCBlbnN1cmluZyBzaGFyZWQgbWVtb3J5IGlzbid0IG1vZGlmaWVkLiBUaGlzIGlzIGEgc3RhbmRhcmQgc2tiIGNvdy91bnNoYXJlIGlzc3VlLiBTbywgdGhlIGJ1ZyBpcyBhIHNoYXJlZCBtZW1vcnkgbW9kaWZpY2F0aW9uLCBvciBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoZSBoZWFkcm9vbSB3YXNuJ3QgbGFyZ2UgZW5vdWdoLCBhbHRob3VnaCBgc2tiX2Nvd2Agc2hvdWxkIGhhbmRsZSB0aGUgaGVhZHJvb20uXG5cbkxldCdzIGRvIGEgcXVpY2sgc2NhbiBmb3IgYW55dGhpbmcgdGhhdCAqY291bGQqIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV2ZW4gaW5kaXJlY3RseS4gYHNrYl9jb3dgIHdpbGwgYWxsb2NhdGUgbWVtb3J5IGlmIGl0IG5lZWRzIHRvLCBidXQgaXQgd2lsbCBjb3B5IHZhbGlkIGRhdGEsIHNvIHRoZSBuZXcgbWVtb3J5IHNob3VsZCBiZSBpbml0aWFsaXplZC4gYHNrYl9lbnN1cmVfd3JpdGFibGVgIG1heSBwdWxsIGRhdGEgZnJvbSBmcmFnbWVudHMsIGJ1dCB0aGF0IGRhdGEgc2hvdWxkIGJlIGluaXRpYWxpemVkLiBTbywgSSBzZWUgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmJlaW5nIGV4cG9zZWQqIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxuXG5Ob3csIGdpdmVuIHRoZSBLTVNBTiBndWlkYW5jZTpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuVGhpcyBidWcgaXMgYSBjYXNlIG9mIHNoYXJlZCBtZW1vcnkgYmVpbmcgbW9kaWZpZWQgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgcGF0Y2ggZG9lcyBub3QgcmVsYXRlIHRvIG9yIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIGJ1dCBpdCBjYW4gYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gaWYgaXQncyBvdXQtb2YtYm91bmRzLCBvciBpdCdzIGp1c3QgYSBmdW5jdGlvbmFsIGJ1Zy5cblxuU28sIGluIHN1bW1hcnk6IFRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYWN0X3NrYm1vZGAgd2hlcmUgYHNrYl9lbnN1cmVfd3JpdGFibGVgIHdhcyBiZWluZyBtaXN1c2VkIGFuZCBkb2VzIG5vdCBwcm90ZWN0IHRoZSBNQUMgaGVhZGVyIGlmIGl0IGlzIGluIHRoZSBza2IgaGVhZHJvb20uIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgb2Zmc2V0cywgZW5zdXJpbmcgdGhhdCB0aGUgTUFDIGhlYWRlciAoaGVhZHJvb20pIGlzIHdyaXRhYmxlIGJlZm9yZSBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgaW5mbHVlbmNlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NiwiT3V0cHV0VG9rZW5zIjoyNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6NDkuNDQwNjI2OTI2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgYWN0X3NrYm1vZGAgd2hlcmUgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgd2FzIGluY29ycmVjdGx5IHVzZWQgdG8gZW5zdXJlIHRoZSBNQUMgaGVhZGVyIGlzIHdyaXRhYmxlLiBCZWNhdXNlIHRoZSBNQUMgaGVhZGVyIGNhbiBiZSBsb2NhdGVkIGluIHRoZSBza2IgaGVhZHJvb20gKGF0IGEgbmVnYXRpdmUgb2Zmc2V0IHJlbGF0aXZlIHRvIGBza2ItXFx1MDAzZWRhdGFgKSwgY2FsbGluZyBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3aXRoIGp1c3QgdGhlIGhlYWRlciBsZW5ndGggZG9lcyBub3QgY29ycmVjdGx5IHVuc2hhcmUgb3IgcHVsbCB0aGUgTUFDIGhlYWRlciBpZiBpdCdzIGF0IGEgbmVnYXRpdmUgb2Zmc2V0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tibW9kX2Vuc3VyZV93cml0YWJsZSgpYCB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBuZWdhdGl2ZSBvZmZzZXRzIGJ5IGNhbGxpbmcgYHNrYl9jb3coKWAgZm9yIHRoZSBoZWFkcm9vbSBhbmQgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgZm9yIHRoZSBkYXRhIHBvcnRpb24uXFxuXFxuVGhpcyBpcyBhIGZpeCBmb3IgYSBzaGFyZWQgYnVmZmVyIG1vZGlmaWNhdGlvbiAod3JpdGluZyB0byBjbG9uZWQgc2tiIGRhdGEpIG9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgc2tiIGhlYWRyb29tLiBUaGVzZSB0eXBlcyBvZiBidWdzIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGFjdF9za2Jtb2RgIHdoZXJlIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIHdhcyBpbmNvcnJlY3RseSB1c2VkIHRvIGVuc3VyZSB0aGUgTUFDIGhlYWRlciBpcyB3cml0YWJsZS4gQmVjYXVzZSB0aGUgTUFDIGhlYWRlciBjYW4gYmUgbG9jYXRlZCBpbiB0aGUgc2tiIGhlYWRyb29tIChhdCBhIG5lZ2F0aXZlIG9mZnNldCByZWxhdGl2ZSB0byBgc2tiLVxcdTAwM2VkYXRhYCksIGNhbGxpbmcgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgd2l0aCBqdXN0IHRoZSBoZWFkZXIgbGVuZ3RoIGRvZXMgbm90IGNvcnJlY3RseSB1bnNoYXJlIG9yIHB1bGwgdGhlIE1BQyBoZWFkZXIgaWYgaXQncyBhdCBhIG5lZ2F0aXZlIG9mZnNldC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoKWAgd2hpY2ggY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgb2Zmc2V0cyBieSBjYWxsaW5nIGBza2JfY293KClgIGZvciB0aGUgaGVhZHJvb20gYW5kIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIGZvciB0aGUgZGF0YSBwb3J0aW9uLlxcblxcblRoaXMgaXMgYSBmaXggZm9yIGEgc2hhcmVkIGJ1ZmZlciBtb2RpZmljYXRpb24gKHdyaXRpbmcgdG8gY2xvbmVkIHNrYiBkYXRhKSBvciBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIHNrYiBoZWFkcm9vbS4gVGhlc2UgdHlwZXMgb2YgYnVncyBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowq9h2d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 22:53:25 +0000 UTC FinishedAt: 2026-08-18 22:57:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a3dee9bb902ee4357fa02e49b415d7724ee0140a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_SKBMOD", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a3dee9bb902ee4357fa02e49b415d7724ee0140a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_SKBMOD", "NET_CLS_ACT" ], "series_id": "0b91ff46-9947-4fe5-a45c-4f977fe351bb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_skbmod_act" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfU0tCTU9EJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3NrYm1vZF9hY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgYWN0X3NrYm1vZGAgd2hlcmUgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgd2FzIGluY29ycmVjdGx5IHVzZWQgdG8gZW5zdXJlIHRoZSBNQUMgaGVhZGVyIGlzIHdyaXRhYmxlLiBCZWNhdXNlIHRoZSBNQUMgaGVhZGVyIGNhbiBiZSBsb2NhdGVkIGluIHRoZSBza2IgaGVhZHJvb20gKGF0IGEgbmVnYXRpdmUgb2Zmc2V0IHJlbGF0aXZlIHRvIGBza2ItXHUwMDNlZGF0YWApLCBjYWxsaW5nIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIHdpdGgganVzdCB0aGUgaGVhZGVyIGxlbmd0aCBkb2VzIG5vdCBjb3JyZWN0bHkgdW5zaGFyZSBvciBwdWxsIHRoZSBNQUMgaGVhZGVyIGlmIGl0JiMzOTtzIGF0IGEgbmVnYXRpdmUgb2Zmc2V0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tibW9kX2Vuc3VyZV93cml0YWJsZSgpYCB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBuZWdhdGl2ZSBvZmZzZXRzIGJ5IGNhbGxpbmcgYHNrYl9jb3coKWAgZm9yIHRoZSBoZWFkcm9vbSBhbmQgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgZm9yIHRoZSBkYXRhIHBvcnRpb24uXG5cblRoaXMgaXMgYSBmaXggZm9yIGEgc2hhcmVkIGJ1ZmZlciBtb2RpZmljYXRpb24gKHdyaXRpbmcgdG8gY2xvbmVkIHNrYiBkYXRhKSBvciBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIHNrYiBoZWFkcm9vbS4gVGhlc2UgdHlwZXMgb2YgYnVncyBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2tibW9kIHRjIGFjdGlvbiB0byBjb3JyZWN0bHkgaGFuZGxlIG5lZ2F0aXZlIG9mZnNldHMgd2hlbiBjYWxsaW5nIHNrYl9lbnN1cmVfd3JpdGFibGUuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBwYWNrZXQgc2NoZWR1bGluZyBsb2dpYyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSB0YyBuZXRsaW5rIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcwNDZkMmQyMjA1OWJlZGE1NGQ1ZTNjYzliMWI1ZTYwMDZhZDkwMDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAyMjo1Njo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jIGIvbmV0L3NjaGVkL2FjdF9za2Jtb2QuY1xuaW5kZXggYTQ2NGIwYTNjMWI4MS4uODVmNGVkMDI5MWI1MSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbkBAIC0yMiwxMyAmIzQzOzIyLDI0IEBAXG4gXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9za2Jtb2Rfb3BzO1xuIFxuJiM0MztzdGF0aWMgaW50IHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgaW50IGxlbilcbiYjNDM7e1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGlmIChza2JfY293KHNrYiwgLW9mZnNldCkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0aWYgKG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIDApXG4mIzQzO1x0XHRcdHJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICYjNDM7IGxlbik7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQgJiM0MzsgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcylcbiB7XG4gXHRzdHJ1Y3QgdGNmX3NrYm1vZCAqZCA9IHRvX3NrYm1vZChhKTtcbiBcdHN0cnVjdCB0Y2Zfc2tibW9kX3BhcmFtcyAqcDtcbi1cdGludCBtYXhfZWRpdF9sZW4sIGVycjtcbiBcdHU2NCBmbGFncztcbiBcbiBcdHRjZl9sYXN0dXNlX3VwZGF0ZShcdTAwMjZkLVx1MDAzZXRjZl90bSk7XG5AQCAtMzgsNyAmIzQzOzQ5LDYgQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAodW5saWtlbHkocC1cdTAwM2VhY3Rpb24gPT0gVENfQUNUX1NIT1QpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4tXHRtYXhfZWRpdF9sZW4gPSBza2JfbWFjX2hlYWRlcl9sZW4oc2tiKTtcbiBcdGZsYWdzID0gcC1cdTAwM2VmbGFncztcbiBcbiBcdC8qIHRjZl9za2Jtb2RfaW5pdCgpIGd1YXJhbnRlZXMgXCYjMzQ7ZmxhZ3NcJiMzNDsgdG8gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5AQCAtNTIsMTkgJiM0Mzs2MiwyMCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0c3dpdGNoIChza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkge1xuIFx0XHRjYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKTpcbiBcdFx0Y2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KTpcbi1cdFx0XHRtYXhfZWRpdF9sZW4gJiM0Mzs9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbiYjNDM7XHRcdFx0aWYgKHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKSlcbiYjNDM7XHRcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdH0gZWxzZSBpZiAoIXNrYi1cdTAwM2VkZXYgfHwgc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUikge1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXhfZWRpdF9sZW4pO1xuLVx0aWYgKHVubGlrZWx5KGVycikpIC8qIGJlc3QgcG9saWN5IGlzIHRvIGRyb3Agb24gdGhlIGZsb29yICovXG4tXHRcdGdvdG8gZHJvcDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCFza2ItXHUwMDNlZGV2IHx8IHNrYi1cdTAwM2VkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfRVRIRVIpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdFx0aWYgKHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2JfbWFjX29mZnNldChza2IpLCBFVEhfSExFTikpXG4mIzQzO1x0XHRcdGdvdG8gZHJvcDtcbiYjNDM7XHR9XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFNLQk1PRF9GX0RNQUMpXG4gXHRcdGV0aGVyX2FkZHJfY29weShldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0LCBwLVx1MDAzZWV0aF9kc3QpO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JNT0RfRl9TTUFDKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQUNUX1NLQk1PRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9za2Jtb2RfYWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza2Jtb2QgdGMgYWN0aW9uIHRvIGNvcnJlY3RseSBoYW5kbGUgbmVnYXRpdmUgb2Zmc2V0cyB3aGVuIGNhbGxpbmcgc2tiX2Vuc3VyZV93cml0YWJsZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhY2tldCBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHRjIG5ldGxpbmsgaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzA0NmQyZDIyMDU5YmVkYTU0ZDVlM2NjOWIxYjVlNjAwNmFkOTAwMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDIyOjU2OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9za2Jtb2QuYyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmMKaW5kZXggYTQ2NGIwYTNjMWI4MS4uODVmNGVkMDI5MWI1MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9za2Jtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jCkBAIC0yMiwxMyAmIzQzOzIyLDI0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2tibW9kX29wczsKIAomIzQzO3N0YXRpYyBpbnQgc2tibW9kX2Vuc3VyZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKQomIzQzO3sKJiM0MzsJaWYgKG9mZnNldCAmbHQ7IDApIHsKJiM0MzsJCWlmIChza2JfY293KHNrYiwgLW9mZnNldCkpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlpZiAob2Zmc2V0ICYjNDM7IGxlbiAmZ3Q7IDApCiYjNDM7CQkJcmV0dXJuIHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQgJiM0MzsgbGVuKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICYjNDM7IGxlbik7CiYjNDM7fQomIzQzOwogVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCQkJCSAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKIHsKIAlzdHJ1Y3QgdGNmX3NrYm1vZCAqZCA9IHRvX3NrYm1vZChhKTsKIAlzdHJ1Y3QgdGNmX3NrYm1vZF9wYXJhbXMgKnA7Ci0JaW50IG1heF9lZGl0X2xlbiwgZXJyOwogCXU2NCBmbGFnczsKIAogCXRjZl9sYXN0dXNlX3VwZGF0ZSgmYW1wO2QtJmd0O3RjZl90bSk7CkBAIC0zOCw3ICYjNDM7NDksNiBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAodW5saWtlbHkocC0mZ3Q7YWN0aW9uID09IFRDX0FDVF9TSE9UKSkKIAkJZ290byBkcm9wOwogCi0JbWF4X2VkaXRfbGVuID0gc2tiX21hY19oZWFkZXJfbGVuKHNrYik7CiAJZmxhZ3MgPSBwLSZndDtmbGFnczsKIAogCS8qIHRjZl9za2Jtb2RfaW5pdCgpIGd1YXJhbnRlZXMgJiMzNDtmbGFncyYjMzQ7IHRvIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgpAQCAtNTIsMTkgJiM0Mzs2MiwyMCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3dpdGNoIChza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkgewogCQljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKLQkJCW1heF9lZGl0X2xlbiAmIzQzOz0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpOwomIzQzOwkJCWlmIChza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYiksCiYjNDM7CQkJCQkJICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKSkKJiM0MzsJCQkJZ290byBkcm9wOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIG91dDsKIAkJfQotCX0gZWxzZSBpZiAoIXNrYi0mZ3Q7ZGV2IHx8IHNrYi0mZ3Q7ZGV2LSZndDt0eXBlICE9IEFSUEhSRF9FVEhFUikgewotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWF4X2VkaXRfbGVuKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgLyogYmVzdCBwb2xpY3kgaXMgdG8gZHJvcCBvbiB0aGUgZmxvb3IgKi8KLQkJZ290byBkcm9wOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFza2ItJmd0O2RldiB8fCBza2ItJmd0O2Rldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfRVRIRVIpCiYjNDM7CQkJZ290byBvdXQ7CiAKJiM0MzsJCWlmIChza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHNrYiwgc2tiX21hY19vZmZzZXQoc2tiKSwgRVRIX0hMRU4pKQomIzQzOwkJCWdvdG8gZHJvcDsKJiM0MzsJfQogCWlmIChmbGFncyAmYW1wOyBTS0JNT0RfRl9ETUFDKQogCQlldGhlcl9hZGRyX2NvcHkoZXRoX2hkcihza2IpLSZndDtoX2Rlc3QsIHAtJmd0O2V0aF9kc3QpOwogCWlmIChmbGFncyAmYW1wOyBTS0JNT0RfRl9TTUFDKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0tCTU9EIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSBtb2RpZmljYXRpb24gaW4gYG5ldC9zY2hlZC9hY3Rfc2tibW9kLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgYSBuZXcgZnVuY3Rpb246IGBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlYC4gSG1tLCBhbmQgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gYHRjZl9za2Jtb2RfYWN0YC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgSSYjMzk7bSBiZXR0aW5nIHRoaXMgcmVsYXRlcyB0byBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBTdHJlYW0gQ29udHJvbCBCbG9jaywgb3IgU0tCLCB3aXRoIHRoZSBgc2tibW9kYCB0cmFmZmljIGNvbnRyb2wgKHRjKSBhY3Rpb24uCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHJlZmluZSBob3cgd2UgY2FsbCBgc2tiX2Vuc3VyZV93cml0YWJsZWAuIFRoZSBjbHVlIGlzIGluIHRoZSBoYW5kbGluZyBvZiB0aG9zZSBuZWdhdGl2ZSBvZmZzZXRzLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzaWduIG9mIGlzc3VlcyByZWxhdGVkIHRvIGBza2JfbWFjX29mZnNldChza2IpYCBvciBgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIHBvdGVudGlhbGx5IHJldHVybmluZyBuZWdhdGl2ZSB2YWx1ZXMuIFRoYXQgY291bGQgaGFwcGVuIGluIGVkZ2UgY2FzZXMgb3Igd2l0aCBtYWxmb3JtZWQgcGFja2V0cy4gVGhpcyBzdWdnZXN0cyBhIHN1YnRsZSBidWcgZml4IG9yIG1heWJlIGV2ZW4gYSBiZWhhdmlvciBjaGFuZ2Ugd2l0aGluIHRoZSBgc2tibW9kYCBhY3Rpb24gaXRzZWxmLgoKVGltZSB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9hY3Rfc2tibW9kLmNgIGFuZCBpdHMgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbmV3IGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLCBhbmQgaG93IGl0IGlzIGJlaW5nIHVzZWQgaW4gY29udGV4dCwgYXMgd2VsbCBhcyB0aGUgY29uZmlnLiBIb3BlZnVsbHksIHRoaXMgZXhwbGFpbnMgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FDVF9TS0JNT0QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODY1PWNvbmZpZyBORVRfQUNUX0NUSU5GT1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg4MS1cbm5ldC9zY2hlZC9LY29uZmlnOjg4Mjpjb25maWcgTkVUX0FDVF9TS0JNT0Rcbm5ldC9zY2hlZC9LY29uZmlnLTg4My1cdHRyaXN0YXRlIFwmIzM0O3NrYiBkYXRhIG1vZGlmaWNhdGlvbiBhY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYE5FVF9BQ1RfU0tCTU9EYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBORVRfQUNUX1NLQk1PRGAuIEl0JiMzOTtzIGEga2VybmVsIG1vZHVsZSwgd2hpY2ggaW1tZWRpYXRlbHkgbWVhbnMgSSBoYXZlIHRvIGJlIGNhcmVmdWwg4oCTIHRoZXNlIHRoaW5ncyBjYW4gYmUgdHJpY2t5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0IHJlbGllcyBvbiwgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBwb3RlbnRpYWxseSBhZmZlY3RlZCBieSBpdCwgYW5kIHdoYXQgbXkgb3B0aW9ucyBhcmUgaWYgaXQmIzM5O3Mgbm90IGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBEZXBlbmRlbmN5IGFuYWx5c2lzIGlzIGtleSBoZXJlLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gU28sIGxldCYjMzk7cyBzdGFydCBieSBtZXRob2RpY2FsbHkgdHJhY2luZyBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIG1vZHVsZXMgb3Iga2VybmVsIGZlYXR1cmVzIGlzIGl0IHB1bGxpbmcgaW4/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuLCBpZiBuZWNlc3NhcnksIEkmIzM5O2xsIGdvIGRlZXBlciB0byBsb29rIGF0IHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhpcyBzaG91bGQgdGVsbCBtZSBob3cgdGlnaHRseSBjb3VwbGVkIGl0IGlzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGluZm9ybSBob3cgZWFzaWx5IGl0IGNhbiBiZSBtb2RpZmllZCwgcmVtb3ZlZCwgb3IgZGVidWdnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX0FDVF9TS0JNT0QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz04NjU9Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXG4tLVxubmV0L3NjaGVkL0tjb25maWctODgxLVxubmV0L3NjaGVkL0tjb25maWc6ODgyOmNvbmZpZyBORVRfQUNUX1NLQk1PRFxubmV0L3NjaGVkL0tjb25maWctODgzLVx0dHJpc3RhdGUgXCYjMzQ7c2tiIGRhdGEgbW9kaWZpY2F0aW9uIGFjdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG5ldC9zY2hlZC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDg4Mi4gSSYjMzk7bSBob3BpbmcgdGhhdCBhcmVhIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIG92ZXJ2aWV3IG9mIHRoZSByZWxldmFudCBvcHRpb25zIG9yIGZlYXR1cmVzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgb3IgYXQgbGVhc3QgcG9pbnQgbWUgdG93YXJkcyB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHNldHRpbmdzLiBJdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBoaWdoLWxldmVsIHZpZXcgYmVmb3JlIEkgZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIHVuZGVybHlpbmcgY29kZS4gRnJvbSB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVzY3JpcHRpb25zIG9mIG9wdGlvbnMgcmVsYXRlZCB0byAqW2luc2VydCBleHBlY3RlZCB0b3BpYyBiYXNlZCBvbiB0aGVpciBleHBlcnRpc2VdKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmFyZ3VtZW50ICYjMzQ7Rmlyc3RMaW5lJiMzNDsgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogJiMzNDs4NzAmIzM0OywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAmIzM0OzMwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7YXJndW1lbnQgXCYjMzQ7Rmlyc3RMaW5lXCYjMzQ7IGhhcyB3cm9uZyB0eXBlOiBnb3Qgc3RyaW5nLCB3YW50IGludCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIFRob3VnaHRzIG9uIFZhcmlhYmxlIERlY2xhcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNuaXBwZXQgb2YgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGF0IGBGaXJzdExpbmVgIGlzIGJlaW5nIGRlY2xhcmVkLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHRoaXMgdmFyaWFibGUgcmVwcmVzZW50cyBhIGxpbmUgbnVtYmVyIG9yIHNvbWUgc29ydCBvZiBvcmRpbmFsIHZhbHVlLiBHaXZlbiB0aGF0LCBpdCByZWFsbHkgc2hvdWxkIGJlIGRlY2xhcmVkIGFzIGFuIGludGVnZXIuIFVzaW5nIGFueSBvdGhlciBkYXRhIHR5cGUgY291bGQgbGVhZCB0byBpbmNvbnNpc3RlbmNpZXMgYW5kIHBvdGVudGlhbCB0eXBlLXJlbGF0ZWQgZXJyb3JzIGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgaWYgYW55IGFyaXRobWV0aWMgb3BlcmF0aW9ucywgaW5kZXhpbmcsIG9yIGNvbXBhcmlzb25zIGFyZSBpbnRlbmRlZCBvbiB0aGlzIHZhbHVlLiBBIHF1aWNrIGNoYW5nZSBoZXJlIHdpbGwgbWFrZSB0aGUgY29kZSBzaWduaWZpY2FudGx5IG1vcmUgcm9idXN0LiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIHRoZSBkZWNsYXJhdGlvbnMgb2YgdGhlIG90aGVyIHNpbWlsYXIgdmFyaWFibGVzIG5lYXJieSBhcyB3ZWxsIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgdHJhbnNmZXIgb2YgYSBjb25ubWFyayBzdG9yZWQgaW5mb3JtYXRpb24uXG4gODcxOlx0XHQgIEN1cnJlbnQgYWN0aW9ucyB0cmFuc2ZlciBjb25ubWFyayBzdG9yZWQgRFNDUCBpbnRvXG4gODcyOlx0XHQgIGlwdjQvdjYgZGlmZnNlcnYgYW5kL29yIHRvIHRyYW5zZmVyIGNvbm5tYXJrIHRvIHBhY2tldFxuIDg3MzpcdFx0ICBtYXJrLiAgQm90aCBhcmUgdXNlZnVsIGZvciByZXN0b3JpbmcgZWdyZXNzIGJhc2VkIG1hcmtzXG4gODc0Olx0XHQgIGJhY2sgb250byBpbmdyZXNzIGNvbm5lY3Rpb25zIGZvciBxZGlzYyBwcmlvcml0eSBtYXBwaW5nXG4gODc1Olx0XHQgIHB1cnBvc2VzLlxuIDg3NjpcdFxuIDg3NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDg3ODpcdFxuIDg3OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODgwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3RpbmZvLlxuIDg4MTpcdFxuIDg4MjpcdGNvbmZpZyBORVRfQUNUX1NLQk1PRFxuIDg4MzpcdFx0dHJpc3RhdGUgXCYjMzQ7c2tiIGRhdGEgbW9kaWZpY2F0aW9uIGFjdGlvblwmIzM0O1xuIDg4NDpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDg4NTpcdFx0aGVscFxuIDg4NjpcdFx0IFNheSBZIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIHNrYiBkYXRhXG4gODg3Olx0XG4gODg4Olx0XHQgSWYgdW5zdXJlLCBzYXkgTi5cbiA4ODk6XHRcbiA4OTA6XHRcdCBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODkxOlx0XHQgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9za2Jtb2QuXG4gODkyOlx0XG4gODkzOlx0Y29uZmlnIE5FVF9BQ1RfSUZFXG4gODk0Olx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcJiMzNDtcbiA4OTU6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA4OTY6XHRcdHNlbGVjdCBORVRfSUZFXG4gODk3Olx0XHRoZWxwXG4gODk4Olx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgZm9yIHNvdXJjaW5nIGFuZCB0ZXJtaW5hdGluZyBtZXRhZGF0YVxuIDg5OTpcdFx0ICBGb3IgZGV0YWlscyByZWZlciB0byBuZXRkZXYwMSBwYXBlcjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgdGNmX3NrYm1vZF9hY3RgIEtlcm5lbCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgTkVUX0FDVF9TS0JNT0RgIG1vZHVsZSwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgaGluZ2VzIG9uIGBORVRfQ0xTX0FDVGAuIFNpbmNlIEkga25vdyBteSB3YXkgYXJvdW5kIHRoZSBrZXJuZWwsIHRoZSBwYXRjaCBtb2RpZnlpbmcgYHRjZl9za2Jtb2RfYWN0YCBpbW1lZGlhdGVseSBmbGFncyBteSBpbnRlcmVzdC4gVGhpcyBpcyBjb3JlIGB0Y2AgYWN0aW9uIGxvZ2ljLCBhbmQgSSBzZWUgcmVhbCBwb3RlbnRpYWwgZm9yIGZ1enppbmcgaGVyZS4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYHRjZl9za2Jtb2RfYWN0YCBhcyB0aGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24uIFRvIG1ha2Ugc3VyZSBteSBmdXp6aW5nIGVudmlyb25tZW50IGlzIHNldCB1cCByaWdodCwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYm90aCBgTkVUX0FDVF9TS0JNT0RgIGFuZCBgTkVUX0NMU19BQ1RgIGluIHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGVzdGluZyB0aGUgcmlnaHQgZnVuY3Rpb25hbGl0eS4KCkxldCBtZSBkb3VibGUgY2hlY2ssIHRob3VnaCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucy4gT2theSwgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGVgIGlzIHN0YXRpYywgc28gSSBjYW4gc2FmZWx5IGlnbm9yZSB0aGF0IGZvciBub3c7IGB0Y2Zfc2tibW9kX2FjdGAgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgYWN0aW9uLiBJdCYjMzk7cyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgdG8gdGVzdC4gTm93IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiBgTkVUX0NMU19BQ1RgIGRlcGVuZHMgb24gYW55dGhpbmcgZWxzZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfQUNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NjkwPWNvbmZpZyBORVRfRU1BVENIX0lQVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cbm5ldC9zY2hlZC9LY29uZmlnOjcwMjpjb25maWcgTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBUcmFmZmljIFNoYXBpbmcgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUga2VybmVsJiMzOTtzIHRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbiBhcm91bmQgbGluZSA3MDIuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IGludG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIHNjaGVkdWxlciBvcHRpb25zIGFyZSBwcmVzZW50ZWQgYW5kIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0aGV5JiMzOTtyZSBlbmFibGVkLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEtub3dpbmcgdGhpcyBhcmVhIGluIHBhcnRpY3VsYXIgd2lsbCBlbmFibGUgbWUgdG8gZ3Jhc3AgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBmdXJ0aGVyIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5NTpcdFx0ICBtYXRjaGVzLlxuIDY5NjpcdFx0ICBDdXJyZW50IHN1cHBvcnRlZCBtYXRjaCBpcyBcJiMzNDtwb2xpY3lcJiMzNDsgd2hpY2ggYWxsb3dzIHBhY2tldCBjbGFzc2lmaWNhdGlvblxuIDY5NzpcdFx0ICBiYXNlZCBvbiBJUHNlYyBwb2xpY3kgdGhhdCB3YXMgdXNlZCBkdXJpbmcgZGVjYXBzdWxhdGlvblxuIDY5ODpcdFxuIDY5OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNzAwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbV9pcHQuXG4gNzAxOlx0XG4gNzAyOlx0Y29uZmlnIE5FVF9DTFNfQUNUXG4gNzAzOlx0XHRib29sIFwmIzM0O0FjdGlvbnNcJiMzNDtcbiA3MDQ6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNzA1Olx0XHRzZWxlY3QgTkVUX1hHUkVTU1xuIDcwNjpcdFx0aGVscFxuIDcwNzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0cmFmZmljIGNvbnRyb2wgYWN0aW9ucy4gQWN0aW9uc1xuIDcwODpcdFx0ICBnZXQgYXR0YWNoZWQgdG8gY2xhc3NpZmllcnMgYW5kIGFyZSBpbnZva2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bFxuIDcwOTpcdFx0ICBjbGFzc2lmaWNhdGlvbi4gVGhleSBhcmUgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGNsYXNzaWZpY2F0aW9uXG4gNzEwOlx0XHQgIHJlc3VsdCwgaW5zdGFudGx5IGRyb3Agb3IgcmVkaXJlY3QgcGFja2V0cywgZXRjLlxuIDcxMTpcdFxuIDcxMjpcdFx0ICBBIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBpcHJvdXRlMiBwYWNrYWdlIGlzIHJlcXVpcmVkIHRvIHVzZVxuIDcxMzpcdFx0ICBleHRlbmRlZCBtYXRjaGVzLlxuIDcxNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTA2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIE5ldHdvcmsgQ2xhc3NpZmllciBBY3RpdmF0aW9uKioKCkFscmlnaHQsIHNvIGBORVRfQ0xTX0FDVGAgaXMgY2xlYXJseSBhIGJvb2xlYW4uIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFjdGluZyBhcyBhIHN3aXRjaCBmb3IgYE5FVF9DTFNgLCBnb3QgaXQuIFRoZXJlZm9yZSwgaWYgd2UmIzM5O3JlIGVuYWJsaW5nIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBjbGFzc2lmaWVyLCBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRvIGFsc28gZW5hYmxlIHRoZSBzcGVjaWZpYyAmIzM0O3NrYm1vZCYjMzQ7IGFjdGl2YXRpb24g4oCTIGBORVRfQUNUX1NLQk1PRGAuIFRoYXQgc3luZXJneSBmZWVscyByaWdodC4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBpbnZvbHZlZCwgSSBzaG91bGQgcXVpY2tseSBqdW1wIGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBgbmV0L3NjaGVkL2FjdF9za2Jtb2QuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBvdmVybG9va2VkIGRldGFpbHMgaW4gdGhhdCBzcGVjaWZpYyBtb2R1bGUgcmVsYXRlZCB0byB0aGlzIGFjdGl2YXRpb24gZmxvdy4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIGFsbCBiYXNlcyB0byBhdm9pZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBvciBjb25mbGljdHMgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qIHRjZl9za2Jtb2RfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9za2Jtb2QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X3NrYm1vZC5jPTEwNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgc2tibW9kX3BvbGljeVtUQ0FfU0tCTU9EX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTExMS1cbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmM6MTEyOnN0YXRpYyBpbnQgdGNmX3NrYm1vZF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYy0xMTMtXHRcdFx0ICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTIzNy1cbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmM6MjM4OnN0YXRpYyB2b2lkIHRjZl9za2Jtb2RfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYy0yMzkte1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMjQ3LVxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYzoyNDg6c3RhdGljIGludCB0Y2Zfc2tibW9kX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMjQ5LVx0XHRcdCAgIGludCBiaW5kLCBpbnQgcmVmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDg0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipBbmFseXppbmcgdGhlIGB0Y2Zfc2tibW9kX2FjdGAgS2VybmVsIE1vZHVsZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoZSBgdGNmX3NrYm1vZF9hY3RgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IHRoaW5nIGJlaW5nIHRvdWNoZWQuIEkgc2VlIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYHRjZl9za2Jtb2RfYWN0YCBpdHNlbGYgYW5kIGFsc28gYWRkcyB0aGlzIGBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3by4gQmFzZWQgb24gdGhlIGRvY3VtZW50YXRpb24sIGB0Y2Zfc2tibW9kX2FjdGAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYWN0aW9uLCB3aGljaCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBmdW5jdGlvbiBpbiB0aGUgbW9kdWxlJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLgoKTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gd2hhdCB0aGUgbmV3IGZ1bmN0aW9uICpkb2VzKiwgSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgaXRzIHNjb3BlLiBJIHNob3VsZCBjaGVjayBpZiBgdGNmX3NrYm1vZF9hY3RgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSWYgaXQgaXNuJiMzOTt0IHN0YXRpYywgaXQmIzM5O3MgcG9zc2libGUgdGhpcyBjaGFuZ2UgaGFzIHdpZGVyIGltcGxpY2F0aW9ucyB0aGFuIGltbWVkaWF0ZWx5IGFwcGFyZW50LCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVW5kZXJzdGFuZGluZyB0aGUgc3RhdGljIGxpbmthZ2Ugd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHBvdGVudGlhbCBzaWRlLWVmZmVjdHMgb2YgdGhpcyBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9za2Jtb2RfYWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9za2Jtb2QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X3NrYm1vZC5jPTI1PXN0YXRpYyBpbnQgc2tibW9kX2Vuc3VyZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxuLS1cbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMzYtXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jOjM3OlRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYy0zOC1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jPTI4OT1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NrYm1vZF9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYy0yOTItXHQub3duZXJcdFx0PVx0VEhJU19NT0RVTEUsXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jOjI5MzpcdC5hY3RcdFx0PVx0dGNmX3NrYm1vZF9hY3QsXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTI5NC1cdC5kdW1wXHRcdD1cdHRjZl9za2Jtb2RfZHVtcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY4NwoJCQkJCQkJb3V0cHV0OiAxMDEKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3QoLi4uKWAuIFRoZSBgVENfSU5ESVJFQ1RfU0NPUEVgIG1hY3JvIHVzdWFsbHkgcmVzb2x2ZXMgdG8gc29tZXRoaW5nIGxpa2UgYF9fd2Vha2AsIGJ1dCB0aGUga2V5IGhlcmUgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgYHRjZl9za2Jtb2RfYWN0YCBpcyBhIHJlYWxseSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgpNeSByZWFzb25pbmc/IFdlbGwsIHRoZSBkZXNjcmlwdGlvbiBzYXlzIHRoaXMgZml4ZXMgYW4gaXNzdWUgaW4gdGhlIGBza2Jtb2RgIHRjIGFjdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBpbnZvbHZlIGBza2JfZW5zdXJlX3dyaXRhYmxlYCBhbmQgbmVnYXRpdmUgb2Zmc2V0cy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHRvdWNoZXMgY29yZSBuZXR3b3JrIHBhY2tldCBzY2hlZHVsaW5nIOKAkyBtZWFuaW5nIHRoaXMgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IHBlcmZvcm1hbmNlLiBBbmQgYmVjYXVzZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIFRDIGFjdGlvbiwgSSBrbm93IGl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgdGMgbmV0bGluayBpbnRlcmZhY2UuIFRoaXMgaXMgc29tZXRoaW5nIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHJlZ2FyZGluZyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgpCYXNlZCBvbiB0aGUgbWV0YWRhdGEsIEkgc2VlIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBgTkVUX0FDVF9TS0JNT0RgIGFuZCBgTkVUX0NMU19BQ1RgLiBUaGUgYEZvY3VzU3ltYm9sc2AgY29uZmlybXMgbXkgaW5pdGlhbCBpbnN0aW5jdCBvZiBgdGNmX3NrYm1vZF9hY3RgLiBBbmQgZmluYWxseSwgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIHRlbGxzIG1lIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBleGFtaW5hdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfU0tCTU9EJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3NrYm1vZF9hY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrYm1vZCB0YyBhY3Rpb24gdG8gY29ycmVjdGx5IGhhbmRsZSBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gY2FsbGluZyBza2JfZW5zdXJlX3dyaXRhYmxlLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGFja2V0IHNjaGVkdWxpbmcgbG9naWMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdGMgbmV0bGluayBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfU0tCTU9EJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3NrYm1vZF9hY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrYm1vZCB0YyBhY3Rpb24gdG8gY29ycmVjdGx5IGhhbmRsZSBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gY2FsbGluZyBza2JfZW5zdXJlX3dyaXRhYmxlLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGFja2V0IHNjaGVkdWxpbmcgbG9naWMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdGMgbmV0bGluayBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDIyOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGFjdF9za2Jtb2RgIHdoZXJlIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIHdhcyBpbmNvcnJlY3RseSB1c2VkIHRvIGVuc3VyZSB0aGUgTUFDIGhlYWRlciBpcyB3cml0YWJsZS4gQmVjYXVzZSB0aGUgTUFDIGhlYWRlciBjYW4gYmUgbG9jYXRlZCBpbiB0aGUgc2tiIGhlYWRyb29tIChhdCBhIG5lZ2F0aXZlIG9mZnNldCByZWxhdGl2ZSB0byBgc2tiLVx1MDAzZWRhdGFgKSwgY2FsbGluZyBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3aXRoIGp1c3QgdGhlIGhlYWRlciBsZW5ndGggZG9lcyBub3QgY29ycmVjdGx5IHVuc2hhcmUgb3IgcHVsbCB0aGUgTUFDIGhlYWRlciBpZiBpdCYjMzk7cyBhdCBhIG5lZ2F0aXZlIG9mZnNldC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoKWAgd2hpY2ggY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgb2Zmc2V0cyBieSBjYWxsaW5nIGBza2JfY293KClgIGZvciB0aGUgaGVhZHJvb20gYW5kIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIGZvciB0aGUgZGF0YSBwb3J0aW9uLlxuXG5UaGlzIGlzIGEgZml4IGZvciBhIHNoYXJlZCBidWZmZXIgbW9kaWZpY2F0aW9uICh3cml0aW5nIHRvIGNsb25lZCBza2IgZGF0YSkgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIHRoZSBza2IgaGVhZHJvb20uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHdyaXRlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzA0NmQyZDIyMDU5YmVkYTU0ZDVlM2NjOWIxYjVlNjAwNmFkOTAwMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDIyOjU2OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9za2Jtb2QuYyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmMKaW5kZXggYTQ2NGIwYTNjMWI4MS4uODVmNGVkMDI5MWI1MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9za2Jtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jCkBAIC0yMiwxMyAmIzQzOzIyLDI0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2tibW9kX29wczsKIAomIzQzO3N0YXRpYyBpbnQgc2tibW9kX2Vuc3VyZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKQomIzQzO3sKJiM0MzsJaWYgKG9mZnNldCAmbHQ7IDApIHsKJiM0MzsJCWlmIChza2JfY293KHNrYiwgLW9mZnNldCkpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlpZiAob2Zmc2V0ICYjNDM7IGxlbiAmZ3Q7IDApCiYjNDM7CQkJcmV0dXJuIHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQgJiM0MzsgbGVuKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICYjNDM7IGxlbik7CiYjNDM7fQomIzQzOwogVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLAogCQkJCSAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKIHsKIAlzdHJ1Y3QgdGNmX3NrYm1vZCAqZCA9IHRvX3NrYm1vZChhKTsKIAlzdHJ1Y3QgdGNmX3NrYm1vZF9wYXJhbXMgKnA7Ci0JaW50IG1heF9lZGl0X2xlbiwgZXJyOwogCXU2NCBmbGFnczsKIAogCXRjZl9sYXN0dXNlX3VwZGF0ZSgmYW1wO2QtJmd0O3RjZl90bSk7CkBAIC0zOCw3ICYjNDM7NDksNiBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAodW5saWtlbHkocC0mZ3Q7YWN0aW9uID09IFRDX0FDVF9TSE9UKSkKIAkJZ290byBkcm9wOwogCi0JbWF4X2VkaXRfbGVuID0gc2tiX21hY19oZWFkZXJfbGVuKHNrYik7CiAJZmxhZ3MgPSBwLSZndDtmbGFnczsKIAogCS8qIHRjZl9za2Jtb2RfaW5pdCgpIGd1YXJhbnRlZXMgJiMzNDtmbGFncyYjMzQ7IHRvIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgpAQCAtNTIsMTkgJiM0Mzs2MiwyMCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3dpdGNoIChza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkgewogCQljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKLQkJCW1heF9lZGl0X2xlbiAmIzQzOz0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpOwomIzQzOwkJCWlmIChza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYiksCiYjNDM7CQkJCQkJICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKSkKJiM0MzsJCQkJZ290byBkcm9wOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIG91dDsKIAkJfQotCX0gZWxzZSBpZiAoIXNrYi0mZ3Q7ZGV2IHx8IHNrYi0mZ3Q7ZGV2LSZndDt0eXBlICE9IEFSUEhSRF9FVEhFUikgewotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWF4X2VkaXRfbGVuKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgLyogYmVzdCBwb2xpY3kgaXMgdG8gZHJvcCBvbiB0aGUgZmxvb3IgKi8KLQkJZ290byBkcm9wOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFza2ItJmd0O2RldiB8fCBza2ItJmd0O2Rldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfRVRIRVIpCiYjNDM7CQkJZ290byBvdXQ7CiAKJiM0MzsJCWlmIChza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHNrYiwgc2tiX21hY19vZmZzZXQoc2tiKSwgRVRIX0hMRU4pKQomIzQzOwkJCWdvdG8gZHJvcDsKJiM0MzsJfQogCWlmIChmbGFncyAmYW1wOyBTS0JNT0RfRl9ETUFDKQogCQlldGhlcl9hZGRyX2NvcHkoZXRoX2hkcihza2IpLSZndDtoX2Rlc3QsIHAtJmd0O2V0aF9kc3QpOwogCWlmIChmbGFncyAmYW1wOyBTS0JNT0RfRl9TTUFDKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NgoJCQkJCQkJb3V0cHV0OiAyNTcKCQkJCQkJCXRob3VnaHRzOiAxMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2tibW9kIFBhdGNoIGZvciBNZW1vcnkgU2FmZXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2FjdF9za2Jtb2QuY2AsIHNwZWNpZmljYWxseSB0aGUgYHRjZl9za2Jtb2RfYWN0YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHkgYXJlIHRoZXkgaW50cm9kdWNpbmcgdGhpcyBuZXcgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGVgIGZ1bmN0aW9uPyBUaGUgZXhpc3RpbmcgYHNrYl9lbnN1cmVfd3JpdGFibGVgIHNob3VsZCBiZSBzdWZmaWNpZW50LCBzbyB3aGF0JiMzOTtzIGdvaW5nIG9uPwoKSXQgYXBwZWFycyB0aGUgcHJvYmxlbSBsaWVzIGluIGhvdyB0aGV5IHdlcmUgaGFuZGxpbmcgbmVnYXRpdmUgb2Zmc2V0cy4gVGhlIGNvZGUgbm93IGNvcnJlY3RseSBhZGRyZXNzZXMgdGhpcyBieSB1c2luZyBgc2tiX2Nvd2AgZm9yIG5lZ2F0aXZlIG9mZnNldHMgYW5kIHRoZW4gY2FsbGluZyBgc2tiX2Vuc3VyZV93cml0YWJsZWAgYXBwcm9wcmlhdGVseS4gV2FpdCwgYSBuZWdhdGl2ZSBgc2tiX21hY19vZmZzZXQoc2tiKWA/IFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gTGV0JiMzOTtzIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGUgY29kZSAqd2FzKiB3b3JraW5nLgoKVGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldCB3YXMgY2FsY3VsYXRpbmcgYG1heF9lZGl0X2xlbmAgdXNpbmcgYHNrYl9tYWNfaGVhZGVyX2xlbmAgYW5kIHBvc3NpYmx5IGBza2JfbmV0d29ya19oZWFkZXJfbGVuYC4gVGhlIGxvZ2ljIHRoZW4gY2FsbHMgYHNrYl9lbnN1cmVfd3JpdGFibGVgIHdpdGggdGhpcyBjYWxjdWxhdGVkIGxlbmd0aC4gVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IGBza2JfZW5zdXJlX3dyaXRhYmxlYCB3b3JrcyByZWxhdGl2ZSB0byBgc2tiLSZndDtkYXRhYCwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHRoZSBkYXRhIGJ1ZmZlci4gSWYgdGhlIE1BQyBoZWFkZXIgaXMgKmJlZm9yZSogYHNrYi0mZ3Q7ZGF0YWAsIG1lYW5pbmcgaXQmIzM5O3MgaW4gdGhlIGhlYWRyb29tLCBgc2tiX2Vuc3VyZV93cml0YWJsZWAgd29uJiMzOTt0IG1ha2UgdGhlIE1BQyBoZWFkZXIgd3JpdGFibGUuIEl0IHdpbGwgb25seSBlbnN1cmUgdGhlIGRhdGEgcG9ydGlvbiBpcyB3cml0YWJsZS4KClRoZSBuZXcgY29kZSYjMzk7cyB1c2Ugb2YgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGVgIHdpdGggYHNrYl9uZXR3b3JrX29mZnNldGAgYW5kIGBza2JfbWFjX29mZnNldGAgaXMgYSBmaXguIEl0IGNvcnJlY3RzIHRoZSBwcmV2aW91cyBmbGF3LiBCeSBzZXBhcmF0ZWx5IGhhbmRsaW5nIHRoZSBNQUMgYW5kIG5ldHdvcmsgaGVhZGVycywgZW5zdXJpbmcgdGhlIHdyaXRhYmlsaXR5IG9mIHRoZSBza2IgKmluY2x1ZGluZyogdGhlIGhlYWRyb29tLCB0aGUgcGF0Y2ggbm93IHByZXZlbnRzIHRoZSB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIGNvcnJ1cHRpb24gdGhhdCBjb3VsZCBvY2N1ciBkdWUgdG8gbW9kaWZ5aW5nIGEgc2hhcmVkIGJ1ZmZlci4gVGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgdXNlcyBgc2tiX2Nvd2AgYW5kIGBza2JfZW5zdXJlX3dyaXRhYmxlYCwgd2hpY2ggYXJlIGNvcnJlY3QgdG9vbHMgZm9yIHRoaXMgc2l0dWF0aW9uLgoKTm93LCBhIGtleSBxdWVzdGlvbiBmb3Igc2VjdXJpdHkgaXMgYWx3YXlzIHdoZXRoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYXQgcGxheSBoZXJlLiBUaGlzIHBhdGNoIGlzbiYjMzk7dCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSAqcGVyIHNlKi4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgc2hhcmVkIG1lbW9yeSBpc24mIzM5O3QgbW9kaWZpZWQuIFRoaXMgaXMgYSBzdGFuZGFyZCBza2IgY293L3Vuc2hhcmUgaXNzdWUuIFNvLCB0aGUgYnVnIGlzIGEgc2hhcmVkIG1lbW9yeSBtb2RpZmljYXRpb24sIG9yIG91dC1vZi1ib3VuZHMgd3JpdGUgaWYgdGhlIGhlYWRyb29tIHdhc24mIzM5O3QgbGFyZ2UgZW5vdWdoLCBhbHRob3VnaCBgc2tiX2Nvd2Agc2hvdWxkIGhhbmRsZSB0aGUgaGVhZHJvb20uCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIGZvciBhbnl0aGluZyB0aGF0ICpjb3VsZCogaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXZlbiBpbmRpcmVjdGx5LiBgc2tiX2Nvd2Agd2lsbCBhbGxvY2F0ZSBtZW1vcnkgaWYgaXQgbmVlZHMgdG8sIGJ1dCBpdCB3aWxsIGNvcHkgdmFsaWQgZGF0YSwgc28gdGhlIG5ldyBtZW1vcnkgc2hvdWxkIGJlIGluaXRpYWxpemVkLiBgc2tiX2Vuc3VyZV93cml0YWJsZWAgbWF5IHB1bGwgZGF0YSBmcm9tIGZyYWdtZW50cywgYnV0IHRoYXQgZGF0YSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIFNvLCBJIHNlZSBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqYmVpbmcgZXhwb3NlZCogdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuCgpOb3csIGdpdmVuIHRoZSBLTVNBTiBndWlkYW5jZToKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKVGhpcyBidWcgaXMgYSBjYXNlIG9mIHNoYXJlZCBtZW1vcnkgYmVpbmcgbW9kaWZpZWQgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgcGF0Y2ggZG9lcyBub3QgcmVsYXRlIHRvIG9yIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIGJ1dCBpdCBjYW4gYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gaWYgaXQmIzM5O3Mgb3V0LW9mLWJvdW5kcywgb3IgaXQmIzM5O3MganVzdCBhIGZ1bmN0aW9uYWwgYnVnLgoKU28sIGluIHN1bW1hcnk6IFRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYWN0X3NrYm1vZGAgd2hlcmUgYHNrYl9lbnN1cmVfd3JpdGFibGVgIHdhcyBiZWluZyBtaXN1c2VkIGFuZCBkb2VzIG5vdCBwcm90ZWN0IHRoZSBNQUMgaGVhZGVyIGlmIGl0IGlzIGluIHRoZSBza2IgaGVhZHJvb20uIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgb2Zmc2V0cywgZW5zdXJpbmcgdGhhdCB0aGUgTUFDIGhlYWRlciAoaGVhZHJvb20pIGlzIHdyaXRhYmxlIGJlZm9yZSBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgaW5mbHVlbmNlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGFjdF9za2Jtb2RgIHdoZXJlIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIHdhcyBpbmNvcnJlY3RseSB1c2VkIHRvIGVuc3VyZSB0aGUgTUFDIGhlYWRlciBpcyB3cml0YWJsZS4gQmVjYXVzZSB0aGUgTUFDIGhlYWRlciBjYW4gYmUgbG9jYXRlZCBpbiB0aGUgc2tiIGhlYWRyb29tIChhdCBhIG5lZ2F0aXZlIG9mZnNldCByZWxhdGl2ZSB0byBgc2tiLVx1MDAzZWRhdGFgKSwgY2FsbGluZyBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3aXRoIGp1c3QgdGhlIGhlYWRlciBsZW5ndGggZG9lcyBub3QgY29ycmVjdGx5IHVuc2hhcmUgb3IgcHVsbCB0aGUgTUFDIGhlYWRlciBpZiBpdCYjMzk7cyBhdCBhIG5lZ2F0aXZlIG9mZnNldC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoKWAgd2hpY2ggY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgb2Zmc2V0cyBieSBjYWxsaW5nIGBza2JfY293KClgIGZvciB0aGUgaGVhZHJvb20gYW5kIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIGZvciB0aGUgZGF0YSBwb3J0aW9uLlxuXG5UaGlzIGlzIGEgZml4IGZvciBhIHNoYXJlZCBidWZmZXIgbW9kaWZpY2F0aW9uICh3cml0aW5nIHRvIGNsb25lZCBza2IgZGF0YSkgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIHRoZSBza2IgaGVhZHJvb20uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHdyaXRlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIGBhY3Rfc2tibW9kYCB3aGVyZSBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3YXMgaW5jb3JyZWN0bHkgdXNlZCB0byBlbnN1cmUgdGhlIE1BQyBoZWFkZXIgaXMgd3JpdGFibGUuIEJlY2F1c2UgdGhlIE1BQyBoZWFkZXIgY2FuIGJlIGxvY2F0ZWQgaW4gdGhlIHNrYiBoZWFkcm9vbSAoYXQgYSBuZWdhdGl2ZSBvZmZzZXQgcmVsYXRpdmUgdG8gYHNrYi1cdTAwM2VkYXRhYCksIGNhbGxpbmcgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgd2l0aCBqdXN0IHRoZSBoZWFkZXIgbGVuZ3RoIGRvZXMgbm90IGNvcnJlY3RseSB1bnNoYXJlIG9yIHB1bGwgdGhlIE1BQyBoZWFkZXIgaWYgaXQmIzM5O3MgYXQgYSBuZWdhdGl2ZSBvZmZzZXQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKClgIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIG5lZ2F0aXZlIG9mZnNldHMgYnkgY2FsbGluZyBgc2tiX2NvdygpYCBmb3IgdGhlIGhlYWRyb29tIGFuZCBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCBmb3IgdGhlIGRhdGEgcG9ydGlvbi5cblxuVGhpcyBpcyBhIGZpeCBmb3IgYSBzaGFyZWQgYnVmZmVyIG1vZGlmaWNhdGlvbiAod3JpdGluZyB0byBjbG9uZWQgc2tiIGRhdGEpIG9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgc2tiIGhlYWRyb29tLiBUaGVzZSB0eXBlcyBvZiBidWdzIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU2OjUyLjM3NzE2MjIyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDYzNTA3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfU0tCTU9EXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9za2Jtb2RfYWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgYWN0X3NrYm1vZGAgd2hlcmUgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgd2FzIGluY29ycmVjdGx5IHVzZWQgdG8gZW5zdXJlIHRoZSBNQUMgaGVhZGVyIGlzIHdyaXRhYmxlLiBCZWNhdXNlIHRoZSBNQUMgaGVhZGVyIGNhbiBiZSBsb2NhdGVkIGluIHRoZSBza2IgaGVhZHJvb20gKGF0IGEgbmVnYXRpdmUgb2Zmc2V0IHJlbGF0aXZlIHRvIGBza2ItXFx1MDAzZWRhdGFgKSwgY2FsbGluZyBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3aXRoIGp1c3QgdGhlIGhlYWRlciBsZW5ndGggZG9lcyBub3QgY29ycmVjdGx5IHVuc2hhcmUgb3IgcHVsbCB0aGUgTUFDIGhlYWRlciBpZiBpdCdzIGF0IGEgbmVnYXRpdmUgb2Zmc2V0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tibW9kX2Vuc3VyZV93cml0YWJsZSgpYCB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBuZWdhdGl2ZSBvZmZzZXRzIGJ5IGNhbGxpbmcgYHNrYl9jb3coKWAgZm9yIHRoZSBoZWFkcm9vbSBhbmQgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgZm9yIHRoZSBkYXRhIHBvcnRpb24uXFxuXFxuVGhpcyBpcyBhIGZpeCBmb3IgYSBzaGFyZWQgYnVmZmVyIG1vZGlmaWNhdGlvbiAod3JpdGluZyB0byBjbG9uZWQgc2tiIGRhdGEpIG9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgc2tiIGhlYWRyb29tLiBUaGVzZSB0eXBlcyBvZiBidWdzIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrYm1vZCB0YyBhY3Rpb24gdG8gY29ycmVjdGx5IGhhbmRsZSBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gY2FsbGluZyBza2JfZW5zdXJlX3dyaXRhYmxlLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGFja2V0IHNjaGVkdWxpbmcgbG9naWMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdGMgbmV0bGluayBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU2OjUyLjM3NzE2ODU5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NzgxMTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcwNDZkMmQyMjA1OWJlZGE1NGQ1ZTNjYzliMWI1ZTYwMDZhZDkwMDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjI6NTY6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9za2Jtb2QuYyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcXG5pbmRleCBhNDY0YjBhM2MxYjgxLi44NWY0ZWQwMjkxYjUxIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jXFxuQEAgLTIyLDEzICsyMiwyNCBAQFxcbiBcXG4gc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9za2Jtb2Rfb3BzO1xcbiBcXG4rc3RhdGljIGludCBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4pXFxuK3tcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0aWYgKHNrYl9jb3coc2tiLCAtb2Zmc2V0KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdGlmIChvZmZzZXQgKyBsZW4gXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCArIGxlbik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdHJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICsgbGVuKTtcXG4rfVxcbitcXG4gVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxcbiB7XFxuIFxcdHN0cnVjdCB0Y2Zfc2tibW9kICpkID0gdG9fc2tibW9kKGEpO1xcbiBcXHRzdHJ1Y3QgdGNmX3NrYm1vZF9wYXJhbXMgKnA7XFxuLVxcdGludCBtYXhfZWRpdF9sZW4sIGVycjtcXG4gXFx0dTY0IGZsYWdzO1xcbiBcXG4gXFx0dGNmX2xhc3R1c2VfdXBkYXRlKFxcdTAwMjZkLVxcdTAwM2V0Y2ZfdG0pO1xcbkBAIC0zOCw3ICs0OSw2IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAodW5saWtlbHkocC1cXHUwMDNlYWN0aW9uID09IFRDX0FDVF9TSE9UKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4tXFx0bWF4X2VkaXRfbGVuID0gc2tiX21hY19oZWFkZXJfbGVuKHNrYik7XFxuIFxcdGZsYWdzID0gcC1cXHUwMDNlZmxhZ3M7XFxuIFxcbiBcXHQvKiB0Y2Zfc2tibW9kX2luaXQoKSBndWFyYW50ZWVzIFxcXCJmbGFnc1xcXCIgdG8gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XFxuQEAgLTUyLDE5ICs2MiwyMCBAQCBUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NrYm1vZF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0c3dpdGNoIChza2JfcHJvdG9jb2woc2tiLCB0cnVlKSkge1xcbiBcXHRcXHRjYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKTpcXG4gXFx0XFx0Y2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KTpcXG4tXFx0XFx0XFx0bWF4X2VkaXRfbGVuICs9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcXG4rXFx0XFx0XFx0aWYgKHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKSlcXG4rXFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIGlmICghc2tiLVxcdTAwM2VkZXYgfHwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0VUSEVSKSB7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbi1cXHRlcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWF4X2VkaXRfbGVuKTtcXG4tXFx0aWYgKHVubGlrZWx5KGVycikpIC8qIGJlc3QgcG9saWN5IGlzIHRvIGRyb3Agb24gdGhlIGZsb29yICovXFxuLVxcdFxcdGdvdG8gZHJvcDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKCFza2ItXFx1MDAzZWRldiB8fCBza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfRVRIRVIpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0XFx0aWYgKHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2JfbWFjX29mZnNldChza2IpLCBFVEhfSExFTikpXFxuK1xcdFxcdFxcdGdvdG8gZHJvcDtcXG4rXFx0fVxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBTS0JNT0RfRl9ETUFDKVxcbiBcXHRcXHRldGhlcl9hZGRyX2NvcHkoZXRoX2hkcihza2IpLVxcdTAwM2VoX2Rlc3QsIHAtXFx1MDAzZWV0aF9kc3QpO1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBTS0JNT0RfRl9TTUFDKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1Njo1My44MjYwODE1ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNzYzMTIzMzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX1NLQk1PRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2Zfc2tibW9kX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza2Jtb2QgdGMgYWN0aW9uIHRvIGNvcnJlY3RseSBoYW5kbGUgbmVnYXRpdmUgb2Zmc2V0cyB3aGVuIGNhbGxpbmcgc2tiX2Vuc3VyZV93cml0YWJsZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhY2tldCBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHRjIG5ldGxpbmsgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MDQ2ZDJkMjIwNTliZWRhNTRkNWUzY2M5YjFiNWU2MDA2YWQ5MDAxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjI6NTY6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jIGIvbmV0L3NjaGVkL2FjdF9za2Jtb2QuY1xuaW5kZXggYTQ2NGIwYTNjMWI4MS4uODVmNGVkMDI5MWI1MSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbisrKyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbkBAIC0yMiwxMyArMjIsMjQgQEBcbiBcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NrYm1vZF9vcHM7XG4gXG4rc3RhdGljIGludCBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4pXG4re1xuK1x0aWYgKG9mZnNldCBcdTAwM2MgMCkge1xuK1x0XHRpZiAoc2tiX2Nvdyhza2IsIC1vZmZzZXQpKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRpZiAob2Zmc2V0ICsgbGVuIFx1MDAzZSAwKVxuK1x0XHRcdHJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICsgbGVuKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRyZXR1cm4gc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCArIGxlbik7XG4rfVxuK1xuIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxuIHtcbiBcdHN0cnVjdCB0Y2Zfc2tibW9kICpkID0gdG9fc2tibW9kKGEpO1xuIFx0c3RydWN0IHRjZl9za2Jtb2RfcGFyYW1zICpwO1xuLVx0aW50IG1heF9lZGl0X2xlbiwgZXJyO1xuIFx0dTY0IGZsYWdzO1xuIFxuIFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmQtXHUwMDNldGNmX3RtKTtcbkBAIC0zOCw3ICs0OSw2IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHVubGlrZWx5KHAtXHUwMDNlYWN0aW9uID09IFRDX0FDVF9TSE9UKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0bWF4X2VkaXRfbGVuID0gc2tiX21hY19oZWFkZXJfbGVuKHNrYik7XG4gXHRmbGFncyA9IHAtXHUwMDNlZmxhZ3M7XG4gXG4gXHQvKiB0Y2Zfc2tibW9kX2luaXQoKSBndWFyYW50ZWVzIFwiZmxhZ3NcIiB0byBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbkBAIC01MiwxOSArNjIsMjAgQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHN3aXRjaCAoc2tiX3Byb3RvY29sKHNrYiwgdHJ1ZSkpIHtcbiBcdFx0Y2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6XG4gXHRcdGNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6XG4tXHRcdFx0bWF4X2VkaXRfbGVuICs9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbitcdFx0XHRpZiAoc2tibW9kX2Vuc3VyZV93cml0YWJsZShza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpLFxuK1x0XHRcdFx0XHRcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSkpXG4rXHRcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdH0gZWxzZSBpZiAoIXNrYi1cdTAwM2VkZXYgfHwgc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUikge1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXhfZWRpdF9sZW4pO1xuLVx0aWYgKHVubGlrZWx5KGVycikpIC8qIGJlc3QgcG9saWN5IGlzIHRvIGRyb3Agb24gdGhlIGZsb29yICovXG4tXHRcdGdvdG8gZHJvcDtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0VUSEVSKVxuK1x0XHRcdGdvdG8gb3V0O1xuIFxuK1x0XHRpZiAoc2tibW9kX2Vuc3VyZV93cml0YWJsZShza2IsIHNrYl9tYWNfb2Zmc2V0KHNrYiksIEVUSF9ITEVOKSlcbitcdFx0XHRnb3RvIGRyb3A7XG4rXHR9XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFNLQk1PRF9GX0RNQUMpXG4gXHRcdGV0aGVyX2FkZHJfY29weShldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0LCBwLVx1MDAzZWV0aF9kc3QpO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JNT0RfRl9TTUFDKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTY6NTMuODI2MDg0ODA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2NjAwNjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNLQk1PRCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGEgbW9kaWZpY2F0aW9uIGluIGBuZXQvc2NoZWQvYWN0X3NrYm1vZC5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGEgbmV3IGZ1bmN0aW9uOiBgc2tibW9kX2Vuc3VyZV93cml0YWJsZWAuIEhtbSwgYW5kIGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gYHRjZl9za2Jtb2RfYWN0YC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgSSdtIGJldHRpbmcgdGhpcyByZWxhdGVzIHRvIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgU3RyZWFtIENvbnRyb2wgQmxvY2ssIG9yIFNLQiwgd2l0aCB0aGUgYHNrYm1vZGAgdHJhZmZpYyBjb250cm9sICh0YykgYWN0aW9uLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gcmVmaW5lIGhvdyB3ZSBjYWxsIGBza2JfZW5zdXJlX3dyaXRhYmxlYC4gVGhlIGNsdWUgaXMgaW4gdGhlIGhhbmRsaW5nIG9mIHRob3NlIG5lZ2F0aXZlIG9mZnNldHMuIFRoYXQncyBhIGNsYXNzaWMgc2lnbiBvZiBpc3N1ZXMgcmVsYXRlZCB0byBgc2tiX21hY19vZmZzZXQoc2tiKWAgb3IgYHNrYl9uZXR3b3JrX29mZnNldChza2IpYCBwb3RlbnRpYWxseSByZXR1cm5pbmcgbmVnYXRpdmUgdmFsdWVzLiBUaGF0IGNvdWxkIGhhcHBlbiBpbiBlZGdlIGNhc2VzIG9yIHdpdGggbWFsZm9ybWVkIHBhY2tldHMuIFRoaXMgc3VnZ2VzdHMgYSBzdWJ0bGUgYnVnIGZpeCBvciBtYXliZSBldmVuIGEgYmVoYXZpb3IgY2hhbmdlIHdpdGhpbiB0aGUgYHNrYm1vZGAgYWN0aW9uIGl0c2VsZi5cblxuVGltZSB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9hY3Rfc2tibW9kLmNgIGFuZCBpdHMgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGUuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBuZXcgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQsIGFuZCBob3cgaXQgaXMgYmVpbmcgdXNlZCBpbiBjb250ZXh0LCBhcyB3ZWxsIGFzIHRoZSBjb25maWcuIEhvcGVmdWxseSwgdGhpcyBleHBsYWlucyB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTY6NTguMjkyMDk0MjczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTg5MTA4MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9BQ1RfU0tCTU9EXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTg2NT1jb25maWcgTkVUX0FDVF9DVElORk9cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg4MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4ODI6Y29uZmlnIE5FVF9BQ1RfU0tCTU9EXFxubmV0L3NjaGVkL0tjb25maWctODgzLVxcdHRyaXN0YXRlIFxcXCJza2IgZGF0YSBtb2RpZmljYXRpb24gYWN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzowMC44MTEwMTk1NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI1MzQyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX1NLQk1PRGAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBORVRfQUNUX1NLQk1PRGAuIEl0J3MgYSBrZXJuZWwgbW9kdWxlLCB3aGljaCBpbW1lZGlhdGVseSBtZWFucyBJIGhhdmUgdG8gYmUgY2FyZWZ1bCDigJMgdGhlc2UgdGhpbmdzIGNhbiBiZSB0cmlja3kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQgcmVsaWVzIG9uLCB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIHBvdGVudGlhbGx5IGFmZmVjdGVkIGJ5IGl0LCBhbmQgd2hhdCBteSBvcHRpb25zIGFyZSBpZiBpdCdzIG5vdCBiZWhhdmluZyBhcyBleHBlY3RlZC4gRGVwZW5kZW5jeSBhbmFseXNpcyBpcyBrZXkgaGVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNvLCBsZXQncyBzdGFydCBieSBtZXRob2RpY2FsbHkgdHJhY2luZyBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIG1vZHVsZXMgb3Iga2VybmVsIGZlYXR1cmVzIGlzIGl0IHB1bGxpbmcgaW4/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY2llcywgYW5kIHRoZW4sIGlmIG5lY2Vzc2FyeSwgSSdsbCBnbyBkZWVwZXIgdG8gbG9vayBhdCB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgc2hvdWxkIHRlbGwgbWUgaG93IHRpZ2h0bHkgY291cGxlZCBpdCBpcyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBpbmZvcm0gaG93IGVhc2lseSBpdCBjYW4gYmUgbW9kaWZpZWQsIHJlbW92ZWQsIG9yIGRlYnVnZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MDMuOTM2MzY1Mzk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTUzMjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9BQ1RfU0tCTU9EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTg2NT1jb25maWcgTkVUX0FDVF9DVElORk9cXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg4MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4ODI6Y29uZmlnIE5FVF9BQ1RfU0tCTU9EXFxubmV0L3NjaGVkL0tjb25maWctODgzLVxcdHRyaXN0YXRlIFxcXCJza2IgZGF0YSBtb2RpZmljYXRpb24gYWN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzowMy45OTc1MjY3NjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUzNTg1MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIHRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDg4Mi4gSSdtIGhvcGluZyB0aGF0IGFyZWEgd2lsbCBnaXZlIG1lIGEgY2xlYXIgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IG9wdGlvbnMgb3IgZmVhdHVyZXMgSSdtIGludGVyZXN0ZWQgaW4sIG9yIGF0IGxlYXN0IHBvaW50IG1lIHRvd2FyZHMgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gSXQncyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBoaWdoLWxldmVsIHZpZXcgYmVmb3JlIEkgZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIHVuZGVybHlpbmcgY29kZS4gRnJvbSB0aGUgY29udGV4dCwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZXNjcmlwdGlvbnMgb2Ygb3B0aW9ucyByZWxhdGVkIHRvICpbaW5zZXJ0IGV4cGVjdGVkIHRvcGljIGJhc2VkIG9uIHRoZWlyIGV4cGVydGlzZV0qLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MDcuMDUxMTE3MDIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY4ODAsIkVycm9yIjoiYXJndW1lbnQgXCJGaXJzdExpbmVcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnQiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiBcIjg3MFwiLFxuICBcIkxpbmVDb3VudFwiOiBcIjMwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiYXJndW1lbnQgXFxcIkZpcnN0TGluZVxcXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjA3LjA1MTE4MDIwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTYxNjQwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgVGhvdWdodHMgb24gVmFyaWFibGUgRGVjbGFyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHNuaXBwZXQgb2YgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGF0IGBGaXJzdExpbmVgIGlzIGJlaW5nIGRlY2xhcmVkLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSdtIHByZXR0eSBzdXJlIHRoYXQgdGhpcyB2YXJpYWJsZSByZXByZXNlbnRzIGEgbGluZSBudW1iZXIgb3Igc29tZSBzb3J0IG9mIG9yZGluYWwgdmFsdWUuIEdpdmVuIHRoYXQsIGl0IHJlYWxseSBzaG91bGQgYmUgZGVjbGFyZWQgYXMgYW4gaW50ZWdlci4gVXNpbmcgYW55IG90aGVyIGRhdGEgdHlwZSBjb3VsZCBsZWFkIHRvIGluY29uc2lzdGVuY2llcyBhbmQgcG90ZW50aWFsIHR5cGUtcmVsYXRlZCBlcnJvcnMgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSBpZiBhbnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zLCBpbmRleGluZywgb3IgY29tcGFyaXNvbnMgYXJlIGludGVuZGVkIG9uIHRoaXMgdmFsdWUuIEEgcXVpY2sgY2hhbmdlIGhlcmUgd2lsbCBtYWtlIHRoZSBjb2RlIHNpZ25pZmljYW50bHkgbW9yZSByb2J1c3QuIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY2hlY2sgdGhlIGRlY2xhcmF0aW9ucyBvZiB0aGUgb3RoZXIgc2ltaWxhciB2YXJpYWJsZXMgbmVhcmJ5IGFzIHdlbGwgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODEwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjEwLjcwNzM0NzQ3OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODcwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyB0cmFuc2ZlciBvZiBhIGNvbm5tYXJrIHN0b3JlZCBpbmZvcm1hdGlvbi5cXG4gODcxOlxcdFxcdCAgQ3VycmVudCBhY3Rpb25zIHRyYW5zZmVyIGNvbm5tYXJrIHN0b3JlZCBEU0NQIGludG9cXG4gODcyOlxcdFxcdCAgaXB2NC92NiBkaWZmc2VydiBhbmQvb3IgdG8gdHJhbnNmZXIgY29ubm1hcmsgdG8gcGFja2V0XFxuIDg3MzpcXHRcXHQgIG1hcmsuICBCb3RoIGFyZSB1c2VmdWwgZm9yIHJlc3RvcmluZyBlZ3Jlc3MgYmFzZWQgbWFya3NcXG4gODc0OlxcdFxcdCAgYmFjayBvbnRvIGluZ3Jlc3MgY29ubmVjdGlvbnMgZm9yIHFkaXNjIHByaW9yaXR5IG1hcHBpbmdcXG4gODc1OlxcdFxcdCAgcHVycG9zZXMuXFxuIDg3NjpcXHRcXG4gODc3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gODc4OlxcdFxcbiA4Nzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDg4MDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3RpbmZvLlxcbiA4ODE6XFx0XFxuIDg4MjpcXHRjb25maWcgTkVUX0FDVF9TS0JNT0RcXG4gODgzOlxcdFxcdHRyaXN0YXRlIFxcXCJza2IgZGF0YSBtb2RpZmljYXRpb24gYWN0aW9uXFxcIlxcbiA4ODQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA4ODU6XFx0XFx0aGVscFxcbiA4ODY6XFx0XFx0IFNheSBZIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIHNrYiBkYXRhXFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdCBJZiB1bnN1cmUsIHNheSBOLlxcbiA4ODk6XFx0XFxuIDg5MDpcXHRcXHQgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4OTE6XFx0XFx0IG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfc2tibW9kLlxcbiA4OTI6XFx0XFxuIDg5MzpcXHRjb25maWcgTkVUX0FDVF9JRkVcXG4gODk0OlxcdFxcdHRyaXN0YXRlIFxcXCJJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcXFwiXFxuIDg5NTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDg5NjpcXHRcXHRzZWxlY3QgTkVUX0lGRVxcbiA4OTc6XFx0XFx0aGVscFxcbiA4OTg6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IGZvciBzb3VyY2luZyBhbmQgdGVybWluYXRpbmcgbWV0YWRhdGFcXG4gODk5OlxcdFxcdCAgRm9yIGRldGFpbHMgcmVmZXIgdG8gbmV0ZGV2MDEgcGFwZXI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjEwLjcwNzQ4NzcwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjI0NDM5NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGB0Y2Zfc2tibW9kX2FjdGAgS2VybmVsIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgTkVUX0FDVF9TS0JNT0RgIG1vZHVsZSwgYW5kIGl0J3MgY2xlYXIgdGhhdCBpdCBoaW5nZXMgb24gYE5FVF9DTFNfQUNUYC4gU2luY2UgSSBrbm93IG15IHdheSBhcm91bmQgdGhlIGtlcm5lbCwgdGhlIHBhdGNoIG1vZGlmeWluZyBgdGNmX3NrYm1vZF9hY3RgIGltbWVkaWF0ZWx5IGZsYWdzIG15IGludGVyZXN0LiBUaGlzIGlzIGNvcmUgYHRjYCBhY3Rpb24gbG9naWMsIGFuZCBJIHNlZSByZWFsIHBvdGVudGlhbCBmb3IgZnV6emluZyBoZXJlLiBJdCdzIGEgcHJpbWUgdGFyZ2V0LlxuXG5JJ20gemVyb2luZyBpbiBvbiBgdGNmX3NrYm1vZF9hY3RgIGFzIHRoZSBwcmltYXJ5IHN5bWJvbCB0byBmb2N1cyBvbi4gVG8gbWFrZSBzdXJlIG15IGZ1enppbmcgZW52aXJvbm1lbnQgaXMgc2V0IHVwIHJpZ2h0LCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGJvdGggYE5FVF9BQ1RfU0tCTU9EYCBhbmQgYE5FVF9DTFNfQUNUYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGVzdGluZyB0aGUgcmlnaHQgZnVuY3Rpb25hbGl0eS5cblxuTGV0IG1lIGRvdWJsZSBjaGVjaywgdGhvdWdoLCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgZnVuY3Rpb25zLiBPa2F5LCBgc2tibW9kX2Vuc3VyZV93cml0YWJsZWAgaXMgc3RhdGljLCBzbyBJIGNhbiBzYWZlbHkgaWdub3JlIHRoYXQgZm9yIG5vdzsgYHRjZl9za2Jtb2RfYWN0YCBsb29rcyBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoZSBhY3Rpb24uIEl0J3MgdGhlIHByaW1hcnkgaW50ZXJmYWNlIHRvIHRlc3QuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYE5FVF9DTFNfQUNUYCBkZXBlbmRzIG9uIGFueXRoaW5nIGVsc2UgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzoxNS4zMzE5MzAyM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzMzEyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9DTFNfQUNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTY5MD1jb25maWcgTkVUX0VNQVRDSF9JUFRcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDI6Y29uZmlnIE5FVF9DTFNfQUNUXFxubmV0L3NjaGVkL0tjb25maWctNzAzLVxcdGJvb2wgXFxcIkFjdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjE1LjM5NTI2NzI1NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE1ODI5OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBUcmFmZmljIFNoYXBpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGtlcm5lbCdzIHRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDcwMi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgaW50byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2NoZWR1bGVyIG9wdGlvbnMgYXJlIHByZXNlbnRlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gSSdtIGhvcGluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCBob3cgdGhleSdyZSBlbmFibGVkLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEtub3dpbmcgdGhpcyBhcmVhIGluIHBhcnRpY3VsYXIgd2lsbCBlbmFibGUgbWUgdG8gZ3Jhc3AgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBmdXJ0aGVyIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzoxOC4zMTExMDAwNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5NTpcXHRcXHQgIG1hdGNoZXMuXFxuIDY5NjpcXHRcXHQgIEN1cnJlbnQgc3VwcG9ydGVkIG1hdGNoIGlzIFxcXCJwb2xpY3lcXFwiIHdoaWNoIGFsbG93cyBwYWNrZXQgY2xhc3NpZmljYXRpb25cXG4gNjk3OlxcdFxcdCAgYmFzZWQgb24gSVBzZWMgcG9saWN5IHRoYXQgd2FzIHVzZWQgZHVyaW5nIGRlY2Fwc3VsYXRpb25cXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDcwMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbV9pcHQuXFxuIDcwMTpcXHRcXG4gNzAyOlxcdGNvbmZpZyBORVRfQ0xTX0FDVFxcbiA3MDM6XFx0XFx0Ym9vbCBcXFwiQWN0aW9uc1xcXCJcXG4gNzA0OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDcwNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTU1xcbiA3MDY6XFx0XFx0aGVscFxcbiA3MDc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0cmFmZmljIGNvbnRyb2wgYWN0aW9ucy4gQWN0aW9uc1xcbiA3MDg6XFx0XFx0ICBnZXQgYXR0YWNoZWQgdG8gY2xhc3NpZmllcnMgYW5kIGFyZSBpbnZva2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bFxcbiA3MDk6XFx0XFx0ICBjbGFzc2lmaWNhdGlvbi4gVGhleSBhcmUgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGNsYXNzaWZpY2F0aW9uXFxuIDcxMDpcXHRcXHQgIHJlc3VsdCwgaW5zdGFudGx5IGRyb3Agb3IgcmVkaXJlY3QgcGFja2V0cywgZXRjLlxcbiA3MTE6XFx0XFxuIDcxMjpcXHRcXHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXFxuIDcxMzpcXHRcXHQgIGV4dGVuZGVkIG1hdGNoZXMuXFxuIDcxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MTguMzExMjY4MjQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjUyOTA3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIENsYXNzaWZpZXIgQWN0aXZhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBORVRfQ0xTX0FDVGAgaXMgY2xlYXJseSBhIGJvb2xlYW4uIEl0J3MgZXNzZW50aWFsbHkgYWN0aW5nIGFzIGEgc3dpdGNoIGZvciBgTkVUX0NMU2AsIGdvdCBpdC4gVGhlcmVmb3JlLCBpZiB3ZSdyZSBlbmFibGluZyB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgY2xhc3NpZmllciwgaXQgbWFrZXMgcGVyZmVjdCBzZW5zZSB0byBhbHNvIGVuYWJsZSB0aGUgc3BlY2lmaWMgXCJza2Jtb2RcIiBhY3RpdmF0aW9uIOKAkyBgTkVUX0FDVF9TS0JNT0RgLiBUaGF0IHN5bmVyZ3kgZmVlbHMgcmlnaHQuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGludm9sdmVkLCBJIHNob3VsZCBxdWlja2x5IGp1bXAgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGBuZXQvc2NoZWQvYWN0X3NrYm1vZC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgb3Igb3Zlcmxvb2tlZCBkZXRhaWxzIGluIHRoYXQgc3BlY2lmaWMgbW9kdWxlIHJlbGF0ZWQgdG8gdGhpcyBhY3RpdmF0aW9uIGZsb3cuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciBhbGwgYmFzZXMgdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgY29uZmxpY3RzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjIyLjAzNjU2MjY3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzMzEwMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYy4qIHRjZl9za2Jtb2RfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9hY3Rfc2tibW9kLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9za2Jtb2QuYz0xMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHNrYm1vZF9wb2xpY3lbVENBX1NLQk1PRF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMTExLVxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmM6MTEyOnN0YXRpYyBpbnQgdGNmX3NrYm1vZF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMTEzLVxcdFxcdFxcdCAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTIzNy1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jOjIzODpzdGF0aWMgdm9pZCB0Y2Zfc2tibW9kX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYSlcXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTIzOS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTI0Ny1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jOjI0ODpzdGF0aWMgaW50IHRjZl9za2Jtb2RfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmMtMjQ5LVxcdFxcdFxcdCAgIGludCBiaW5kLCBpbnQgcmVmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzoyMi4xMDE4OTg3MjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2ODc1MzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCBpdDpcblxuKipBbmFseXppbmcgdGhlIGB0Y2Zfc2tibW9kX2FjdGAgS2VybmVsIE1vZHVsZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGB0Y2Zfc2tibW9kX2FjdGAgZnVuY3Rpb24uIFRoYXQncyB0aGUgcHJpbWFyeSB0aGluZyBiZWluZyB0b3VjaGVkLiBJIHNlZSB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGB0Y2Zfc2tibW9kX2FjdGAgaXRzZWxmIGFuZCBhbHNvIGFkZHMgdGhpcyBgc2tibW9kX2Vuc3VyZV93cml0YWJsZWAgZnVuY3Rpb24uIFRoYXQncyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3by4gQmFzZWQgb24gdGhlIGRvY3VtZW50YXRpb24sIGB0Y2Zfc2tibW9kX2FjdGAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYWN0aW9uLCB3aGljaCB0ZWxscyBtZSBpdCdzIGxpa2VseSBhIGNyaXRpY2FsIGZ1bmN0aW9uIGluIHRoZSBtb2R1bGUncyBleGVjdXRpb24gcGF0aC5cblxuTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gd2hhdCB0aGUgbmV3IGZ1bmN0aW9uICpkb2VzKiwgSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgaXRzIHNjb3BlLiBJIHNob3VsZCBjaGVjayBpZiBgdGNmX3NrYm1vZF9hY3RgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSWYgaXQgaXNuJ3Qgc3RhdGljLCBpdCdzIHBvc3NpYmxlIHRoaXMgY2hhbmdlIGhhcyB3aWRlciBpbXBsaWNhdGlvbnMgdGhhbiBpbW1lZGlhdGVseSBhcHBhcmVudCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFVuZGVyc3RhbmRpbmcgdGhlIHN0YXRpYyBsaW5rYWdlIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzIG9mIHRoaXMgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDg0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MjYuMzcwNjU0NTgzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODkyOTM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2Zfc2tibW9kX2FjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X3NrYm1vZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3Rfc2tibW9kLmM9MjU9c3RhdGljIGludCBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4pXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTM2LVxcbm5ldC9zY2hlZC9hY3Rfc2tibW9kLmM6Mzc6VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYy0zOC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jPTI4OT1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NrYm1vZF9vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTI5Mi1cXHQub3duZXJcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxubmV0L3NjaGVkL2FjdF9za2Jtb2QuYzoyOTM6XFx0LmFjdFxcdFxcdD1cXHR0Y2Zfc2tibW9kX2FjdCxcXG5uZXQvc2NoZWQvYWN0X3NrYm1vZC5jLTI5NC1cXHQuZHVtcFxcdFxcdD1cXHR0Y2Zfc2tibW9kX2R1bXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjI2LjQzOTU5MzYwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY3MTcxMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdCguLi4pYC4gVGhlIGBUQ19JTkRJUkVDVF9TQ09QRWAgbWFjcm8gdXN1YWxseSByZXNvbHZlcyB0byBzb21ldGhpbmcgbGlrZSBgX193ZWFrYCwgYnV0IHRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0J3MgKm5vdCogc3RhdGljLiBUaGF0IHRlbGxzIG1lIGB0Y2Zfc2tibW9kX2FjdGAgaXMgYSByZWFsbHkgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gd2hlbiBJJ20gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cbk15IHJlYXNvbmluZz8gV2VsbCwgdGhlIGRlc2NyaXB0aW9uIHNheXMgdGhpcyBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgYHNrYm1vZGAgdGMgYWN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGludm9sdmUgYHNrYl9lbnN1cmVfd3JpdGFibGVgIGFuZCBuZWdhdGl2ZSBvZmZzZXRzLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCB0b3VjaGVzIGNvcmUgbmV0d29yayBwYWNrZXQgc2NoZWR1bGluZyDigJMgbWVhbmluZyB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGltcGFjdCBwZXJmb3JtYW5jZS4gQW5kIGJlY2F1c2Ugd2UncmUgdGFsa2luZyBhYm91dCBhIFRDIGFjdGlvbiwgSSBrbm93IGl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSB0YyBuZXRsaW5rIGludGVyZmFjZS4gVGhpcyBpcyBzb21ldGhpbmcgSSdsbCBuZWVkIHRvIGtlZXAgaW4gbWluZCByZWdhcmRpbmcgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLlxuXG5CYXNlZCBvbiB0aGUgbWV0YWRhdGEsIEkgc2VlIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBgTkVUX0FDVF9TS0JNT0RgIGFuZCBgTkVUX0NMU19BQ1RgLiBUaGUgYEZvY3VzU3ltYm9sc2AgY29uZmlybXMgbXkgaW5pdGlhbCBpbnN0aW5jdCBvZiBgdGNmX3NrYm1vZF9hY3RgLiBBbmQgZmluYWxseSwgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIHRlbGxzIG1lIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgYSB0aG9yb3VnaCBleGFtaW5hdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY4NywiT3V0cHV0VG9rZW5zIjoxMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MzEuMzA2NzY3ODIyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNTQzMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX1NLQk1PRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2Zfc2tibW9kX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBza2Jtb2QgdGMgYWN0aW9uIHRvIGNvcnJlY3RseSBoYW5kbGUgbmVnYXRpdmUgb2Zmc2V0cyB3aGVuIGNhbGxpbmcgc2tiX2Vuc3VyZV93cml0YWJsZS4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhY2tldCBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIHRjIG5ldGxpbmsgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfU0tCTU9EXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9za2Jtb2RfYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNrYm1vZCB0YyBhY3Rpb24gdG8gY29ycmVjdGx5IGhhbmRsZSBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gY2FsbGluZyBza2JfZW5zdXJlX3dyaXRhYmxlLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGFja2V0IHNjaGVkdWxpbmcgbG9naWMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgdGMgbmV0bGluayBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDIyOjU3OjMxLjQ1NzMyMDg3NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5ODMzMzQzODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQyMjo1NzozMS40NTgzMjk2NzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTc5ODIzMTk3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGluIGBhY3Rfc2tibW9kYCB3aGVyZSBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3YXMgaW5jb3JyZWN0bHkgdXNlZCB0byBlbnN1cmUgdGhlIE1BQyBoZWFkZXIgaXMgd3JpdGFibGUuIEJlY2F1c2UgdGhlIE1BQyBoZWFkZXIgY2FuIGJlIGxvY2F0ZWQgaW4gdGhlIHNrYiBoZWFkcm9vbSAoYXQgYSBuZWdhdGl2ZSBvZmZzZXQgcmVsYXRpdmUgdG8gYHNrYi1cXHUwMDNlZGF0YWApLCBjYWxsaW5nIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIHdpdGgganVzdCB0aGUgaGVhZGVyIGxlbmd0aCBkb2VzIG5vdCBjb3JyZWN0bHkgdW5zaGFyZSBvciBwdWxsIHRoZSBNQUMgaGVhZGVyIGlmIGl0J3MgYXQgYSBuZWdhdGl2ZSBvZmZzZXQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKClgIHdoaWNoIGNvcnJlY3RseSBoYW5kbGVzIG5lZ2F0aXZlIG9mZnNldHMgYnkgY2FsbGluZyBgc2tiX2NvdygpYCBmb3IgdGhlIGhlYWRyb29tIGFuZCBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCBmb3IgdGhlIGRhdGEgcG9ydGlvbi5cXG5cXG5UaGlzIGlzIGEgZml4IGZvciBhIHNoYXJlZCBidWZmZXIgbW9kaWZpY2F0aW9uICh3cml0aW5nIHRvIGNsb25lZCBza2IgZGF0YSkgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGluIHRoZSBza2IgaGVhZHJvb20uIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHdyaXRlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludm9sdmUgY29weWluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MDQ2ZDJkMjIwNTliZWRhNTRkNWUzY2M5YjFiNWU2MDA2YWQ5MDAxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMjI6NTY6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NrYm1vZC5jIGIvbmV0L3NjaGVkL2FjdF9za2Jtb2QuY1xuaW5kZXggYTQ2NGIwYTNjMWI4MS4uODVmNGVkMDI5MWI1MSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbisrKyBiL25ldC9zY2hlZC9hY3Rfc2tibW9kLmNcbkBAIC0yMiwxMyArMjIsMjQgQEBcbiBcbiBzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NrYm1vZF9vcHM7XG4gXG4rc3RhdGljIGludCBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4pXG4re1xuK1x0aWYgKG9mZnNldCBcdTAwM2MgMCkge1xuK1x0XHRpZiAoc2tiX2Nvdyhza2IsIC1vZmZzZXQpKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRpZiAob2Zmc2V0ICsgbGVuIFx1MDAzZSAwKVxuK1x0XHRcdHJldHVybiBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0ICsgbGVuKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRyZXR1cm4gc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCArIGxlbik7XG4rfVxuK1xuIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxuIHtcbiBcdHN0cnVjdCB0Y2Zfc2tibW9kICpkID0gdG9fc2tibW9kKGEpO1xuIFx0c3RydWN0IHRjZl9za2Jtb2RfcGFyYW1zICpwO1xuLVx0aW50IG1heF9lZGl0X2xlbiwgZXJyO1xuIFx0dTY0IGZsYWdzO1xuIFxuIFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmQtXHUwMDNldGNmX3RtKTtcbkBAIC0zOCw3ICs0OSw2IEBAIFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2Zfc2tibW9kX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHVubGlrZWx5KHAtXHUwMDNlYWN0aW9uID09IFRDX0FDVF9TSE9UKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0bWF4X2VkaXRfbGVuID0gc2tiX21hY19oZWFkZXJfbGVuKHNrYik7XG4gXHRmbGFncyA9IHAtXHUwMDNlZmxhZ3M7XG4gXG4gXHQvKiB0Y2Zfc2tibW9kX2luaXQoKSBndWFyYW50ZWVzIFwiZmxhZ3NcIiB0byBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbkBAIC01MiwxOSArNjIsMjAgQEAgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9za2Jtb2RfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHN3aXRjaCAoc2tiX3Byb3RvY29sKHNrYiwgdHJ1ZSkpIHtcbiBcdFx0Y2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6XG4gXHRcdGNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6XG4tXHRcdFx0bWF4X2VkaXRfbGVuICs9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbitcdFx0XHRpZiAoc2tibW9kX2Vuc3VyZV93cml0YWJsZShza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpLFxuK1x0XHRcdFx0XHRcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSkpXG4rXHRcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdH0gZWxzZSBpZiAoIXNrYi1cdTAwM2VkZXYgfHwgc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUikge1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXhfZWRpdF9sZW4pO1xuLVx0aWYgKHVubGlrZWx5KGVycikpIC8qIGJlc3QgcG9saWN5IGlzIHRvIGRyb3Agb24gdGhlIGZsb29yICovXG4tXHRcdGdvdG8gZHJvcDtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0VUSEVSKVxuK1x0XHRcdGdvdG8gb3V0O1xuIFxuK1x0XHRpZiAoc2tibW9kX2Vuc3VyZV93cml0YWJsZShza2IsIHNrYl9tYWNfb2Zmc2V0KHNrYiksIEVUSF9ITEVOKSlcbitcdFx0XHRnb3RvIGRyb3A7XG4rXHR9XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFNLQk1PRF9GX0RNQUMpXG4gXHRcdGV0aGVyX2FkZHJfY29weShldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0LCBwLVx1MDAzZWV0aF9kc3QpO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JNT0RfRl9TTUFDKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6MzEuNDU4MzMxMzE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTgyMjg5MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2tibW9kIFBhdGNoIGZvciBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9hY3Rfc2tibW9kLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0Y2Zfc2tibW9kX2FjdGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5IGFyZSB0aGV5IGludHJvZHVjaW5nIHRoaXMgbmV3IGBza2Jtb2RfZW5zdXJlX3dyaXRhYmxlYCBmdW5jdGlvbj8gVGhlIGV4aXN0aW5nIGBza2JfZW5zdXJlX3dyaXRhYmxlYCBzaG91bGQgYmUgc3VmZmljaWVudCwgc28gd2hhdCdzIGdvaW5nIG9uP1xuXG5JdCBhcHBlYXJzIHRoZSBwcm9ibGVtIGxpZXMgaW4gaG93IHRoZXkgd2VyZSBoYW5kbGluZyBuZWdhdGl2ZSBvZmZzZXRzLiBUaGUgY29kZSBub3cgY29ycmVjdGx5IGFkZHJlc3NlcyB0aGlzIGJ5IHVzaW5nIGBza2JfY293YCBmb3IgbmVnYXRpdmUgb2Zmc2V0cyBhbmQgdGhlbiBjYWxsaW5nIGBza2JfZW5zdXJlX3dyaXRhYmxlYCBhcHByb3ByaWF0ZWx5LiBXYWl0LCBhIG5lZ2F0aXZlIGBza2JfbWFjX29mZnNldChza2IpYD8gVGhhdCdzIGEgcmVkIGZsYWcuIExldCdzIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGUgY29kZSAqd2FzKiB3b3JraW5nLlxuXG5UaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0IHdhcyBjYWxjdWxhdGluZyBgbWF4X2VkaXRfbGVuYCB1c2luZyBgc2tiX21hY19oZWFkZXJfbGVuYCBhbmQgcG9zc2libHkgYHNrYl9uZXR3b3JrX2hlYWRlcl9sZW5gLiBUaGUgbG9naWMgdGhlbiBjYWxscyBgc2tiX2Vuc3VyZV93cml0YWJsZWAgd2l0aCB0aGlzIGNhbGN1bGF0ZWQgbGVuZ3RoLiBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgYHNrYl9lbnN1cmVfd3JpdGFibGVgIHdvcmtzIHJlbGF0aXZlIHRvIGBza2ItXHUwMDNlZGF0YWAsIHdoaWNoIGlzIHRoZSBzdGFydCBvZiB0aGUgZGF0YSBidWZmZXIuIElmIHRoZSBNQUMgaGVhZGVyIGlzICpiZWZvcmUqIGBza2ItXHUwMDNlZGF0YWAsIG1lYW5pbmcgaXQncyBpbiB0aGUgaGVhZHJvb20sIGBza2JfZW5zdXJlX3dyaXRhYmxlYCB3b24ndCBtYWtlIHRoZSBNQUMgaGVhZGVyIHdyaXRhYmxlLiBJdCB3aWxsIG9ubHkgZW5zdXJlIHRoZSBkYXRhIHBvcnRpb24gaXMgd3JpdGFibGUuXG5cblRoZSBuZXcgY29kZSdzIHVzZSBvZiBgc2tibW9kX2Vuc3VyZV93cml0YWJsZWAgd2l0aCBgc2tiX25ldHdvcmtfb2Zmc2V0YCBhbmQgYHNrYl9tYWNfb2Zmc2V0YCBpcyBhIGZpeC4gSXQgY29ycmVjdHMgdGhlIHByZXZpb3VzIGZsYXcuIEJ5IHNlcGFyYXRlbHkgaGFuZGxpbmcgdGhlIE1BQyBhbmQgbmV0d29yayBoZWFkZXJzLCBlbnN1cmluZyB0aGUgd3JpdGFiaWxpdHkgb2YgdGhlIHNrYiAqaW5jbHVkaW5nKiB0aGUgaGVhZHJvb20sIHRoZSBwYXRjaCBub3cgcHJldmVudHMgdGhlIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgY29ycnVwdGlvbiB0aGF0IGNvdWxkIG9jY3VyIGR1ZSB0byBtb2RpZnlpbmcgYSBzaGFyZWQgYnVmZmVyLiBUaGUgY29kZSBub3cgZXhwbGljaXRseSB1c2VzIGBza2JfY293YCBhbmQgYHNrYl9lbnN1cmVfd3JpdGFibGVgLCB3aGljaCBhcmUgY29ycmVjdCB0b29scyBmb3IgdGhpcyBzaXR1YXRpb24uXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gZm9yIHNlY3VyaXR5IGlzIGFsd2F5cyB3aGV0aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGF0IHBsYXkgaGVyZS4gVGhpcyBwYXRjaCBpc24ndCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSAqcGVyIHNlKi4gSXQncyBhYm91dCBlbnN1cmluZyBzaGFyZWQgbWVtb3J5IGlzbid0IG1vZGlmaWVkLiBUaGlzIGlzIGEgc3RhbmRhcmQgc2tiIGNvdy91bnNoYXJlIGlzc3VlLiBTbywgdGhlIGJ1ZyBpcyBhIHNoYXJlZCBtZW1vcnkgbW9kaWZpY2F0aW9uLCBvciBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIHRoZSBoZWFkcm9vbSB3YXNuJ3QgbGFyZ2UgZW5vdWdoLCBhbHRob3VnaCBgc2tiX2Nvd2Agc2hvdWxkIGhhbmRsZSB0aGUgaGVhZHJvb20uXG5cbkxldCdzIGRvIGEgcXVpY2sgc2NhbiBmb3IgYW55dGhpbmcgdGhhdCAqY291bGQqIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV2ZW4gaW5kaXJlY3RseS4gYHNrYl9jb3dgIHdpbGwgYWxsb2NhdGUgbWVtb3J5IGlmIGl0IG5lZWRzIHRvLCBidXQgaXQgd2lsbCBjb3B5IHZhbGlkIGRhdGEsIHNvIHRoZSBuZXcgbWVtb3J5IHNob3VsZCBiZSBpbml0aWFsaXplZC4gYHNrYl9lbnN1cmVfd3JpdGFibGVgIG1heSBwdWxsIGRhdGEgZnJvbSBmcmFnbWVudHMsIGJ1dCB0aGF0IGRhdGEgc2hvdWxkIGJlIGluaXRpYWxpemVkLiBTbywgSSBzZWUgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmJlaW5nIGV4cG9zZWQqIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxuXG5Ob3csIGdpdmVuIHRoZSBLTVNBTiBndWlkYW5jZTpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuVGhpcyBidWcgaXMgYSBjYXNlIG9mIHNoYXJlZCBtZW1vcnkgYmVpbmcgbW9kaWZpZWQgb3IgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgcGF0Y2ggZG9lcyBub3QgcmVsYXRlIHRvIG9yIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIGEgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIGJ1dCBpdCBjYW4gYmUgZGV0ZWN0ZWQgYnkgS0FTQU4gaWYgaXQncyBvdXQtb2YtYm91bmRzLCBvciBpdCdzIGp1c3QgYSBmdW5jdGlvbmFsIGJ1Zy5cblxuU28sIGluIHN1bW1hcnk6IFRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYWN0X3NrYm1vZGAgd2hlcmUgYHNrYl9lbnN1cmVfd3JpdGFibGVgIHdhcyBiZWluZyBtaXN1c2VkIGFuZCBkb2VzIG5vdCBwcm90ZWN0IHRoZSBNQUMgaGVhZGVyIGlmIGl0IGlzIGluIHRoZSBza2IgaGVhZHJvb20uIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgb2Zmc2V0cywgZW5zdXJpbmcgdGhhdCB0aGUgTUFDIGhlYWRlciAoaGVhZHJvb20pIGlzIHdyaXRhYmxlIGJlZm9yZSBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgaW5mbHVlbmNlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NiwiT3V0cHV0VG9rZW5zIjoyNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMjI6NTc6NDkuNDQwNjI2OTI2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSBpbiBgYWN0X3NrYm1vZGAgd2hlcmUgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgd2FzIGluY29ycmVjdGx5IHVzZWQgdG8gZW5zdXJlIHRoZSBNQUMgaGVhZGVyIGlzIHdyaXRhYmxlLiBCZWNhdXNlIHRoZSBNQUMgaGVhZGVyIGNhbiBiZSBsb2NhdGVkIGluIHRoZSBza2IgaGVhZHJvb20gKGF0IGEgbmVnYXRpdmUgb2Zmc2V0IHJlbGF0aXZlIHRvIGBza2ItXFx1MDAzZWRhdGFgKSwgY2FsbGluZyBgc2tiX2Vuc3VyZV93cml0YWJsZSgpYCB3aXRoIGp1c3QgdGhlIGhlYWRlciBsZW5ndGggZG9lcyBub3QgY29ycmVjdGx5IHVuc2hhcmUgb3IgcHVsbCB0aGUgTUFDIGhlYWRlciBpZiBpdCdzIGF0IGEgbmVnYXRpdmUgb2Zmc2V0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgc2tibW9kX2Vuc3VyZV93cml0YWJsZSgpYCB3aGljaCBjb3JyZWN0bHkgaGFuZGxlcyBuZWdhdGl2ZSBvZmZzZXRzIGJ5IGNhbGxpbmcgYHNrYl9jb3coKWAgZm9yIHRoZSBoZWFkcm9vbSBhbmQgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgZm9yIHRoZSBkYXRhIHBvcnRpb24uXFxuXFxuVGhpcyBpcyBhIGZpeCBmb3IgYSBzaGFyZWQgYnVmZmVyIG1vZGlmaWNhdGlvbiAod3JpdGluZyB0byBjbG9uZWQgc2tiIGRhdGEpIG9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2VzcyBpbiB0aGUgc2tiIGhlYWRyb29tLiBUaGVzZSB0eXBlcyBvZiBidWdzIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyB3cml0ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvcHlpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW4gYGFjdF9za2Jtb2RgIHdoZXJlIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIHdhcyBpbmNvcnJlY3RseSB1c2VkIHRvIGVuc3VyZSB0aGUgTUFDIGhlYWRlciBpcyB3cml0YWJsZS4gQmVjYXVzZSB0aGUgTUFDIGhlYWRlciBjYW4gYmUgbG9jYXRlZCBpbiB0aGUgc2tiIGhlYWRyb29tIChhdCBhIG5lZ2F0aXZlIG9mZnNldCByZWxhdGl2ZSB0byBgc2tiLVxcdTAwM2VkYXRhYCksIGNhbGxpbmcgYHNrYl9lbnN1cmVfd3JpdGFibGUoKWAgd2l0aCBqdXN0IHRoZSBoZWFkZXIgbGVuZ3RoIGRvZXMgbm90IGNvcnJlY3RseSB1bnNoYXJlIG9yIHB1bGwgdGhlIE1BQyBoZWFkZXIgaWYgaXQncyBhdCBhIG5lZ2F0aXZlIG9mZnNldC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHNrYm1vZF9lbnN1cmVfd3JpdGFibGUoKWAgd2hpY2ggY29ycmVjdGx5IGhhbmRsZXMgbmVnYXRpdmUgb2Zmc2V0cyBieSBjYWxsaW5nIGBza2JfY293KClgIGZvciB0aGUgaGVhZHJvb20gYW5kIGBza2JfZW5zdXJlX3dyaXRhYmxlKClgIGZvciB0aGUgZGF0YSBwb3J0aW9uLlxcblxcblRoaXMgaXMgYSBmaXggZm9yIGEgc2hhcmVkIGJ1ZmZlciBtb2RpZmljYXRpb24gKHdyaXRpbmcgdG8gY2xvbmVkIHNrYiBkYXRhKSBvciBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gdGhlIHNrYiBoZWFkcm9vbS4gVGhlc2UgdHlwZXMgb2YgYnVncyBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgd3JpdGVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowq9h2d[1] Phase: Succeeded StartedAt: 2026-08-18 22:58:01 +0000 UTC FinishedAt: 2026-08-18 22:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 22:58:01 +0000 UTC FinishedAt: 2026-08-18 22:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2] Phase: Succeeded StartedAt: 2026-08-18 22:58:01 +0000 UTC FinishedAt: 2026-08-19 02:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 22:58:01 +0000 UTC FinishedAt: 2026-08-19 02:40:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 22:58:01 +0000 UTC FinishedAt: 2026-08-18 22:58:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 22:58:01 +0000 UTC FinishedAt: 2026-08-18 22:58:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq9h2d/series-workflowq9h2d-convert-artifact-2479262439/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 22:58:11 +0000 UTC FinishedAt: 2026-08-18 23:18:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 22:58:11 +0000 UTC FinishedAt: 2026-08-18 23:18:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e9f1b972-de6a-466f-ab46-7cf5143940e6,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-workflowq9h2d/series-workflowq9h2d-convert-artifact-2479262439/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": "6e54f8d2-516d-4911-a0cc-ceba18678b3d", "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-workflowq9h2d/series-workflowq9h2d-build-action-2457960829/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 22:58:11 +0000 UTC FinishedAt: 2026-08-18 23:17:39 +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:*e9f1b972-de6a-466f-ab46-7cf5143940e6,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-workflowq9h2d/series-workflowq9h2d-convert-artifact-2479262439/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": "6e54f8d2-516d-4911-a0cc-ceba18678b3d", "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-workflowq9h2d/series-workflowq9h2d-build-action-2457960829/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 23:18:04 +0000 UTC FinishedAt: 2026-08-18 23:18:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 23:18:04 +0000 UTC FinishedAt: 2026-08-18 23:18:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 23:18:04 +0000 UTC FinishedAt: 2026-08-18 23:18:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 23:18:04 +0000 UTC FinishedAt: 2026-08-18 23:18:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq9h2d/series-workflowq9h2d-convert-artifact-2920841622/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 23:18:14 +0000 UTC FinishedAt: 2026-08-18 23:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 23:18:14 +0000 UTC FinishedAt: 2026-08-18 23:20:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6e54f8d2-516d-4911-a0cc-ceba18678b3d,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-workflowq9h2d/series-workflowq9h2d-build-action-2457960829/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-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 23:20:28 +0000 UTC FinishedAt: 2026-08-18 23:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 23:20:28 +0000 UTC FinishedAt: 2026-08-18 23:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 23:20:28 +0000 UTC FinishedAt: 2026-08-18 23:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 23:20:28 +0000 UTC FinishedAt: 2026-08-18 23:37:06 +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:*e9f1b972-de6a-466f-ab46-7cf5143940e6,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-workflowq9h2d/series-workflowq9h2d-convert-artifact-2920841622/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": "e379e257-d944-4431-a6df-f9eeb1de15ae", "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-workflowq9h2d/series-workflowq9h2d-build-action-405226138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 23:20:28 +0000 UTC FinishedAt: 2026-08-18 23:36:56 +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:*e9f1b972-de6a-466f-ab46-7cf5143940e6,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-workflowq9h2d/series-workflowq9h2d-convert-artifact-2920841622/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": "e379e257-d944-4431-a6df-f9eeb1de15ae", "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-workflowq9h2d/series-workflowq9h2d-build-action-405226138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 23:37:06 +0000 UTC FinishedAt: 2026-08-18 23:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 23:37:06 +0000 UTC FinishedAt: 2026-08-18 23:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 23:37:06 +0000 UTC FinishedAt: 2026-08-18 23:39:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 23:37:06 +0000 UTC FinishedAt: 2026-08-18 23:39:03 +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:*e379e257-d944-4431-a6df-f9eeb1de15ae,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-workflowq9h2d/series-workflowq9h2d-build-action-405226138/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-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 23:39:13 +0000 UTC FinishedAt: 2026-08-19 02:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 23:39:13 +0000 UTC FinishedAt: 2026-08-19 02:40:48 +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":["tcf_skbmod_act"],"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:*6e54f8d2-516d-4911-a0cc-ceba18678b3d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e379e257-d944-4431-a6df-f9eeb1de15ae,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-workflowq9h2d/series-workflowq9h2d-build-action-2457960829/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-workflowq9h2d/series-workflowq9h2d-build-action-405226138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 23:39:13 +0000 UTC FinishedAt: 2026-08-18 23:39:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 23:39:13 +0000 UTC FinishedAt: 2026-08-18 23:39:18 +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":["tcf_skbmod_act"],"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-workflowq9h2d/series-workflowq9h2d-convert-artifact-3503156539/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 23:39:13 +0000 UTC FinishedAt: 2026-08-18 23:39:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 23:39:13 +0000 UTC FinishedAt: 2026-08-18 23:39:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 23:39:14 +0000 UTC FinishedAt: 2026-08-18 23:39:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 23:39:24 +0000 UTC FinishedAt: 2026-08-19 02:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9h2d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_skbmod_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_SKBMOD","NET_CLS_ACT"],"series_id":"0b91ff46-9947-4fe5-a45c-4f977fe351bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 23:39:24 +0000 UTC FinishedAt: 2026-08-19 02:40:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6e54f8d2-516d-4911-a0cc-ceba18678b3d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e379e257-d944-4431-a6df-f9eeb1de15ae,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-workflowq9h2d/series-workflowq9h2d-build-action-2457960829/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-workflowq9h2d/series-workflowq9h2d-build-action-405226138/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-workflowq9h2d/series-workflowq9h2d-convert-artifact-3503156539/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,}