Name: series-workflowq4fbz Phase: Succeeded StartedAt: 2026-09-08 09:54:57 +0000 UTC FinishedAt: 2026-09-08 14:05:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[0] Phase: Succeeded StartedAt: 2026-09-08 09:54:57 +0000 UTC FinishedAt: 2026-09-08 10:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 09:54:57 +0000 UTC FinishedAt: 2026-09-08 10:20:11 +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": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "SMC_DIAG", "INFINIBAND", "DIBS", "DIBS_LO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "SMC_DIAG", "INFINIBAND", "DIBS", "DIBS_LO" ], "series_id": "4e9073e7-7741-4d22-8d71-d3d6abda715d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_conn_unhash", "smc_conn_free", "__smc_release", "smc_conn_create", "smc_unhash_sk", "smc_release" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtTTUNfRElBRyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uX3VuaGFzaCYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9mcmVlJiMzNDssCiAgICAmIzM0O19fc21jX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c21jX2Nvbm5fY3JlYXRlJiMzNDssCiAgICAmIzM0O3NtY191bmhhc2hfc2smIzM0OywKICAgICYjMzQ7c21jX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHNvY2tldCB0ZWFyZG93biAoc21jX2Nvbm5fZnJlZSkgYW5kIHNvY2tldCBkaWFnbm9zdGljcyAoc21jX2RpYWcpIGJ5IHVuaGFzaGluZyB0aGUgc29ja2V0IGVhcmxpZXIgYW5kIHRyYWNraW5nIHRoZSB1bmhhc2ggc3RhdGUgdmlhIGEgbmV3IGB1bmhhc2hlZGAgZmxhZyBpbiBgc3RydWN0IHNtY19jb25uZWN0aW9uYC5cblxuMS4gVGhlIG5ldyBgdW5oYXNoZWRgIGZpZWxkIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgc21jX3NvY2tgIHZpYSBgc2tfYWxsb2MoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkpIGFuZCBpcyBleHBsaWNpdGx5IHJlc2V0IHRvIDAgaW4gYHNtY19jb25uX2NyZWF0ZSgpYC5cbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXG4zLiBObyBrZXJuZWwtdG8tdXNlciBjb3B5IHN0cnVjdHVyZXMgKHN1Y2ggYXMgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgc3RydWN0dXJlcykgaGF2ZSBoYWQgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyBpbnRyb2R1Y2VkLlxuNC4gVGhlIHJhY2UgY29uZGl0aW9uIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGhhc2ggbWFuYWdlbWVudCBhbmQgbGluayBncm91cCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgaW4gdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuIEl0IGludHJvZHVjZXMgc21jX2Nvbm5fdW5oYXNoKCkgd2l0aCBhIG5ldyBjb25uLVx1MDAzZXVuaGFzaGVkIGZsYWcgdG8gZW5zdXJlIG5vbi1mYWxsYmFjayBTTUMgc29ja2V0cyBhcmUgdW5oYXNoZWQgZXhhY3RseSBvbmNlIGJlZm9yZSBsaW5rIGdyb3VwL2xpbmsgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBzb2NrZXQgZGlhZ25vc3RpYyBkdW1wcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBuZXR3b3JraW5nIHNvY2tldCBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNvZGUgYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBzb2NrZXQgYW5kIHNvY2tfZGlhZyBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjg2NjliZjJiMDRmYjA5NzAxZmY1ZTRmYmUwYWZjZGMwNjAyMDIzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTA6MTg6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9hZl9zbWMuYyBiL25ldC9zbWMvYWZfc21jLmNcbmluZGV4IGU5ZjkzYjNhYjQzNWIuLjhjNzgxYTRhNDQ4NWIgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL2FmX3NtYy5jXG5AQCAtMzEwLDcgJiM0MzszMTAsMTUgQEAgc3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxuIFx0XHRzbWNfcmVzdG9yZV9mYWxsYmFja19jaGFuZ2VzKHNtYyk7XG4gXHR9XG4gXG4tXHRzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzayk7XG4mIzQzO1x0LyogRmFsbGJhY2sgc29ja2V0cyBuZXZlciBjYWxsIHNtY19jb25uX2ZyZWUoKSwgc28gdW5oYXNoIGRpcmVjdGx5LlxuJiM0MztcdCAqIE5vbi1mYWxsYmFjayBzb2NrZXRzIHVzZSBzbWNfY29ubl91bmhhc2goKSBzbyB0aGF0IHRoZSBjb25uLVx1MDAzZXVuaGFzaGVkXG4mIzQzO1x0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXG4mIzQzO1x0ICogZmlyc3QgKGUuZy4gdmlhIHNtY19jb25uX2tpbGwoKSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNtYy1cdTAwM2V1c2VfZmFsbGJhY2spXG4mIzQzO1x0XHRzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzayk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c21jX2Nvbm5fdW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbiBcbiBcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEKSB7XG4gXHRcdGlmIChzbWMtXHUwMDNlY2xjc29jaykge1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jLmggYi9uZXQvc21jL3NtYy5oXG5pbmRleCA0MjdiNmQ2M2I5OTMxLi4wNzUzMTIyNzg4MzVjIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWMuaFxuQEAgLTI3OSw2ICYjNDM7Mjc5LDcgQEAgc3RydWN0IHNtY19jb25uZWN0aW9uIHtcbiBcdHU2NFx0XHRcdHBlZXJfdG9rZW47XHQvKiBTTUMtRCB0b2tlbiBvZiBwZWVyICovXG4gXHR1OFx0XHRcdGtpbGxlZDtcdFx0LyogYWJub3JtYWwgdGVybWluYXRpb24gKi9cbiBcdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuJiM0MztcdHU4XHRcdFx0dW5oYXNoZWQ7XHQvKiByZW1vdmVkIGZyb20gc29jayBoYXNoICovXG4gXHR1OFx0XHRcdG91dF9vZl9zeW5jO1x0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IDA0YWVkZDk1NzU0M2EuLmUzMDIyMjFjMzVlM2YgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTEyNTEsNiAmIzQzOzEyNTEsMjAgQEAgc3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHR9XG4gfVxuIFxuJiM0MzsvKiB1bmhhc2ggdGhlIHNvY2tldCBvbmNlOyBvd25zIHRoZSBzaW5nbGUgdW5oYXNoIGZvciBhbGwgbm9uLWZhbGxiYWNrIHBhdGhzLlxuJiM0MzsgKiBFdmVyeSBjYWxsZXIgaG9sZHMgbG9ja19zb2NrIGZvciB0aGlzIHNvY2tldCwgc28gY29ubi1cdTAwM2V1bmhhc2hlZCBpcyBwcm90ZWN0ZWRcbiYjNDM7ICogYnkgdGhhdCBsb2NrIGFuZCBubyBzZXBhcmF0ZSBzeW5jaHJvbmlzYXRpb24gaXMgbmVlZGVkLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjb25uLVx1MDAzZXVuaGFzaGVkKSB7XG4mIzQzO1x0XHRjb25uLVx1MDAzZXVuaGFzaGVkID0gMTtcbiYjNDM7XHRcdHNtYy1cdTAwM2Vzay5za19wcm90LVx1MDAzZXVuaGFzaChcdTAwMjZzbWMtXHUwMDNlc2spO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuIHtcbkBAIC0xMjYzLDYgJiM0MzsxMjc3LDExIEBAIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4gXHRcdHJldHVybjtcbiBcbiBcdGNvbm4tXHUwMDNlZnJlZWQgPSAxO1xuJiM0MztcdC8qIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgbGdyL2xuayByZWZzIHNvIHRoZSBkaWFnIHJlYWRlciwgd2hpY2hcbiYjNDM7XHQgKiBpdGVyYXRlcyB1bmRlciB0aGUgc29ja2V0IGhhc2ggcmVhZF9sb2NrLCBjYW5ub3Qgc2VlIGEgY29ubmVjdGlvbiB3aG9zZVxuJiM0MztcdCAqIGxnciBvciBsbmsgaXMgYmVpbmcgZnJlZWQgY29uY3VycmVudGx5LlxuJiM0MztcdCAqL1xuJiM0MztcdHNtY19jb25uX3VuaGFzaChjb25uKTtcbiBcdGlmICghc21jX2Nvbm5fbGdyX3ZhbGlkKGNvbm4pKVxuIFx0XHQvKiBDb25uZWN0aW9uIGhhcyBhbHJlYWR5IHVucmVnaXN0ZXJlZCBmcm9tXG4gXHRcdCAqIGxpbmsgZ3JvdXAuXG5AQCAtMjA1Myw2ICYjNDM7MjA3Miw3IEBAIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4gXHRpZiAoIWNvbm4tXHUwMDNlbGdyLVx1MDAzZWlzX3NtY2QpXG4gXHRcdHNtY3JfbGlua19ob2xkKGNvbm4tXHUwMDNlbG5rKTsgLyogbGlua19wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXG4gXHRjb25uLVx1MDAzZWZyZWVkID0gMDtcbiYjNDM7XHRjb25uLVx1MDAzZXVuaGFzaGVkID0gMDtcbiBcdGNvbm4tXHUwMDNlbG9jYWxfdHhfY3RybC5jb21tb24udHlwZSA9IFNNQ19DRENfTVNHX1RZUEU7XG4gXHRjb25uLVx1MDAzZWxvY2FsX3R4X2N0cmwubGVuID0gU01DX1dSX1RYX1NJWkU7XG4gXHRjb25uLVx1MDAzZXVyZ19zdGF0ZSA9IFNNQ19VUkdfUkVBRDtcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmggYi9uZXQvc21jL3NtY19jb3JlLmhcbmluZGV4IDVjMThmMDhhNGM4YTUuLmYyM2Q2MGFlZjBiNzkgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuaFxuQEAgLTU5NSw2ICYjNDM7NTk1LDcgQEAgdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgc21jX3JtYl9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiBpbnQgc21jX3ZsYW5fYnlfdGNwc2soc3RydWN0IHNvY2tldCAqY2xjc29jaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XG4gXG4mIzQzO3ZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG4gdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG4gaW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XG4gaW50IHNtY19jb3JlX2luaXQodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1NNQ19ESUFHJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtESUJTX0xPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2Nvbm5fdW5oYXNoJiMzNDssCiAgICAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAgICYjMzQ7X19zbWNfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7LAogICAgJiMzNDtzbWNfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGhhc2ggbWFuYWdlbWVudCBhbmQgbGluayBncm91cCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgaW4gdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuIEl0IGludHJvZHVjZXMgc21jX2Nvbm5fdW5oYXNoKCkgd2l0aCBhIG5ldyBjb25uLVx1MDAzZXVuaGFzaGVkIGZsYWcgdG8gZW5zdXJlIG5vbi1mYWxsYmFjayBTTUMgc29ja2V0cyBhcmUgdW5oYXNoZWQgZXhhY3RseSBvbmNlIGJlZm9yZSBsaW5rIGdyb3VwL2xpbmsgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBzb2NrZXQgZGlhZ25vc3RpYyBkdW1wcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBuZXR3b3JraW5nIHNvY2tldCBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNvZGUgYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBzb2NrZXQgYW5kIHNvY2tfZGlhZyBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjg2NjliZjJiMDRmYjA5NzAxZmY1ZTRmYmUwYWZjZGMwNjAyMDIzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTA6MTg6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc21jL2FmX3NtYy5jIGIvbmV0L3NtYy9hZl9zbWMuYwppbmRleCBlOWY5M2IzYWI0MzViLi44Yzc4MWE0YTQ0ODViIDEwMDY0NAotLS0gYS9uZXQvc21jL2FmX3NtYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvYWZfc21jLmMKQEAgLTMxMCw3ICYjNDM7MzEwLDE1IEBAIHN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYykKIAkJc21jX3Jlc3RvcmVfZmFsbGJhY2tfY2hhbmdlcyhzbWMpOwogCX0KIAotCXNrLSZndDtza19wcm90LSZndDt1bmhhc2goc2spOwomIzQzOwkvKiBGYWxsYmFjayBzb2NrZXRzIG5ldmVyIGNhbGwgc21jX2Nvbm5fZnJlZSgpLCBzbyB1bmhhc2ggZGlyZWN0bHkuCiYjNDM7CSAqIE5vbi1mYWxsYmFjayBzb2NrZXRzIHVzZSBzbWNfY29ubl91bmhhc2goKSBzbyB0aGF0IHRoZSBjb25uLSZndDt1bmhhc2hlZAomIzQzOwkgKiBmbGFnIGtlZXBzIHRoZSB1bmhhc2ggZXhhY3RseSBvbmNlIGV2ZW4gd2hlbiBzbWNfY29ubl9mcmVlKCkgYWxyZWFkeSByYW4KJiM0MzsJICogZmlyc3QgKGUuZy4gdmlhIHNtY19jb25uX2tpbGwoKSkuCiYjNDM7CSAqLwomIzQzOwlpZiAoc21jLSZndDt1c2VfZmFsbGJhY2spCiYjNDM7CQlzay0mZ3Q7c2tfcHJvdC0mZ3Q7dW5oYXNoKHNrKTsKJiM0MzsJZWxzZQomIzQzOwkJc21jX2Nvbm5fdW5oYXNoKCZhbXA7c21jLSZndDtjb25uKTsKIAogCWlmIChzay0mZ3Q7c2tfc3RhdGUgPT0gU01DX0NMT1NFRCkgewogCQlpZiAoc21jLSZndDtjbGNzb2NrKSB7CmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaAppbmRleCA0MjdiNmQ2M2I5OTMxLi4wNzUzMTIyNzg4MzVjIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtYy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jLmgKQEAgLTI3OSw2ICYjNDM7Mjc5LDcgQEAgc3RydWN0IHNtY19jb25uZWN0aW9uIHsKIAl1NjQJCQlwZWVyX3Rva2VuOwkvKiBTTUMtRCB0b2tlbiBvZiBwZWVyICovCiAJdTgJCQlraWxsZWQ7CQkvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqLwogCXU4CQkJZnJlZWQ7CQkvKiBub3JtYWwgdGVybWluYXRpb24gKi8KJiM0MzsJdTgJCQl1bmhhc2hlZDsJLyogcmVtb3ZlZCBmcm9tIHNvY2sgaGFzaCAqLwogCXU4CQkJb3V0X29mX3N5bmM7CS8qIG91dCBvZiBzeW5jIHdpdGggcGVlciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jCmluZGV4IDA0YWVkZDk1NzU0M2EuLmUzMDIyMjFjMzVlM2YgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmMKQEAgLTEyNTEsNiAmIzQzOzEyNTEsMjAgQEAgc3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sCiAJfQogfQogCiYjNDM7LyogdW5oYXNoIHRoZSBzb2NrZXQgb25jZTsgb3ducyB0aGUgc2luZ2xlIHVuaGFzaCBmb3IgYWxsIG5vbi1mYWxsYmFjayBwYXRocy4KJiM0MzsgKiBFdmVyeSBjYWxsZXIgaG9sZHMgbG9ja19zb2NrIGZvciB0aGlzIHNvY2tldCwgc28gY29ubi0mZ3Q7dW5oYXNoZWQgaXMgcHJvdGVjdGVkCiYjNDM7ICogYnkgdGhhdCBsb2NrIGFuZCBubyBzZXBhcmF0ZSBzeW5jaHJvbmlzYXRpb24gaXMgbmVlZGVkLgomIzQzOyAqLwomIzQzO3ZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7CiYjNDM7CiYjNDM7CWlmICghY29ubi0mZ3Q7dW5oYXNoZWQpIHsKJiM0MzsJCWNvbm4tJmd0O3VuaGFzaGVkID0gMTsKJiM0MzsJCXNtYy0mZ3Q7c2suc2tfcHJvdC0mZ3Q7dW5oYXNoKCZhbXA7c21jLSZndDtzayk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi8KIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pCiB7CkBAIC0xMjYzLDYgJiM0MzsxMjc3LDExIEBAIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pCiAJCXJldHVybjsKIAogCWNvbm4tJmd0O2ZyZWVkID0gMTsKJiM0MzsJLyogVW5oYXNoIGJlZm9yZSBkcm9wcGluZyBsZ3IvbG5rIHJlZnMgc28gdGhlIGRpYWcgcmVhZGVyLCB3aGljaAomIzQzOwkgKiBpdGVyYXRlcyB1bmRlciB0aGUgc29ja2V0IGhhc2ggcmVhZF9sb2NrLCBjYW5ub3Qgc2VlIGEgY29ubmVjdGlvbiB3aG9zZQomIzQzOwkgKiBsZ3Igb3IgbG5rIGlzIGJlaW5nIGZyZWVkIGNvbmN1cnJlbnRseS4KJiM0MzsJICovCiYjNDM7CXNtY19jb25uX3VuaGFzaChjb25uKTsKIAlpZiAoIXNtY19jb25uX2xncl92YWxpZChjb25uKSkKIAkJLyogQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZnJvbQogCQkgKiBsaW5rIGdyb3VwLgpAQCAtMjA1Myw2ICYjNDM7MjA3Miw3IEBAIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpCiAJaWYgKCFjb25uLSZndDtsZ3ItJmd0O2lzX3NtY2QpCiAJCXNtY3JfbGlua19ob2xkKGNvbm4tJmd0O2xuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqLwogCWNvbm4tJmd0O2ZyZWVkID0gMDsKJiM0MzsJY29ubi0mZ3Q7dW5oYXNoZWQgPSAwOwogCWNvbm4tJmd0O2xvY2FsX3R4X2N0cmwuY29tbW9uLnR5cGUgPSBTTUNfQ0RDX01TR19UWVBFOwogCWNvbm4tJmd0O2xvY2FsX3R4X2N0cmwubGVuID0gU01DX1dSX1RYX1NJWkU7CiAJY29ubi0mZ3Q7dXJnX3N0YXRlID0gU01DX1VSR19SRUFEOwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5oIGIvbmV0L3NtYy9zbWNfY29yZS5oCmluZGV4IDVjMThmMDhhNGM4YTUuLmYyM2Q2MGFlZjBiNzkgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmgKQEAgLTU5NSw2ICYjNDM7NTk1LDcgQEAgdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pOwogdm9pZCBzbWNfcm1iX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pOwogaW50IHNtY192bGFuX2J5X3RjcHNrKHN0cnVjdCBzb2NrZXQgKmNsY3NvY2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpOwogCiYjNDM7dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTsKIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pOwogaW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7CiBpbnQgc21jX2NvcmVfaW5pdCh2b2lkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5NwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCYjMzk7cyBmdXp6LXdvcnRoeS4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIFNNQyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgYGFmX3NtYy5jYCwgYHNtYy5oYCwgYW5kIGBzbWNfY29yZS5jYCBmaWxlcy4gVGhhdCYjMzk7cyBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zLCBBRl9TTUMgc29ja2V0IGZhbWlseS4gR29vZCwgSSYjMzk7bSBmYW1pbGlhciB3aXRoIHRoYXQuIE5vdywgd2hhdCYjMzk7cyBjaGFuZ2VkPwoKRXNzZW50aWFsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBjb25kaXRpb25hbCBgdW5oYXNoYCBiYXNlZCBvbiBgc21jLSZndDt1c2VfZmFsbGJhY2tgIGluIGBfX3NtY19yZWxlYXNlYC4gSWYgd2UmIzM5O3JlIHVzaW5nIGZhbGxiYWNrIG1vZGUsIGl0IGdvZXMgdGhyb3VnaCB0aGUgdXN1YWwgYHNrX3Byb3QtJmd0O3VuaGFzaGAsIG90aGVyd2lzZSBpdCBjYWxscyBgc21jX2Nvbm5fdW5oYXNoYC4gIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYSBgdW5oYXNoZWRgIGZsYWcgdG8gdGhlIGBzbWNfY29ubmVjdGlvbmAgc3RydWN0LCBhbmQgYSBuZXcgYHNtY19jb25uX3VuaGFzaGAgZnVuY3Rpb24uICBJdCYjMzk7cyBpbml0aWFsaXplZCBpbiBgc21jX2Nvbm5fY3JlYXRlYCBhbmQgY2FsbGVkIGR1cmluZyBgc21jX2Nvbm5fZnJlZWAuIEludGVyZXN0aW5nLgoKTm93LCBmb3IgZnV6emluZywgSSBuZWVkIHRvIGtub3cgaG93IHJlYWNoYWJsZSB0aGlzIGNvZGUgaXMuIFNNQyBzb2NrZXRzIGNhbiBiZSBjcmVhdGVkIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIHN0YW5kYXJkIGBzb2NrZXQoQUZfU01DLCAuLi4pYCBjYWxscywgb3IgdmlhIHRoZSBgQUZfSU5FVGAvYEFGX0lORVQ2YCBwYXRod2F5cyBhcyB3ZWxsLiBUaGF04oCZcyBnb29kIOKAkyB3ZSBoYXZlIGNvbnRyb2wgZnJvbSB1c2VyIHNwYWNlLiAgQW5kLCB0aGVyZSYjMzk7cyBldmVuIGxvb3BiYWNrLCBmYWxsYmFjaywgb3IgZW11bGF0ZWQgU01DIGRldmljZXMgd2hpY2ggd2lkZW5zIHRoZSBhdHRhY2sgc3VyZmFjZSBldmVuIGZ1cnRoZXIgKFNNQy1EIGxvb3BiYWNrLCBJU00sIFNNQy1SIHZpYSBzb2Z0LVJvQ0UsIHJ4ZSwgZXRjLiwgYW5kIGZhbGxiYWNrIFRDUCkuICBTeXprYWxsZXIgaXMgYWxyZWFkeSBmdXp6aW5nIGBBRl9TTUNgLCB3aGljaCBpcyBhIHBvc2l0aXZlIHNpZ24uCgpOZXh0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgdG8gc2VlIHdoYXQgY29uZmlncyBhcmUgaW52b2x2ZWQsIGRlcGVuZGVuY2llcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyB0aGF0IGNvdWxkIGluY3JlYXNlIHRoZSBhdHRhY2sgc3VyZmFjZSwgb3IgbWFrZSBmdXp6aW5nIHRoaXMgbW9yZSBwcm9kdWN0aXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byByZWFjaCB0aGUgY29kZSBjaGFuZ2UgaW4gZGlmZmVyZW50IGNvbnRleHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlOgoKKipEaXZpbmcgaW50byB0aGUgU01DIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gU3lzdGVtIE1hbmFnZW1lbnQgQ29udHJvbCAoU01DKSBuZXR3b3JraW5nLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGtub2JzIHRoZSB1c2VyIGhhcyB0byB0dW5lLCBob3cgZGVwZW5kZW5jaWVzIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBkZWZhdWx0cyBhcmUgcHJvdmlkZWQuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIHRoZSBoaWVyYXJjaHkg4oCTIGlzIGl0IGEgdG9wLWxldmVsIGZlYXR1cmUsIG9yIGlzIGl0IG5lc3RlZCB1bmRlciBzb21lIGJyb2FkZXIgbmV0d29ya2luZyBvciBoYXJkd2FyZSBjb250ZXh0PyBUaGUgZGVwZW5kZW5jaWVzIGFyZSBnb2luZyB0byBiZSBrZXk7IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGFyZSByZXF1aXJlZCBvciBpbmNvbXBhdGlibGUuIEkmIzM5O20gYWxzbyBzY2FubmluZyBmb3IgYW55IHBvdGVudGlhbCB3YXJuaW5ncyBvciBjb21tZW50YXJ5IHdpdGhpbiB0aGUgZmlsZS4gSXQmIzM5O3MgbGlrZWx5IGdvaW5nIHRvIGluY2x1ZGUgb3B0aW9ucyBmb3IgZW5hYmxpbmcgdGhlIFNNQyBwcm90b2NvbCwgcG9zc2libHkgc3BlY2lmeWluZyB2YXJpYW50cyBsaWtlIFNNQy1SIG9yIFNNQy1ELCBhbmQgcGVyaGFwcyBvcHRpb25zIHRvIGNvbmZpZ3VyZSBidWZmZXIgc2l6ZXMsIGNvbm5lY3Rpb24gbGltaXRzLCBhbmQgb3RoZXIgcGVyZm9ybWFuY2UvdHVuaW5nIHBhcmFtZXRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYHNlbGVjdGAgYW5kIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBsb2dpYy4gVGhpcyBpcyBteSBjaGFuY2UgdG8gYXNzZXNzIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlc2lnbiwgYW5kIGhvdyBmbGV4aWJsZSB0aGUgY29kZSBpcy4gSSBhbSBleHBlY3Rpbmcgc29tZSBzb2xpZCBkb2N1bWVudGF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgaG9wZSB0byBjb21lIG91dCB3aXRoIGEgc291bmQgZ3Jhc3Agb2YgdGhlIG9wdGlvbnMgYW5kIHRoZWlyIHJhbWlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU01DXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFNNQy1SIHByb3ZpZGVzIGEgXCYjMzQ7c29ja2V0cyBvdmVyIFJETUFcJiMzNDsgc29sdXRpb24gbWFraW5nIHVzZSBvZlxuICAgNzpcdFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcbiAgIDg6XHRcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cbiAgIDk6XHRcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xuICAxMDpcdFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFNNQ19ESUFHXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBTTUNcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcbiAgMTk6XHRcdCAgc21jc3MuXG4gIDIwOlx0XG4gIDIxOlx0XHQgIGlmIHVuc3VyZSwgc2F5IFkuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxuICAyNDpcdFx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbiAgMjY6XHRcdGRlZmF1bHQgeVxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBTTUNfSFNfQ1RSTF9CUEYgZW5hYmxlcyBzdXBwb3J0IHRvIHJlZ2lzdGVyIGdlbmVyaWMgZUJQRiBob29rIGZvciBTTUNcbiAgMjk6XHRcdCAgaGFuZHNoYWtlIGZsb3csIHdoaWNoIG9mZmVyIG11Y2ggZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yXG4gIDMwOlx0XHQgIG9mIHRoZSBTTUMgcHJvdG9jb2wgc3RhY2sgY29tcGFyZWQgdG8gYSBjb21wbGV0ZSBrZXJuZWwtYmFzZWQgYXBwcm9hY2guIFNlbGVjdFxuICAzMTpcdFx0ICB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBmaWx0cmluZyB0aGUgaGFuZHNoYWtlIHByb2Nlc3MgdmlhIGVCUEYgcHJvZ3JhbXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk5MgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nICYjMzQ7RElCUyYjMzQ7IC0gQ29uZmlndXJhdGlvbiBvciBUeXBvPyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gVGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyAmIzM0O0RJQlMmIzM0OyB0aGluZyBpcyBldmVuIGEgcmVhbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IganVzdCBhIHNpbXBsZSB0eXBvIHRoYXQmIzM5O3Mgc2xpcHBlZCB0aHJvdWdoLiBJJiMzOTt2ZSBnb3QgYSBwcmV0dHkgZ29vZCBub3NlIGZvciB0aGVzZSB0aGluZ3MsIHNvIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpdHMgdmFsaWRpdHkuIE15IGd1dCB0ZWxscyBtZSBJIHNob3VsZCAqaW1tZWRpYXRlbHkqIHJlYWNoIGZvciB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCYjMzk7cyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2Ugb2YgdHJ1dGggaW4gdGhpcyBkb21haW4uIEkgbmVlZCB0byBjb25kdWN0IGEgdGhvcm91Z2ggc2VhcmNoIGZvciAmIzM0O0RJQlMmIzM0OyB3aXRoaW4gdGhlbS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBkZWZpbmVkIHNvbWV3aGVyZS4gSWYgaXQgKmlzKiBhIHZhbGlkIG9wdGlvbiwgdGhhdCB0ZWxscyBtZSBhIGxvdCBhYm91dCB0aGUgY29udGV4dCBhbmQgdGhlIHByb2JsZW0gSSYjMzk7bSBkZWFsaW5nIHdpdGguIElmIGl0ICppc24mIzM5O3QqLCB3ZWxsLCB0aGVuIEkga25vdyBleGFjdGx5IHdoZXJlIHRvIGJlZ2luIG15IHRyb3VibGVzaG9vdGluZyBieSBsb29raW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGFyZWEgZm9yIG90aGVyIHRoaW5ncy4gVGhhdCB3b3VsZCBhbHNvIHRlbGwgbWUgd2hlcmUgdGhlIHR5cG8gaXMgbW9zdCBsaWtlbHkgbG9jYXRlZCwgd2hpY2ggd291bGQgYmUgcXVpdGUgdXNlZnVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgS2NvbmZpZyByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBESUJTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzOTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLY29uZmlnIERpdmUgZm9yIERJQlMgb3IgU01DIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gRElCUyBvciBTTUMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9uIGxvZ2ljIGxpdmVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBicm9hZGVyIEtjb25maWcgbGFuZHNjYXBlIGZvciBtZW50aW9ucyBvZiBESUJTIG9yIFNNQyBpbiBvdGhlciBicmFuY2hlcyBvciBmaWxlcy4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGF0LCBhIHF1aWNrIGNoZWNrIG9uIGxpbmUgNCBvZiBgbmV0L3NtYy9LY29uZmlnYCBpbiBnaXQgc2VlbXMgbGlrZSBhIHNvbGlkIGluaXRpYWwgbW92ZTsgaXQgY291bGQgcXVpY2tseSBnaXZlIHNvbWUgaW5pdGlhbCBjbHVlcy4gTm93LCBhZnRlciB0aGF0LCBJIHRoaW5rIEkmIzM5O2xsIHplcm8gaW4gb24gdGhlIGBuZXQvc21jL0tjb25maWdgIGZpbGUgYWdhaW4gYW5kIGNoZWNrIHNwZWNpZmljYWxseSB3aGF0IHRoaXMgbW9kdWxlIGRlcGVuZHMgb24uIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIHdoeSB0aGV5IG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gYSBnaXZlbiBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTTUNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgU01DLVIgcHJvdmlkZXMgYSBcJiMzNDtzb2NrZXRzIG92ZXIgUkRNQVwmIzM0OyBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXG4gICA3Olx0XHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxuICAgODpcdFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxuICAgOTpcdFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXG4gIDEwOlx0XHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIGBuZXQvc21jL01ha2VmaWxlYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgYG5ldC9zbWMvTWFrZWZpbGVgLiBHaXZlbiB0aGlzIGxvY2F0aW9uLCBJIGltbWVkaWF0ZWx5IGV4cGVjdCB0byBmaW5kIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgc3BlY2lmaWMgdG8gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgcHJvdG9jb2wgc3RhY2suIEkgYW50aWNpcGF0ZSBkaXJlY3RpdmVzIGZvciBjb21waWxpbmcgdGhlIFNNQy1zcGVjaWZpYyBzb3VyY2UgZmlsZXMsIGxpbmtpbmcgdGhlbSwgYW5kIHBvdGVudGlhbGx5IGluY29ycG9yYXRpbmcgYW55IG5lY2Vzc2FyeSBsaWJyYXJpZXMgb3IgaGVhZGVyIGZpbGVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBmbGFncyByZWxhdGVkIHRvIGNvbXBpbGVyIG9wdGltaXphdGlvbiBmb3IgcGVyZm9ybWFuY2UsIHNwZWNpZmljIHRhcmdldCBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlIGluY2x1c2lvbiBvZiBhbnkgU01DLXJlbGF0ZWQga2VybmVsIG1vZHVsZXMuIEkmIzM5O2xsIGFsc28gYmUgbWVudGFsbHkgbWFwcGluZyB0aGlzIE1ha2VmaWxlIGFnYWluc3QgdGhlIG92ZXJhbGwgYnVpbGQgc3lzdGVtIHN0cnVjdHVyZTsgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIGhvdyB0aGVzZSBTTUMgY29tcG9uZW50cyBhcmUgaW50ZWdyYXRlZC4gSSYjMzk7bGwgc3RhcnQgYnkgcXVpY2tseSBzY2FubmluZyB0aGUgc3RydWN0dXJlLCBsb29raW5nIGZvciBjb21tb24gcGF0dGVybnMgYW5kIGltcG9ydGFudCB2YXJpYWJsZSBkZWZpbml0aW9ucy4gRnJvbSB0aGVyZSBJJiMzOTtsbCBkcmlsbCBkb3duIHRvIHRoZSBtb3JlIGludHJpY2F0ZSBkZXBlbmRlbmNpZXMgYW5kIHJ1bGVzIGFzIG5lZWRlZC4gVGhpcyB1c3VhbGx5IGhlbHBzIG1lIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjcml0aWNhbCBhbmQgd2hhdCYjMzk7cyBsZXNzIHNvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG4gICAzOlx0b2JqLSQoQ09ORklHX1NNQylcdCYjNDM7PSBzbWMub1xuICAgNDpcdG9iai0kKENPTkZJR19TTUNfRElBRylcdCYjNDM7PSBzbWNfZGlhZy5vXG4gICA1Olx0c21jLXkgOj0gYWZfc21jLm8gc21jX3BuZXQubyBzbWNfaWIubyBzbWNfY2xjLm8gc21jX2NvcmUubyBzbWNfd3IubyBzbWNfbGxjLm9cbiAgIDY6XHRzbWMteSAmIzQzOz0gc21jX2NkYy5vIHNtY190eC5vIHNtY19yeC5vIHNtY19jbG9zZS5vIHNtY19pc20ubyBzbWNfbmV0bGluay5vIHNtY19zdGF0cy5vXG4gICA3Olx0c21jLXkgJiM0Mzs9IHNtY190cmFjZXBvaW50Lm8gc21jX2luZXQub1xuICAgODpcdHNtYy0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzbWNfc3lzY3RsLm9cbiAgIDk6XHRzbWMtJChDT05GSUdfU01DX0hTX0NUUkxfQlBGKSAmIzQzOz0gc21jX2hzX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBESUJTIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIERJQlMgbW9kdWxlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9kaWJzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIGRlZmluZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCBjcml0aWNhbGx5LCBsaXN0IGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGxvZ2ljIHRoZXJlLCB0aGluZ3MgbGlrZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB0aGF0IHdpbGwgcmV2ZWFsIHdoaWNoIG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgbXVzdCBiZSBlbmFibGVkIGZvciBESUJTIHRvIGV2ZW4gYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgaW50ZWdyYXRpb24gd29yay4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgRElCU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7RGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlZmF1bHQgblxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgKERJQlMpIGlzIGEgY29tbXVuaWNhdGlvbiBtZXRob2QgdGhhdFxuICAgNzpcdFx0ICB1c2VzIGNvbW1vbiBwaHlzaWNhbCAoaW50ZXJuYWwpIG1lbW9yeSBmb3Igc3luY2hyb25vdXMgZGlyZWN0IGFjY2Vzc1xuICAgODpcdFx0ICBpbnRvIGEgcmVtb3RlIGJ1ZmZlci5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cbiAgMTE6XHRcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxuICAxMjpcdFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgRElCU19MT1xuICAxNTpcdFx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gRElCU1xuICAxNzpcdFx0ZGVmYXVsdCBuXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcbiAgMjA6XHRcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIFBhdGNoIGZvciBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgYW55IGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHksIG9yIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBvcHRpb25zLiBUaGUgYFNNQ19ESUFHYCBtZW50aW9uIGNhdWdodCBteSBleWUuIFRoZSBjb21tZW50IGluIHRoZSBwYXRjaCBpcyBwcmV0dHkgZXhwbGljaXQ6IGl0IHNlZW1zIGxpa2UgdGhlIHVuaGFzaGluZyBvZiBjb25uZWN0aW9ucyBiZWZvcmUgcmVsZWFzaW5nIHJlc291cmNlcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBkaWFnbm9zdGljIHJlYWRlciBhbmQgdGhlIHNvY2tldCBoYXNoIHJlYWQgbG9jay4gVGhpcyBzdWdnZXN0cyBgU01DX0RJQUdgIGlzIGRlZmluaXRlbHkgYSBrZXkgZmFjdG9yIGhlcmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgc21jX2Nvbm5fdW5oYXNoYCwgYHNtY19jb25uX2ZyZWVgLCBgc21jX2Nvbm5fY3JlYXRlYCwgYW5kIGBfX3NtY19yZWxlYXNlYCBhcmUgYWxsIGFmZmVjdGVkLiBOb3csIEkgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBzbWNfY29ubl91bmhhc2hgLCBgc21jX2Nvbm5fZnJlZWAsIGBfX3NtY19yZWxlYXNlYCwgYW5kIGBzbWNfcmVsZWFzZWAsIGFuZCB0aGVpciBzdXJyb3VuZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgaW1wYWN0IHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIHRoZSBkaWFnbm9zdGljIHJlYWRlci4gVGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMgY3JpdGljYWwgdG8gYSBjb21wbGV0ZSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfY29ubl9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMTItXG5uZXQvc21jL2FmX3NtYy5jOjMxMzpcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cbm5ldC9zbWMvYWZfc21jLmMtMzE0LVx0ICogTm9uLWZhbGxiYWNrIHNvY2tldHMgdXNlIHNtY19jb25uX3VuaGFzaCgpIHNvIHRoYXQgdGhlIGNvbm4tXHUwMDNldW5oYXNoZWRcbm5ldC9zbWMvYWZfc21jLmM6MzE1Olx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXG5uZXQvc21jL2FmX3NtYy5jLTMxNi1cdCAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLlxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzI5LVx0XHRpZiAoIXNtYy1cdTAwM2V1c2VfZmFsbGJhY2spXG5uZXQvc21jL2FmX3NtYy5jOjMzMDpcdFx0XHRzbWNfY29ubl9mcmVlKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbm5ldC9zbWMvYWZfc21jLmMtMzMxLVx0fVxuLS1cbm5ldC9zbWMvYWZfc21jLmM9MTAxNj1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IGxvY2FsX2ZpcnN0KVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTAyNC1cbm5ldC9zbWMvYWZfc21jLmM6MTAyNTpcdHNtY19jb25uX2ZyZWUoY29ubik7XG5uZXQvc21jL2FmX3NtYy5jLTEwMjYtXHRpZiAobG9jYWxfZmlyc3QgXHUwMDI2XHUwMDI2IGxncl92YWxpZClcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jPTEyOD12b2lkIHNtY19jbG9zZV9hY3RpdmVfYWJvcnQoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTYtXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTU3Olx0XHRzbWNfY29ubl9mcmVlKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTU4LVx0XHRyZWxlYXNlX2NsY3NvY2sgPSB0cnVlO1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTY3LVx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFNNQ19DTE9TRUQ7XG5uZXQvc21jL3NtY19jbG9zZS5jOjE2ODpcdFx0c21jX2Nvbm5fZnJlZShcdTAwMjZzbWMtXHUwMDNlY29ubik7XG5uZXQvc21jL3NtY19jbG9zZS5jLTE2OS1cdFx0cmVsZWFzZV9jbGNzb2NrID0gdHJ1ZTtcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jPTM1Nj1zdGF0aWMgdm9pZCBzbWNfY2xvc2VfcGFzc2l2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jLTQzNS1cdFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIXNrLVx1MDAzZXNrX3NvY2tldCkpIHtcbm5ldC9zbWMvc21jX2Nsb3NlLmM6NDM2Olx0XHRcdHNtY19jb25uX2ZyZWUoY29ubik7XG5uZXQvc21jL3NtY19jbG9zZS5jLTQzNy1cdFx0XHRpZiAoc21jLVx1MDAzZWNsY3NvY2spXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTA5MC1cdGF0b21pY19pbmMoXHUwMDI2Y29ubi1cdTAwM2VsbmstXHUwMDNlY29ubl9jbnQpO1xubmV0L3NtYy9zbWNfY29yZS5jOjEwOTE6XHQvKiBsaW5rX3B1dCBpbiBzbWNfY29ubl9mcmVlKCkgKi9cbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkyLVx0c21jcl9saW5rX2hvbGQoY29ubi1cdTAwM2VsbmspO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xMjU4PXZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTI2OC0vKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cbm5ldC9zbWMvc21jX2NvcmUuYzoxMjY5OnZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3MC17XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE5OTY9aW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3MC1cdH1cbm5ldC9zbWMvc21jX2NvcmUuYzoyMDcxOlx0c21jX2xncl9ob2xkKGNvbm4tXHUwMDNlbGdyKTsgLyogbGdyX3B1dCBpbiBzbWNfY29ubl9mcmVlKCkgKi9cbm5ldC9zbWMvc21jX2NvcmUuYy0yMDcyLVx0aWYgKCFjb25uLVx1MDAzZWxnci1cdTAwM2Vpc19zbWNkKVxubmV0L3NtYy9zbWNfY29yZS5jOjIwNzM6XHRcdHNtY3JfbGlua19ob2xkKGNvbm4tXHUwMDNlbG5rKTsgLyogbGlua19wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3NC1cdGNvbm4tXHUwMDNlZnJlZWQgPSAwO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaD01OTg9dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuaDo1OTk6dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG5uZXQvc21jL3NtY19jb3JlLmgtNjAwLWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgbmV0L3NtYy9zbWNfZGlhZy5jYCBmb3IgQ29ubmVjdGlvbiBEaWFnbm9zdGljcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgY29ubmVjdGlvbiBkaWFnbm9zdGljcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU3lzdGVtIE1hbmFnZW1lbnQgQ29udHJvbGxlciAoU01DKSBjb250ZXh0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgYG5ldC9zbWMvc21jX2RpYWcuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtICpyZWFkcyogY29ubmVjdGlvbiBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGRldGFpbHMgYWJvdXQgc29ja2V0cy4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGZpbGUgaXMgd2hlcmUgdGhlIGxvd2VyLWxldmVsIGRldGFpbHMgb2YgZ2F0aGVyaW5nIHRoZXNlIGNvbm5lY3Rpb24gc3RhdGlzdGljcyB3b3VsZCByZXNpZGUuIEkgZXhwZWN0IHRvIGZpbmQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGxpa2UgY29ubmVjdGlvbiBzdGF0ZSwgc29ja2V0IGFkZHJlc3NlcywgZXJyb3IgY291bnRzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IG1ldHJpY3MgZm9yIGRlYnVnZ2luZyBhbmQgdHJvdWJsZXNob290aW5nIFNNQy1yZWxhdGVkIGNvbm5lY3Rpb25zLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBtZXRob2RzIGFuZCBkYXRhIHN0cnVjdHVyZXMgZW1wbG95ZWQgdG8gYWNjZXNzIGFuZCBpbnRlcnByZXQgdGhpcyBjb25uZWN0aW9uIGRhdGEgd2l0aGluIHRoZSBTTUMgZnJhbWV3b3JrLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gaXMga2V5IHRvIG15IG92ZXJhbGwgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5oYXNofHJlYWRfbG9ja3xzbWNfZGlhZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19TTUMpXHQmIzQzOz0gc21jLm9cbm5ldC9zbWMvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfU01DX0RJQUcpXHQmIzQzOz0gc21jX2RpYWcub1xubmV0L3NtYy9NYWtlZmlsZS01LXNtYy15IDo9IGFmX3NtYy5vIHNtY19wbmV0Lm8gc21jX2liLm8gc21jX2NsYy5vIHNtY19jb3JlLm8gc21jX3dyLm8gc21jX2xsYy5vXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xMjI9c3RhdGljIHN0cnVjdCBzb2NrICpzbWNfdGNwX3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTI1LVx0XHRcdFx0XHQgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbm5ldC9zbWMvYWZfc21jLmM6MTI2Olx0XHRcdFx0XHQgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcV91bmhhc2gsXG5uZXQvc21jL2FmX3NtYy5jLTEyNy1cdFx0XHRcdFx0ICBib29sICpvd25fcmVxLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTMzLVxubmV0L3NtYy9hZl9zbWMuYzoxMzQ6XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL2FmX3NtYy5jLTEzNS1cdHNtYyA9IHNtY19jbGNzb2NrX3VzZXJfZGF0YV9yY3Uoc2spO1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTUyLVx0LyogcGFzc3Rocm91Z2ggdG8gb3JpZ2luYWwgc3luIHJlY3Ygc29jayBmY3QgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTUzOlx0Y2hpbGQgPSBzbWMtXHUwMDNlb3JpX2FmX29wcy1cdTAwM2VzeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LCByZXFfdW5oYXNoLFxubmV0L3NtYy9hZl9zbWMuYy0xNTQtXHRcdFx0XHRcdCAgICAgICBvd25fcmVxLCBvcHRfY2hpbGRfaW5pdCk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xOTk9aW50IHNtY19oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTIxMy1cbm5ldC9zbWMvYWZfc21jLmM6MjE0OnZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvc21jL2FmX3NtYy5jLTIxNS17XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yMzg9c3RydWN0IHByb3RvIHNtY19wcm90byA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI0Mi1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL2FmX3NtYy5jOjI0MzpcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9hZl9zbWMuYy0yNDQtXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTI1MT1zdHJ1Y3QgcHJvdG8gc21jX3Byb3RvNiA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI1NS1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL2FmX3NtYy5jOjI1NjpcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9hZl9zbWMuYy0yNTctXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMTItXG5uZXQvc21jL2FmX3NtYy5jOjMxMzpcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cbm5ldC9zbWMvYWZfc21jLmM6MzE0Olx0ICogTm9uLWZhbGxiYWNrIHNvY2tldHMgdXNlIHNtY19jb25uX3VuaGFzaCgpIHNvIHRoYXQgdGhlIGNvbm4tXHUwMDNldW5oYXNoZWRcbm5ldC9zbWMvYWZfc21jLmM6MzE1Olx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXG5uZXQvc21jL2FmX3NtYy5jLTMxNi1cdCAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLlxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzE4LVx0aWYgKHNtYy1cdTAwM2V1c2VfZmFsbGJhY2spXG5uZXQvc21jL2FmX3NtYy5jOjMxOTpcdFx0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spO1xubmV0L3NtYy9hZl9zbWMuYy0zMjAtXHRlbHNlXG5uZXQvc21jL2FmX3NtYy5jOjMyMTpcdFx0c21jX2Nvbm5fdW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbm5ldC9zbWMvYWZfc21jLmMtMzIyLVxuLS1cbm5ldC9zbWMvYWZfc21jLmM9ODUwPXN0YXRpYyB2b2lkIHNtY19mYmFja19mb3J3YXJkX3dha2V1cChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNvY2sgKmNsY3NrLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtODU3LVx0XHRcdFx0ICBzbWNfZmJhY2tfbWFya193b2tlbik7XG5uZXQvc21jL2FmX3NtYy5jOjg1ODpcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9zbWMvYWZfc21jLmMtODU5LVx0d3EgPSByY3VfZGVyZWZlcmVuY2UoY2xjc2stXHUwMDNlc2tfd3EpO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9ODcyPXN0YXRpYyB2b2lkIHNtY19mYmFja19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKmNsY3NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtODc1LVxubmV0L3NtYy9hZl9zbWMuYzo4NzY6XHRyZWFkX2xvY2tfYmgoXHUwMDI2Y2xjc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5uZXQvc21jL2FmX3NtYy5jLTg3Ny1cdHNtYyA9IHNtY19jbGNzb2NrX3VzZXJfZGF0YShjbGNzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz04ODQ9c3RhdGljIHZvaWQgc21jX2ZiYWNrX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKmNsY3NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtODg3LVxubmV0L3NtYy9hZl9zbWMuYzo4ODg6XHRyZWFkX2xvY2tfYmgoXHUwMDI2Y2xjc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5uZXQvc21jL2FmX3NtYy5jLTg4OS1cdHNtYyA9IHNtY19jbGNzb2NrX3VzZXJfZGF0YShjbGNzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz04OTY9c3RhdGljIHZvaWQgc21jX2ZiYWNrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpjbGNzaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTg5OS1cbm5ldC9zbWMvYWZfc21jLmM6OTAwOlx0cmVhZF9sb2NrX2JoKFx1MDAyNmNsY3NrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xubmV0L3NtYy9hZl9zbWMuYy05MDEtXHRzbWMgPSBzbWNfY2xjc29ja191c2VyX2RhdGEoY2xjc2spO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9OTA4PXN0YXRpYyB2b2lkIHNtY19mYmFja19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKmNsY3NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtOTExLVxubmV0L3NtYy9hZl9zbWMuYzo5MTI6XHRyZWFkX2xvY2tfYmgoXHUwMDI2Y2xjc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5uZXQvc21jL2FmX3NtYy5jLTkxMy1cdHNtYyA9IHNtY19jbGNzb2NrX3VzZXJfZGF0YShjbGNzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xNzQ1PXN0YXRpYyBpbnQgc21jX2NsY3NvY2tfYWNjZXB0KHN0cnVjdCBzbWNfc29jayAqbHNtYywgc3RydWN0IHNtY19zb2NrICoqbmV3X3NtYylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE3NzAtXHRpZiAocmMgXHUwMDNjIDAgfHwgbHNrLVx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQpIHtcbm5ldC9zbWMvYWZfc21jLmM6MTc3MTpcdFx0bmV3X3NrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKG5ld19zayk7XG5uZXQvc21jL2FmX3NtYy5jLTE3NzItXHRcdGlmIChuZXdfY2xjc29jaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTE4MzI9c3RydWN0IHNvY2sgKnNtY19hY2NlcHRfZGVxdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTg0Mi1cdFx0aWYgKG5ld19zay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEKSB7XG5uZXQvc21jL2FmX3NtYy5jOjE4NDM6XHRcdFx0bmV3X3NrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKG5ld19zayk7XG5uZXQvc21jL2FmX3NtYy5jLTE4NDQtXHRcdFx0aWYgKGlzay1cdTAwM2VjbGNzb2NrKSB7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yNjM4PXN0YXRpYyB2b2lkIHNtY19jbGNzb2NrX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKmxpc3Rlbl9jbGNzb2NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjY0MS1cbm5ldC9zbWMvYWZfc21jLmM6MjY0MjpcdHJlYWRfbG9ja19iaChcdTAwMjZsaXN0ZW5fY2xjc29jay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbm5ldC9zbWMvYWZfc21jLmMtMjY0My1cdGxzbWMgPSBzbWNfY2xjc29ja191c2VyX2RhdGEobGlzdGVuX2NsY3NvY2spO1xuLS1cbm5ldC9zbWMvc21jLmg9NDA9aW50IHNtY19oYXNoX3NrKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvc21jL3NtYy5oOjQxOnZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3NtYy9zbWMuaC00Mi12b2lkIHNtY19yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzayk7XG4tLVxubmV0L3NtYy9zbWMuaD0xOTU9c3RydWN0IHNtY19jb25uZWN0aW9uIHtcbi0tXG5uZXQvc21jL3NtYy5oLTI4MS1cdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xubmV0L3NtYy9zbWMuaDoyODI6XHR1OFx0XHRcdHVuaGFzaGVkO1x0LyogcmVtb3ZlZCBmcm9tIHNvY2sgaGFzaCAqL1xubmV0L3NtYy9zbWMuaC0yODMtXHR1OFx0XHRcdG91dF9vZl9zeW5jO1x0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDY5PXN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDgzLVx0bGdyID0gc21jX2dldF9sZ3IobGluayk7XG5uZXQvc21jL3NtY19jZGMuYzo0ODQ6XHRyZWFkX2xvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xubmV0L3NtYy9zbWNfY2RjLmMtNDg1LVx0Y29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy1cdTAwM2V0b2tlbiksIGxncik7XG4tLVxubmV0L3NtYy9zbWNfY2xjLmM9MTE4PWludCBzbWNfY2xjX3VlaWRfY291bnQodm9pZClcbi0tXG5uZXQvc21jL3NtY19jbGMuYy0xMjEtXG5uZXQvc21jL3NtY19jbGMuYzoxMjI6XHRyZWFkX2xvY2soXHUwMDI2c21jX2NsY19laWRfdGFibGUubG9jayk7XG5uZXQvc21jL3NtY19jbGMuYy0xMjMtXHRjb3VudCA9IHNtY19jbGNfZWlkX3RhYmxlLnVlaWRfY250O1xuLS1cbm5ldC9zbWMvc21jX2NsYy5jPTIwNj1zdGF0aWMgaW50IF9zbWNfbmxfdWVpZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tLVxubmV0L3NtYy9zbWNfY2xjLmMtMjExLVxubmV0L3NtYy9zbWNfY2xjLmM6MjEyOlx0cmVhZF9sb2NrKFx1MDAyNnNtY19jbGNfZWlkX3RhYmxlLmxvY2spO1xubmV0L3NtYy9zbWNfY2xjLmMtMjEzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShsc3RfdWVpZCwgXHUwMDI2c21jX2NsY19laWRfdGFibGUubGlzdCwgbGlzdCkge1xuLS1cbm5ldC9zbWMvc21jX2NsYy5jPTIzOD1pbnQgc21jX25sX2R1bXBfc2VpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L3NtYy9zbWNfY2xjLmMtMjYxLVx0XHRnb3RvIGVycjtcbm5ldC9zbWMvc21jX2NsYy5jOjI2MjpcdHJlYWRfbG9jayhcdTAwMjZzbWNfY2xjX2VpZF90YWJsZS5sb2NrKTtcbm5ldC9zbWMvc21jX2NsYy5jLTI2My1cdHNlaWRfZW5hYmxlZCA9IHNtY19jbGNfZWlkX3RhYmxlLnNlaWRfZW5hYmxlZDtcbi0tXG5uZXQvc21jL3NtY19jbGMuYz0zMTY9Ym9vbCBzbWNfY2xjX21hdGNoX2VpZCh1OCAqbmVnb3RpYXRlZF9laWQsXG4tLVxubmV0L3NtYy9zbWNfY2xjLmMtMzIzLVx0bmVnb3RpYXRlZF9laWRbMF0gPSAwO1xubmV0L3NtYy9zbWNfY2xjLmM6MzI0Olx0cmVhZF9sb2NrKFx1MDAyNnNtY19jbGNfZWlkX3RhYmxlLmxvY2spO1xubmV0L3NtYy9zbWNfY2xjLmMtMzI1LVx0aWYgKHBlZXJfZWlkIFx1MDAyNlx1MDAyNiBsb2NhbF9laWQgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3NtYy9zbWNfY2xjLmM9NTYzPXN0YXRpYyBpbnQgc21jX2NsY19wcmZ4X3NldChzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLFxuLS1cbm5ldC9zbWMvc21jX2NsYy5jLTU4MC1cbm5ldC9zbWMvc21jX2NsYy5jOjU4MTpcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9zbWMvc21jX2NsYy5jLTU4Mi1cbi0tXG5uZXQvc21jL3NtY19jbGMuYz02NTc9aW50IHNtY19jbGNfcHJmeF9tYXRjaChzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLFxuLS1cbm5ldC9zbWMvc21jX2NsYy5jLTY2My1cbm5ldC9zbWMvc21jX2NsYy5jOjY2NDpcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9zbWMvc21jX2NsYy5jLTY2NS1cbi0tXG5uZXQvc21jL3NtY19jbGMuYz04NDY9aW50IHNtY19jbGNfc2VuZF9wcm9wb3NhbChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL3NtY19jbGMuYy05NDItXHRcdHYyX2V4dC1cdTAwM2VmZWF0dXJlX21hc2sgPSBodG9ucyhTTUNfRkVBVFVSRV9NQVNLKTtcbm5ldC9zbWMvc21jX2NsYy5jOjk0MzpcdFx0cmVhZF9sb2NrKFx1MDAyNnNtY19jbGNfZWlkX3RhYmxlLmxvY2spO1xubmV0L3NtYy9zbWNfY2xjLmMtOTQ0LVx0XHR2Ml9leHQtXHUwMDNlaGRyLmVpZF9jbnQgPSBzbWNfY2xjX2VpZF90YWJsZS51ZWlkX2NudDtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9NzE0PXN0YXRpYyB2b2lkIHNtY19sZ3JfZnJlZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtNzI3LVx0fVxubmV0L3NtYy9zbWNfY29yZS5jOjcyODpcdHJlYWRfbG9ja19iaChcdTAwMjZsZ3ItXHUwMDNlY29ubnNfbG9jayk7XG5uZXQvc21jL3NtY19jb3JlLmMtNzI5LVx0Y29ubnMgPSBSQl9FTVBUWV9ST09UKFx1MDAyNmxnci1cdTAwM2Vjb25uc19hbGwpO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xMDk1PXN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTEyMy1hZ2Fpbjpcbm5ldC9zbWMvc21jX2NvcmUuYzoxMTI0Olx0cmVhZF9sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xMTI1LVx0Zm9yIChub2RlID0gcmJfZmlyc3QoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2FsbCk7IG5vZGU7IG5vZGUgPSByYl9uZXh0KG5vZGUpKSB7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEyMjQ9c3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTMtXG5uZXQvc21jL3NtY19jb3JlLmM6MTI1NDovKiB1bmhhc2ggdGhlIHNvY2tldCBvbmNlOyBvd25zIHRoZSBzaW5nbGUgdW5oYXNoIGZvciBhbGwgbm9uLWZhbGxiYWNrIHBhdGhzLlxubmV0L3NtYy9zbWNfY29yZS5jOjEyNTU6ICogRXZlcnkgY2FsbGVyIGhvbGRzIGxvY2tfc29jayBmb3IgdGhpcyBzb2NrZXQsIHNvIGNvbm4tXHUwMDNldW5oYXNoZWQgaXMgcHJvdGVjdGVkXG5uZXQvc21jL3NtY19jb3JlLmMtMTI1Ni0gKiBieSB0aGF0IGxvY2sgYW5kIG5vIHNlcGFyYXRlIHN5bmNocm9uaXNhdGlvbiBpcyBuZWVkZWQuXG5uZXQvc21jL3NtY19jb3JlLmMtMTI1Ny0gKi9cbm5ldC9zbWMvc21jX2NvcmUuYzoxMjU4OnZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU5LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTI2MS1cbm5ldC9zbWMvc21jX2NvcmUuYzoxMjYyOlx0aWYgKCFjb25uLVx1MDAzZXVuaGFzaGVkKSB7XG5uZXQvc21jL3NtY19jb3JlLmM6MTI2MzpcdFx0Y29ubi1cdTAwM2V1bmhhc2hlZCA9IDE7XG5uZXQvc21jL3NtY19jb3JlLmM6MTI2NDpcdFx0c21jLVx1MDAzZXNrLnNrX3Byb3QtXHUwMDNldW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTI2NS1cdH1cbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTI2OT12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjgwLVx0LyogVW5oYXNoIGJlZm9yZSBkcm9wcGluZyBsZ3IvbG5rIHJlZnMgc28gdGhlIGRpYWcgcmVhZGVyLCB3aGljaFxubmV0L3NtYy9zbWNfY29yZS5jOjEyODE6XHQgKiBpdGVyYXRlcyB1bmRlciB0aGUgc29ja2V0IGhhc2ggcmVhZF9sb2NrLCBjYW5ub3Qgc2VlIGEgY29ubmVjdGlvbiB3aG9zZVxubmV0L3NtYy9zbWNfY29yZS5jLTEyODItXHQgKiBsZ3Igb3IgbG5rIGlzIGJlaW5nIGZyZWVkIGNvbmN1cnJlbnRseS5cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjgzLVx0ICovXG5uZXQvc21jL3NtY19jb3JlLmM6MTI4NDpcdHNtY19jb25uX3VuaGFzaChjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjg1LVx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE1Nzk9c3RhdGljIHZvaWQgX19zbWNfbGdyX3Rlcm1pbmF0ZShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgYm9vbCBzb2Z0KVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xNTkxLVx0Lyoga2lsbCByZW1haW5pbmcgbGluayBncm91cCBjb25uZWN0aW9ucyAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjE1OTI6XHRyZWFkX2xvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xubmV0L3NtYy9zbWNfY29yZS5jLTE1OTMtXHRub2RlID0gcmJfZmlyc3QoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2FsbCk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE2MDItXHRcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBhYm92ZSAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjE2MDM6XHRcdHJlYWRfbG9ja19iaChcdTAwMjZsZ3ItXHUwMDNlY29ubnNfbG9jayk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTYwNC1cdFx0bm9kZSA9IHJiX2ZpcnN0KFx1MDAyNmxnci1cdTAwM2Vjb25uc19hbGwpO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xOTE4PWludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xOTI2LVxubmV0L3NtYy9zbWNfY29yZS5jOjE5Mjc6XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTkyOC1cbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTk5Nj1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc0LVx0Y29ubi1cdTAwM2VmcmVlZCA9IDA7XG5uZXQvc21jL3NtY19jb3JlLmM6MjA3NTpcdGNvbm4tXHUwMDNldW5oYXNoZWQgPSAwO1xubmV0L3NtYy9zbWNfY29yZS5jLTIwNzYtXHRjb25uLVx1MDAzZWxvY2FsX3R4X2N0cmwuY29tbW9uLnR5cGUgPSBTTUNfQ0RDX01TR19UWVBFO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaD01OTY9aW50IHNtY192bGFuX2J5X3RjcHNrKHN0cnVjdCBzb2NrZXQgKmNsY3NvY2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xubmV0L3NtYy9zbWNfY29yZS5oLTU5Ny1cbm5ldC9zbWMvc21jX2NvcmUuaDo1OTg6dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuaC01OTktdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZXRfZGlhZy5oXHUwMDNlXG5uZXQvc21jL3NtY19kaWFnLmM6MTg6I2luY2x1ZGUgXHUwMDNjbGludXgvc21jX2RpYWcuaFx1MDAzZVxubmV0L3NtYy9zbWNfZGlhZy5jLTE5LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjUtXG5uZXQvc21jL3NtY19kaWFnLmM6MjY6c3RydWN0IHNtY19kaWFnX2R1bXBfY3R4IHtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNy1cdGludCBwb3NbMl07XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTI5LVxubmV0L3NtYy9zbWNfZGlhZy5jOjMwOnN0YXRpYyBzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKnNtY19kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L3NtYy9zbWNfZGlhZy5jLTMxLXtcbm5ldC9zbWMvc21jX2RpYWcuYzozMjpcdHJldHVybiAoc3RydWN0IHNtY19kaWFnX2R1bXBfY3R4ICopY2ItXHUwMDNlY3R4O1xubmV0L3NtYy9zbWNfZGlhZy5jLTMzLX1cbm5ldC9zbWMvc21jX2RpYWcuYy0zNC1cbm5ldC9zbWMvc21jX2RpYWcuYzozNTpzdGF0aWMgdm9pZCBzbWNfZGlhZ19tc2dfY29tbW9uX2ZpbGwoc3RydWN0IHNtY19kaWFnX21zZyAqciwgc3RydWN0IHNvY2sgKnNrKVxubmV0L3NtYy9zbWNfZGlhZy5jLTM2LXtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtNTktXG5uZXQvc21jL3NtY19kaWFnLmM6NjA6c3RhdGljIGludCBzbWNfZGlhZ19tc2dfYXR0cnNfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc21jL3NtY19kaWFnLmM6NjE6XHRcdFx0XHQgICBzdHJ1Y3Qgc21jX2RpYWdfbXNnICpyLFxubmV0L3NtYy9zbWNfZGlhZy5jLTYyLVx0XHRcdFx0ICAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy03MS1cbm5ldC9zbWMvc21jX2RpYWcuYzo3MjpzdGF0aWMgaW50IF9fc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc21jL3NtY19kaWFnLmMtNzMtXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxubmV0L3NtYy9zbWNfZGlhZy5jOjc0Olx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzbWNfZGlhZ19yZXEgKnJlcSxcbm5ldC9zbWMvc21jX2RpYWcuYy03NS1cdFx0XHQgICBzdHJ1Y3QgbmxhdHRyICpiYylcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtNzctXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHNtY19zayhzayk7XG5uZXQvc21jL3NtY19kaWFnLmM6Nzg6XHRzdHJ1Y3Qgc21jX2RpYWdfZmFsbGJhY2sgZmFsbGJhY2s7XG5uZXQvc21jL3NtY19kaWFnLmMtNzktXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XG5uZXQvc21jL3NtY19kaWFnLmM6ODA6XHRzdHJ1Y3Qgc21jX2RpYWdfbXNnICpyO1xubmV0L3NtYy9zbWNfZGlhZy5jLTgxLVx0c3RydWN0IG5sbXNnaGRyICpubGg7XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTg4LVx0ciA9IG5sbXNnX2RhdGEobmxoKTtcbm5ldC9zbWMvc21jX2RpYWcuYzo4OTpcdHNtY19kaWFnX21zZ19jb21tb25fZmlsbChyLCBzayk7XG5uZXQvc21jL3NtY19kaWFnLmMtOTAtXHRyLVx1MDAzZWRpYWdfc3RhdGUgPSBzay1cdTAwM2Vza19zdGF0ZTtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtOTctXHR1c2VyX25zID0gc2tfdXNlcl9ucyhORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikuc2spO1xubmV0L3NtYy9zbWNfZGlhZy5jOjk4Olx0aWYgKHNtY19kaWFnX21zZ19hdHRyc19maWxsKHNrLCBza2IsIHIsIHVzZXJfbnMpKVxubmV0L3NtYy9zbWNfZGlhZy5jLTk5LVx0XHRnb3RvIGVycm91dDtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTA4LVx0XHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcdTAwMjZzbWMtXHUwMDNlY29ubjtcbm5ldC9zbWMvc21jX2RpYWcuYzoxMDk6XHRcdHN0cnVjdCBzbWNfZGlhZ19jb25uaW5mbyBjaW5mbyA9IHtcbm5ldC9zbWMvc21jX2RpYWcuYy0xMTAtXHRcdFx0LnRva2VuID0gY29ubi1cdTAwM2VhbGVydF90b2tlbl9sb2NhbCxcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTUwLVxubmV0L3NtYy9zbWNfZGlhZy5jOjE1MTpcdFx0c3RydWN0IHNtY19kaWFnX2xncmluZm8gbGluZm8gPSB7XG5uZXQvc21jL3NtY19kaWFnLmMtMTUyLVx0XHRcdC5yb2xlID0gc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXJvbGUsXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTE5NS1cbm5ldC9zbWMvc21jX2RpYWcuYzoxOTY6c3RhdGljIGludCBzbWNfZGlhZ19kdW1wX3Byb3RvKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTctXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IHBfdHlwZSlcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTgte1xubmV0L3NtYy9zbWNfZGlhZy5jOjE5OTpcdHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqY2JfY3R4ID0gc21jX2R1bXBfY29udGV4dChjYik7XG5uZXQvc21jL3NtY19kaWFnLmMtMjAwLVx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjA2LVxubmV0L3NtYy9zbWNfZGlhZy5jOjIwNzpcdHJlYWRfbG9jayhcdTAwMjZwcm90LVx1MDAzZWguc21jX2hhc2gtXHUwMDNlbG9jayk7XG5uZXQvc21jL3NtY19kaWFnLmMtMjA4LVx0aGVhZCA9IFx1MDAyNnByb3QtXHUwMDNlaC5zbWNfaGFzaC1cdTAwM2VodDtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjE2LVx0XHRcdGdvdG8gbmV4dDtcbm5ldC9zbWMvc21jX2RpYWcuYzoyMTc6XHRcdHJjID0gX19zbWNfZGlhZ19kdW1wKHNrLCBza2IsIGNiLCBubG1zZ19kYXRhKGNiLVx1MDAzZW5saCksIGJjKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yMTgtXHRcdGlmIChyYyBcdTAwM2MgMClcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjI5LVxubmV0L3NtYy9zbWNfZGlhZy5jOjIzMDpzdGF0aWMgaW50IHNtY19kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L3NtYy9zbWNfZGlhZy5jLTIzMS17XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTIzMy1cbm5ldC9zbWMvc21jX2RpYWcuYzoyMzQ6XHRyYyA9IHNtY19kaWFnX2R1bXBfcHJvdG8oXHUwMDI2c21jX3Byb3RvLCBza2IsIGNiLCBTTUNQUk9UT19TTUMpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTIzNS1cdGlmICghcmMpXG5uZXQvc21jL3NtY19kaWFnLmM6MjM2Olx0XHRzbWNfZGlhZ19kdW1wX3Byb3RvKFx1MDAyNnNtY19wcm90bzYsIHNrYiwgY2IsIFNNQ1BST1RPX1NNQzYpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTIzNy1cdHJldHVybiBza2ItXHUwMDNlbGVuO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yMzktXG5uZXQvc21jL3NtY19kaWFnLmM6MjQwOnN0YXRpYyBpbnQgc21jX2RpYWdfaGFuZGxlcl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqaClcbm5ldC9zbWMvc21jX2RpYWcuYy0yNDEte1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yNDctXHRcdFx0c3RydWN0IG5ldGxpbmtfZHVtcF9jb250cm9sIGMgPSB7XG5uZXQvc21jL3NtY19kaWFnLmM6MjQ4Olx0XHRcdFx0LmR1bXAgPSBzbWNfZGlhZ19kdW1wLFxubmV0L3NtYy9zbWNfZGlhZy5jLTI0OS1cdFx0XHRcdC5taW5fZHVtcF9hbGxvYyA9IFNLQl9XSVRIX09WRVJIRUFEKDMyNzY4KSxcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjU2LVxubmV0L3NtYy9zbWNfZGlhZy5jOjI1NzpzdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19oYW5kbGVyIHNtY19kaWFnX2hhbmRsZXIgPSB7XG5uZXQvc21jL3NtY19kaWFnLmMtMjU4LVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5uZXQvc21jL3NtY19kaWFnLmMtMjU5LVx0LmZhbWlseSA9IEFGX1NNQyxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjA6XHQuZHVtcCA9IHNtY19kaWFnX2hhbmRsZXJfZHVtcCxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjEtfTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjItXG5uZXQvc21jL3NtY19kaWFnLmM6MjYzOnN0YXRpYyBpbnQgX19pbml0IHNtY19kaWFnX2luaXQodm9pZClcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjQte1xubmV0L3NtYy9zbWNfZGlhZy5jOjI2NTpcdHJldHVybiBzb2NrX2RpYWdfcmVnaXN0ZXIoXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XG5uZXQvc21jL3NtY19kaWFnLmMtMjY2LX1cbm5ldC9zbWMvc21jX2RpYWcuYy0yNjctXG5uZXQvc21jL3NtY19kaWFnLmM6MjY4OnN0YXRpYyB2b2lkIF9fZXhpdCBzbWNfZGlhZ19leGl0KHZvaWQpXG5uZXQvc21jL3NtY19kaWFnLmMtMjY5LXtcbm5ldC9zbWMvc21jX2RpYWcuYzoyNzA6XHRzb2NrX2RpYWdfdW5yZWdpc3RlcihcdTAwMjZzbWNfZGlhZ19oYW5kbGVyKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNzEtfVxubmV0L3NtYy9zbWNfZGlhZy5jLTI3Mi1cbm5ldC9zbWMvc21jX2RpYWcuYzoyNzM6bW9kdWxlX2luaXQoc21jX2RpYWdfaW5pdCk7XG5uZXQvc21jL3NtY19kaWFnLmM6Mjc0Om1vZHVsZV9leGl0KHNtY19kaWFnX2V4aXQpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTI3NS1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuLS1cbm5ldC9zbWMvc21jX2hzX2JwZi5oLTIwLSAqXG5uZXQvc21jL3NtY19oc19icGYuaDoyMTogKiBOb3RlOiBDYWxsZXIgTVVTVCBlbnN1cmUgaXQmIzM5O3Mgd2FzIGludm9rZWQgdW5kZXIgcmN1X3JlYWRfbG9jay5cbm5ldC9zbWMvc21jX2hzX2JwZi5oLTIyLSAqL1xuLS1cbm5ldC9zbWMvc21jX2liLmM9Mjc0PWludCBzbWNfaWJfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGlicG9ydCxcbi0tXG5uZXQvc21jL3NtY19pYi5jLTI4Ni1cbm5ldC9zbWMvc21jX2liLmM6Mjg3Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL3NtY19pYi5jLTI4OC1cdFx0bmRldiA9IHJkbWFfcmVhZF9naWRfYXR0cl9uZGV2X3JjdShhdHRyKTtcbi0tXG5uZXQvc21jL3NtY19pYi5jPTMwNz1zdGF0aWMgYm9vbCBzbWNfaWJfY2hlY2tfbGlua19naWQodTggZ2lkW1NNQ19HSURfU0laRV0sIGJvb2wgc21jcnYyLFxuLS1cbm5ldC9zbWMvc21jX2liLmMtMzE4LVxubmV0L3NtYy9zbWNfaWIuYzozMTk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9zbWMvc21jX2liLmMtMzIwLVx0XHRpZiAoKCFzbWNydjIgXHUwMDI2XHUwMDI2IGF0dHItXHUwMDNlZ2lkX3R5cGUgPT0gSUJfR0lEX1RZUEVfUk9DRSkgfHxcbi0tXG5uZXQvc21jL3NtY19pbmV0LmM9MjM9c3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy0yOC1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL3NtY19pbmV0LmM6Mjk6XHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbm5ldC9zbWMvc21jX2luZXQuYy0zMC1cdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz03MD1zdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0Nl9wcm90ID0ge1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy03NS1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL3NtY19pbmV0LmM6NzY6XHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbm5ldC9zbWMvc21jX2luZXQuYy03Ny1cdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz0xMjM9c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9zbWMvc21jX2luZXQuYy0xMjQte1xubmV0L3NtYy9zbWNfaW5ldC5jOjEyNTpcdC8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLVx1MDAzZWNsY3NvY2tcbm5ldC9zbWMvc21jX2luZXQuYy0xMjYtXHQgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzXG5uZXQvc21jL3NtY19pbmV0LmM6MTI3Olx0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXG5uZXQvc21jL3NtY19pbmV0LmMtMTI4LVx0ICogc28gbm8gZHVtcCBjYW4gb2JzZXJ2ZSB0aGUgY2xjc29jayBiZWluZyByZWxlYXNlZDsgdGhlIHNlY29uZFxubmV0L3NtYy9zbWNfaW5ldC5jOjEyOTpcdCAqIHVuaGFzaCBpcyBhIG5vLW9wLlxubmV0L3NtYy9zbWNfaW5ldC5jLTEzMC1cdCAqL1xubmV0L3NtYy9zbWNfaW5ldC5jOjEzMTpcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKTtcbm5ldC9zbWMvc21jX2luZXQuYy0xMzItXHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xuLS1cbm5ldC9zbWMvc21jX3BuZXQuYz03MzE9Ym9vbCBzbWNfcG5ldF9pc19uZGV2X3BuZXRpZChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpwbmV0aWQpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTczNi1cbm5ldC9zbWMvc21jX3BuZXQuYzo3Mzc6XHRyZWFkX2xvY2soXHUwMDI2c24tXHUwMDNlcG5ldGlkc19uZGV2LmxvY2spO1xubmV0L3NtYy9zbWNfcG5ldC5jLTczOC1cdGxpc3RfZm9yX2VhY2hfZW50cnkocGUsIFx1MDAyNnNuLVx1MDAzZXBuZXRpZHNfbmRldi5saXN0LCBsaXN0KSB7XG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTExMzI9dm9pZCBzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy0xMTM2LVxubmV0L3NtYy9zbWNfcG5ldC5jOjExMzc6XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL3NtY19wbmV0LmMtMTEzOC1cdGRzdCA9IF9fc2tfZHN0X2dldChzayk7XG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTExNDk9dm9pZCBzbWNfcG5ldF9maW5kX2lzbV9yZXNvdXJjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTExNTUtXG5uZXQvc21jL3NtY19wbmV0LmM6MTE1NjpcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTU3LVx0ZHN0ID0gX19za19kc3RfZ2V0KHNrKTtcbi0tXG5uZXQvc21jL3NtY19yeC5jPTMyPXN0YXRpYyB2b2lkIHNtY19yeF93YWtlX3VwKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL3NtY19yeC5jLTM5LVx0LyogY2FsbGVkIGFscmVhZHkgaW4gc21jX2xpc3Rlbl93b3JrKCkgKi9cbm5ldC9zbWMvc21jX3J4LmM6NDA6XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL3NtY19yeC5jLTQxLVx0d3EgPSByY3VfZGVyZWZlcmVuY2Uoc2stXHUwMDNlc2tfd3EpO1xuLS1cbm5ldC9zbWMvc21jX3N5c2N0bC5jPTM4PXN0YXRpYyBpbnQgc21jX25ldF9yZXBsYWNlX3NtY19oc19jdHJsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5uZXQvc21jL3NtY19zeXNjdGwuYy00MS1cbm5ldC9zbWMvc21jX3N5c2N0bC5jOjQyOlx0cmN1X3JlYWRfbG9jaygpO1xubmV0L3NtYy9zbWNfc3lzY3RsLmMtNDMtXHQvKiBudWxsIG9yIGVtcHR5IG5hbWUgYXNrIHRvIGNsZWFyIGN1cnJlbnQgY3RybCAqL1xuLS1cbm5ldC9zbWMvc21jX3N5c2N0bC5jPTcwPXN0YXRpYyBpbnQgcHJvY19zbWNfaHNfY3RybChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbi0tXG5uZXQvc21jL3NtY19zeXNjdGwuYy04MS1cbm5ldC9zbWMvc21jX3N5c2N0bC5jOjgyOlx0cmN1X3JlYWRfbG9jaygpO1xubmV0L3NtYy9zbWNfc3lzY3RsLmMtODMtXHRjdHJsID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2VzbWMuaHNfY3RybCk7XG4tLVxubmV0L3NtYy9zbWNfc3lzY3RsLmM9MjE0PWludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9zbWMvc21jX3N5c2N0bC5jLTIyMy1cbm5ldC9zbWMvc21jX3N5c2N0bC5jOjIyNDpcdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L3NtYy9zbWNfc3lzY3RsLmMtMjI1LVx0XHRjdHJsID0gcmN1X2RlcmVmZXJlbmNlKGluaXRfbmV0LnNtYy5oc19jdHJsKTtcbi0tXG5uZXQvc21jL3NtY190eC5jPTQxPXN0YXRpYyB2b2lkIHNtY190eF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3NtYy9zbWNfdHguYy01MS1cdFx0Y2xlYXJfYml0KFNPQ0tfTk9TUEFDRSwgXHUwMDI2c29jay1cdTAwM2VmbGFncyk7XG5uZXQvc21jL3NtY190eC5jOjUyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL3NtY190eC5jLTUzLVx0XHR3cSA9IHJjdV9kZXJlZmVyZW5jZShzay1cdTAwM2Vza193cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDc5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBTTUMgVW5oYXNoIEZ1bmN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBzbWNfdW5oYXNoX3NrYCBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdG8gYG5ldC9zbWMvYWZfc21jLmNgLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgU01DLXJlbGF0ZWQgY29kZSwgc28gaXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHNvY2tldHMgYXJlIHVuaGFzaGVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUgU01DIGZyYW1ld29yay4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGl0JiMzOTtzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCBJIG5lZWQgdG8gZGlzc2VjdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHRhc2suIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTk6XHRpbnQgc21jX2hhc2hfc2soc3RydWN0IHNvY2sgKnNrKVxuIDIwMDpcdHtcbiAyMDE6XHRcdHN0cnVjdCBzbWNfaGFzaGluZm8gKmggPSBzay1cdTAwM2Vza19wcm90LVx1MDAzZWguc21jX2hhc2g7XG4gMjAyOlx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcbiAyMDM6XHRcbiAyMDQ6XHRcdGhlYWQgPSBcdTAwMjZoLVx1MDAzZWh0O1xuIDIwNTpcdFxuIDIwNjpcdFx0d3JpdGVfbG9ja19iaChcdTAwMjZoLVx1MDAzZWxvY2spO1xuIDIwNzpcdFx0c2tfYWRkX25vZGUoc2ssIGhlYWQpO1xuIDIwODpcdFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmgtXHUwMDNlbG9jayk7XG4gMjA5Olx0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4gMjEwOlx0XG4gMjExOlx0XHRyZXR1cm4gMDtcbiAyMTI6XHR9XG4gMjEzOlx0XG4gMjE0Olx0dm9pZCBzbWNfdW5oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcbiAyMTU6XHR7XG4gMjE2Olx0XHRzdHJ1Y3Qgc21jX2hhc2hpbmZvICpoID0gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VoLnNtY19oYXNoO1xuIDIxNzpcdFxuIDIxODpcdFx0d3JpdGVfbG9ja19iaChcdTAwMjZoLVx1MDAzZWxvY2spO1xuIDIxOTpcdFx0aWYgKHNrX2RlbF9ub2RlX2luaXQoc2spKVxuIDIyMDpcdFx0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgLTEpO1xuIDIyMTpcdFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmgtXHUwMDNlbG9jayk7XG4gMjIyOlx0fVxuIDIyMzpcdFxuIDIyNDpcdC8qIFRoaXMgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHVzZXIgcmVhbGx5IHJlbGVhc2Ugc29ja19sb2NrLiBTbyBkbyB0aGVcbiAyMjU6XHQgKiB3b3JrIHdoaWNoIHdlIGRpZG4mIzM5O3QgZG8gYmVjYXVzZSBvZiB1c2VyIGhvbGQgdGhlIHNvY2tfbG9jayBpbiB0aGVcbiAyMjY6XHQgKiBCSCBjb250ZXh0XG4gMjI3Olx0ICovXG4gMjI4Olx0dm9pZCBzbWNfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gMjI5Olx0e1xuIDIzMDpcdFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBzbWNfc2soc2spO1xuIDIzMTpcdFxuIDIzMjpcdFx0aWYgKHNtYy1cdTAwM2Vjb25uLnR4X2luX3JlbGVhc2Vfc29jaykge1xuIDIzMzpcdFx0XHRzbWNfdHhfcGVuZGluZyhcdTAwMjZzbWMtXHUwMDNlY29ubik7XG4gMjM0Olx0XHRcdHNtYy1cdTAwM2Vjb25uLnR4X2luX3JlbGVhc2Vfc29jayA9IGZhbHNlO1xuIDIzNTpcdFx0fVxuIDIzNjpcdH1cbiAyMzc6XHRcbiAyMzg6XHRzdHJ1Y3QgcHJvdG8gc21jX3Byb3RvID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFNNQyBSZWxlYXNlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZSBgX19zbWNfcmVsZWFzZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvZGUgYmxvY2sgc3Bhbm5pbmcgcm91Z2hseSBsaW5lcyAyODggdGhyb3VnaCAzNDAuIFRoaXMgcmFuZ2UgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhbmQgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSBtb3N0IHVzZWZ1bCBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgbWFuaXB1bGF0aW9uIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBzZWdtZW50IHRvIGZ1bGx5IGdyYXNwIHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIGJlaGF2aW9yLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBTTUMgcmVsZWFzZSBwcm9jZXNzLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHN0YXJ0LiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg4Olx0c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxuIDI4OTpcdHtcbiAyOTA6XHRcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbiAyOTE6XHRcdGludCByYyA9IDA7XG4gMjkyOlx0XG4gMjkzOlx0XHRpZiAoIXNtYy1cdTAwM2V1c2VfZmFsbGJhY2spIHtcbiAyOTQ6XHRcdFx0cmMgPSBzbWNfY2xvc2VfYWN0aXZlKHNtYyk7XG4gMjk1Olx0XHRcdHNtY19zb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuIDI5NjpcdFx0XHRzay1cdTAwM2Vza19zaHV0ZG93biB8PSBTSFVURE9XTl9NQVNLO1xuIDI5NzpcdFx0fSBlbHNlIHtcbiAyOTg6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFNNQ19DTE9TRUQpIHtcbiAyOTk6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gU01DX0xJU1RFTiBcdTAwMjZcdTAwMjZcbiAzMDA6XHRcdFx0XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gU01DX0lOSVQpXG4gMzAxOlx0XHRcdFx0XHRzb2NrX3B1dChzayk7IC8qIHBhc3NpdmUgY2xvc2luZyAqL1xuIDMwMjpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfTElTVEVOKSB7XG4gMzAzOlx0XHRcdFx0XHQvKiB3YWtlIHVwIGNsY3NvY2sgYWNjZXB0ICovXG4gMzA0Olx0XHRcdFx0XHRyYyA9IGtlcm5lbF9zb2NrX3NodXRkb3duKHNtYy1cdTAwM2VjbGNzb2NrLFxuIDMwNTpcdFx0XHRcdFx0XHRcdFx0ICBTSFVUX1JEV1IpO1xuIDMwNjpcdFx0XHRcdH1cbiAzMDc6XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFNNQ19DTE9TRUQ7XG4gMzA4Olx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbiAzMDk6XHRcdFx0fVxuIDMxMDpcdFx0XHRzbWNfcmVzdG9yZV9mYWxsYmFja19jaGFuZ2VzKHNtYyk7XG4gMzExOlx0XHR9XG4gMzEyOlx0XG4gMzEzOlx0XHQvKiBGYWxsYmFjayBzb2NrZXRzIG5ldmVyIGNhbGwgc21jX2Nvbm5fZnJlZSgpLCBzbyB1bmhhc2ggZGlyZWN0bHkuXG4gMzE0Olx0XHQgKiBOb24tZmFsbGJhY2sgc29ja2V0cyB1c2Ugc21jX2Nvbm5fdW5oYXNoKCkgc28gdGhhdCB0aGUgY29ubi1cdTAwM2V1bmhhc2hlZFxuIDMxNTpcdFx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXG4gMzE2Olx0XHQgKiBmaXJzdCAoZS5nLiB2aWEgc21jX2Nvbm5fa2lsbCgpKS5cbiAzMTc6XHRcdCAqL1xuIDMxODpcdFx0aWYgKHNtYy1cdTAwM2V1c2VfZmFsbGJhY2spXG4gMzE5Olx0XHRcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKTtcbiAzMjA6XHRcdGVsc2VcbiAzMjE6XHRcdFx0c21jX2Nvbm5fdW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbiAzMjI6XHRcbiAzMjM6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEKSB7XG4gMzI0Olx0XHRcdGlmIChzbWMtXHUwMDNlY2xjc29jaykge1xuIDMyNTpcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gMzI2Olx0XHRcdFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWMpO1xuIDMyNzpcdFx0XHRcdGxvY2tfc29jayhzayk7XG4gMzI4Olx0XHRcdH1cbiAzMjk6XHRcdFx0aWYgKCFzbWMtXHUwMDNldXNlX2ZhbGxiYWNrKVxuIDMzMDpcdFx0XHRcdHNtY19jb25uX2ZyZWUoXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xuIDMzMTpcdFx0fVxuIDMzMjpcdFxuIDMzMzpcdFx0cmV0dXJuIHJjO1xuIDMzNDpcdH1cbiAzMzU6XHRcbiAzMzY6XHRpbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiAzMzc6XHR7XG4gMzM4Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIDMzOTpcdFx0c3RydWN0IHNtY19zb2NrICpzbWM7XG4gMzQwOlx0XHRpbnQgb2xkX3N0YXRlLCByYyA9IDA7XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAoIXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBgc21jX2Nvbm5fZnJlZWAgZnVuY3Rpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgc21jX2Nvbm5fZnJlZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgYHNtY19jb25uX2ZyZWVgLiBXZSYjMzk7cmUgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AsIHdoaWNoIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgbG9naWMgb2YgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucyBvdmVyIFJETUEuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24mIzM5O3MgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhbiBTTUMgY29ubmVjdGlvbiDigJMgcHJldHR5IHN0YW5kYXJkIHN0dWZmLiBJIGV4cGVjdCBpdCYjMzk7bGwgaGFuZGxlIHRoaW5ncyBsaWtlIGNsZWFuaW5nIHVwIG1lbW9yeSBidWZmZXJzLCBjbG9zaW5nIHNvY2tldHMsIGFuZCBwb3RlbnRpYWxseSBub3RpZnlpbmcgdGhlIHJlbW90ZSBwZWVyIGFib3V0IHRoZSBjb25uZWN0aW9uIHRlcm1pbmF0aW9uLiBHaXZlbiB0aGUgbmF0dXJlIG9mIFNNQywgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhlcmUgd2lsbCBiZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZCwgcHJvYmFibHkgc3BpbmxvY2tzIG9yIG11dGV4ZXMsIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdGhlIHRlYXJkb3duIHByb2Nlc3MuIFRoZSBjaGFsbGVuZ2Ugd2l0aCBTTUMgaXMgYWx3YXlzIG1hbmFnaW5nIHNoYXJlZCBtZW1vcnkgc2FmZWx5LCBzbyBJJiMzOTttIGtlZW4gdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoYXQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGFzc2VzcyB0aGUgZ2VuZXJhbCByb2J1c3RuZXNzIG9mIHRoZSBjbGVhbnVwIHByb2NlZHVyZS4gSSBhbHNvIHdvbmRlciBhYm91dCBpdHMgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBTTUMgY29tcG9uZW50czsgYXJlIHRoZXJlIGNhbGxiYWNrcyBvciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG1vZHVsZT8gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjU1Olx0ICogRXZlcnkgY2FsbGVyIGhvbGRzIGxvY2tfc29jayBmb3IgdGhpcyBzb2NrZXQsIHNvIGNvbm4tXHUwMDNldW5oYXNoZWQgaXMgcHJvdGVjdGVkXG4xMjU2Olx0ICogYnkgdGhhdCBsb2NrIGFuZCBubyBzZXBhcmF0ZSBzeW5jaHJvbmlzYXRpb24gaXMgbmVlZGVkLlxuMTI1NzpcdCAqL1xuMTI1ODpcdHZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbjEyNTk6XHR7XG4xMjYwOlx0XHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xuMTI2MTpcdFxuMTI2MjpcdFx0aWYgKCFjb25uLVx1MDAzZXVuaGFzaGVkKSB7XG4xMjYzOlx0XHRcdGNvbm4tXHUwMDNldW5oYXNoZWQgPSAxO1xuMTI2NDpcdFx0XHRzbWMtXHUwMDNlc2suc2tfcHJvdC1cdTAwM2V1bmhhc2goXHUwMDI2c21jLVx1MDAzZXNrKTtcbjEyNjU6XHRcdH1cbjEyNjY6XHR9XG4xMjY3Olx0XG4xMjY4Olx0LyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXG4xMjY5Olx0dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbjEyNzA6XHR7XG4xMjcxOlx0XHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGNvbm4tXHUwMDNlbGdyO1xuMTI3MjpcdFxuMTI3MzpcdFx0aWYgKCFsZ3IgfHwgY29ubi1cdTAwM2VmcmVlZClcbjEyNzQ6XHRcdFx0LyogQ29ubmVjdGlvbiBoYXMgbmV2ZXIgYmVlbiByZWdpc3RlcmVkIGluIGFcbjEyNzU6XHRcdFx0ICogbGluayBncm91cCwgb3IgaGFzIGFscmVhZHkgYmVlbiBmcmVlZC5cbjEyNzY6XHRcdFx0ICovXG4xMjc3Olx0XHRcdHJldHVybjtcbjEyNzg6XHRcbjEyNzk6XHRcdGNvbm4tXHUwMDNlZnJlZWQgPSAxO1xuMTI4MDpcdFx0LyogVW5oYXNoIGJlZm9yZSBkcm9wcGluZyBsZ3IvbG5rIHJlZnMgc28gdGhlIGRpYWcgcmVhZGVyLCB3aGljaFxuMTI4MTpcdFx0ICogaXRlcmF0ZXMgdW5kZXIgdGhlIHNvY2tldCBoYXNoIHJlYWRfbG9jaywgY2Fubm90IHNlZSBhIGNvbm5lY3Rpb24gd2hvc2VcbjEyODI6XHRcdCAqIGxnciBvciBsbmsgaXMgYmVpbmcgZnJlZWQgY29uY3VycmVudGx5LlxuMTI4MzpcdFx0ICovXG4xMjg0Olx0XHRzbWNfY29ubl91bmhhc2goY29ubik7XG4xMjg1Olx0XHRpZiAoIXNtY19jb25uX2xncl92YWxpZChjb25uKSlcbjEyODY6XHRcdFx0LyogQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZnJvbVxuMTI4NzpcdFx0XHQgKiBsaW5rIGdyb3VwLlxuMTI4ODpcdFx0XHQgKi9cbjEyODk6XHRcdFx0Z290byBsZ3JfcHV0O1xuMTI5MDpcdFxuMTI5MTpcdFx0aWYgKGxnci1cdTAwM2Vpc19zbWNkKSB7XG4xMjkyOlx0XHRcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcbjEyOTM6XHRcdFx0dGFza2xldF9raWxsKFx1MDAyNmNvbm4tXHUwMDNlcnhfdHNrbGV0KTtcbjEyOTQ6XHRcdFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGxnci1cdTAwM2VzbWNkKSlcbjEyOTU6XHRcdFx0XHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XG4xMjk2Olx0XHR9IGVsc2Uge1xuMTI5NzpcdFx0XHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcbjEyOTg6XHRcdFx0aWYgKGN1cnJlbnRfd29yaygpICE9IFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaylcbjEyOTk6XHRcdFx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTk1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgR2FtZSBQbGFuOiBTTUMgUHJvdG9jb2wqKgoKQWxyaWdodCwgdGhpcyBsb29rcyBwcm9taXNpbmcsIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGBuZXQvc21jL2AgY29kZSBpcyByaXBlIGZvciBhIGdvb2QsIGhhcmQgZnV6emluZyBzZXNzaW9uLiBUaGUgU01DIHByb3RvY29sIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyBpbiBteSBzaWdodHMuIEhlcmUmIzM5O3Mgd2h5OgoKRmlyc3QsIGl04oCZcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4gSSBjYW4gbGV2ZXJhZ2Ugc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMg4oCTIGBzb2NrZXQoQUZfU01DLCAuLi4pYCwgYGNvbm5lY3RgLCBgbGlzdGVuYCwgYGFjY2VwdGAsIGBjbG9zZWAg4oCTIHRoZSB3aG9sZSBzaGViYW5nLiBBbmQgZG9uJiMzOTt0IGZvcmdldCB0aGUgc29ja2V0IG1vbml0b3JpbmcgbmV0bGluayByZXF1ZXN0cyAoU01DX0RJQUcpLCB0aGF0JiMzOTtzIGFuIGF0dGFjayB2ZWN0b3IgSSBjYW4gcGxheSB3aXRoLgoKU2Vjb25kLCB0aGUgY29kZSB0b3VjaGVzIGNydWNpYWwgYXJlYXM6IGl04oCZcyBtb2RpZnlpbmcgdGhlIHNvY2tldCB1bmhhc2hpbmcgbGlmZWN5Y2xlLCBkZWFsaW5nIHdpdGggc3luY2hyb25pemF0aW9uLCBhbmQgbWFuYWdpbmcgdGhlIHN0YXRlIGZsYWdzIHdpdGhpbiB0aGUgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAg4oCTIHNwZWNpZmljYWxseSBgY29ubi0mZ3Q7dW5oYXNoZWRgLiBgc21jX2Nvbm5fdW5oYXNoYCBnZXRzIGNhbGxlZCBkdXJpbmcgYHNtY19jb25uX2ZyZWVgIGFuZCBgX19zbWNfcmVsZWFzZWAsIHdoaWNoIGlzIHdoZXJlIG15IGludGVyZXN0IHBlYWtzISBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGZpeCBvciBsaWZlY3ljbGUgbWFuYWdlbWVudCBpc3N1ZSBmb3IgdGhlIHNvY2tldCBoYXNoIHRhYmxlIGFuZCBkaWFnbm9zdGljIHJlYWRlci4gQ29uY3VycmVudCBjYWxscyB0byBgY2xvc2VgLCBgcmVsZWFzZWAsIGBhYm9ydGAsIGFuZCBgc29ja19kaWFnYCB3aWxsIGJlIHRoZSBrZXkgdG8gdW5sb2NraW5nIGFueSBoaWRkZW4gdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdDoKCjEuICBgU01DYCAod2hpY2gsIGZyb20gbG9va2luZyBhdCBgbmV0L3NtYy9LY29uZmlnYCwgZGVwZW5kcyBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYCkgaXMgZW5hYmxlZC4KMi4gIGBTTUNfRElBR2AgaXMgZW5hYmxlZC4KMy4gIGBJTkVUYCAoZXNzZW50aWFsIGZvciBuZXR3b3JraW5nLCBvZiBjb3Vyc2UpCjQuICBgSU5GSU5JQkFORGAgKHJlcXVpcmVkIGZvciBoYXJkd2FyZSBzdXBwb3J0KQo1LiAgYERJQlNgIChEaXJlY3QgSW50ZXJmYWNlIGJldHdlZW4gQnVzIGFuZCBTb2NrZXQpCjYuICBBbmQgc2luY2UgSSBsaWtlIHRvIGNvdmVyIGFsbCB0aGUgYmFzZXMsIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGF0IGBESUJTX0xPYCBpcyBlbmFibGVkIHRvbywganVzdCBpbiBjYXNlLCBpdOKAmXMgdGhlIHNvZnR3YXJlIGxvb3BiYWNrIG9wdGlvbi4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgU01DLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudDsgSSBkb27igJl0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgZnV6emluZy4gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DfGNvbmZpZyBJTkZJTklCQU5EfGNvbmZpZyBESUJTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc9MTQ2PWNvbmZpZyBJMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0hcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnLTE1MC1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc6MTUxOmNvbmZpZyBTTUNfVUNPREVfUEFUQ0hcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtTTUMgcmVsb2NhdGlvbiBwYXRjaFwmIzM0O1xuLS1cbmRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyOm1lbnVjb25maWcgSU5GSU5JQkFORFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE2PWlmIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCB1c2Vyc3BhY2UgTUFEIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yNy1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTM5LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDEtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDMtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0NDpjb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MTpjb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtSRE1BL0NNXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjgxOmNvbmZpZyBJTkZJTklCQU5EX1ZJUlRfRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cdGRlZl9ib29sICFISUdITUVNXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm5nX3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTkdfUkVcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV4dCBnZW5lcmF0aW9uIFJvQ0UgSENBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5YVF9SRVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV0eHRyZW1lIEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9FRkFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7QW1hem9uIEVsYXN0aWMgRmFicmljIEFkYXB0ZXIgKEVGQSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0VSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QWxpYmFiYSBFbGFzdGljIFJETUEgQWRhcHRlciAoRVJETUEpIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSE5TX0hJUDA4XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0hpc2lsaWNvbiBIaXAwOCBGYW1pbHkgUm9DRSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWctMy1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnOjQ6Y29uZmlnIElORklOSUJBTkRfSU9OSUNcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtBTUQgUGVuc2FuZG8gRFNDIFJETUEvUm9DRSBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9NVEhDQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01lbGxhbm94IEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctOS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjEwOmNvbmZpZyBJTkZJTklCQU5EX01USENBX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0VtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9RRURSXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtRTG9naWMgUm9DRSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9VU05JQ1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZlcmJzIHN1cHBvcnQgZm9yIENpc2NvIFZJQ1wmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdm13X3B2cmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcmRtYXZ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9SRE1BVlRcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7UkRNQSB2ZXJicyB0cmFuc3BvcnQgbGlicmFyeVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTExLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTMtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI3OmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMjgtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBkZWJ1Z2dpbmdcJiMzNDsgaWYgRVhQRVJUXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTQxLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjQyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEFcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kIGRhdGEgcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7aVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0lTRVJUXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O2lTQ1NJIEV4dGVuc2lvbnMgZm9yIFJETUEgKGlTRVIpIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjM6Y29uZmlnIElORklOSUJBTkRfUlRSU1xuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfUlRSU19DTElFTlRcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtSVFJTIGNsaWVudCBtb2R1bGVcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xNy1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O1JUUlMgc2VydmVyIG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfU1JQVFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfU01TQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnOjIyOmNvbmZpZyBTTUM5MVhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyA5MUM5eC85MUMxeHh4IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMTMtXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0yMi1cbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyMzYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIFNvZnR3YXJlIFJETUEqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29mdHdhcmUgaW1wbGVtZW50YXRpb25zIG9mIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoUkRNQSkuIFRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHdlJiMzOTtyZSBleHBsb3JpbmcgYWx0ZXJuYXRpdmUgcGF0aHMsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIHBvcnRhYmlsaXR5LCBvciBtYXliZSBldmVuIGluIGVudmlyb25tZW50cyB3aGVyZSBoYXJkd2FyZSBSRE1BIGlzbiYjMzk7dCBhdmFpbGFibGUgb3IgcHJhY3RpY2FsLiBOb3csIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoIGtub3duIG5hbWVzIGluIHRoZSBmaWVsZCwgc28gbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBleGFtaW5lIGBSRE1BX1JYRWAgdG9vLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGNvdmVyIHRoYXQgZ3JvdW5kIHRvIGVuc3VyZSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIEkgd2FudCB0byBsZWF2ZSBubyBzdG9uZSB1bnR1cm5lZCBpbiB0aGlzIGFuYWx5c2lzLCBhbmQgdGhhdCBpbmNsdWRlcyBhbnkgcmVsZXZhbnQgc29mdHdhcmUgYXBwcm9hY2hlcy4gVGhpcyB3aWxsIGhlbHAgZW5zdXJlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkRNQV9SWEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWc6Mjpjb25maWcgUkRNQV9SWEVcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U29mdHdhcmUgUkRNQSBvdmVyIEV0aGVybmV0IChSb0NFKSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MzQKCQkJCQkJCW91dHB1dDogMTk5CgkJCQkJCQl0aG91Z2h0czogNTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgU29ja2V0IExvZ2ljIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBvZiB0aGlzIGNoYW5nZS4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYEZvY3VzU3ltYm9sc2Ag4oCTIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGFyZSBpbXBsZW1lbnRpbmcgdGhpcyBuZXcgZmVhdHVyZSByZWxhdGVkIHRvIFNNQyBzb2NrZXRzLiBMb29raW5nIHRocm91Z2ggdGhlIHByb3ZpZGVkIGxpc3QsIGl0JiMzOTtzIGNsZWFyOgoKMS4gIGBzbWNfY29ubl91bmhhc2hgOiBUaGlzIGlzIGEgKm5ldyogZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBrZXkgaW5kaWNhdG9yIG9mIGZ1bmN0aW9uYWxpdHkgaW50cm9kdWN0aW9uLiBMb2NhdGVkIGluIGBuZXQvc21jL3NtY19jb3JlLmNgLgoyLiAgYHNtY19jb25uX2ZyZWVgOiBJdCYjMzk7cyBiZWVuIG1vZGlmaWVkIHRvICpjYWxsKiBgc21jX2Nvbm5fdW5oYXNoYCwgc28gdGhpcyBsaWtlbHkgaXMgaW50ZWdyYWwgdG8gdGhlIGNsZWFudXAuIEFsc28gaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuCjMuICBgX19zbWNfcmVsZWFzZWA6IFRoaXMgZnVuY3Rpb24sIGxvY2F0ZWQgaW4gYG5ldC9zbWMvYWZfc21jLmNgLCBhbHNvIGNhbGxzIGBzbWNfY29ubl91bmhhc2hgLCBpbXBseWluZyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSByZWxlYXNlIHBhdGguCjQuICBgc21jX2Nvbm5fY3JlYXRlYDogVGhpcyBub3cgaW5pdGlhbGl6ZXMgYGNvbm4tJmd0O3VuaGFzaGVkYC4gVGhhdCYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiwgaW5kaWNhdGluZyB0aGF0IGEgbmV3IGNvbm5lY3Rpb24gaXMgYmVpbmcgbWFuYWdlZCBpbiBhIG5ldyB3YXkuIExvY2F0ZWQgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuCjUuICBgc21jX3VuaGFzaF9za2A6IFRoZSBhY3R1YWwgdW5kZXJseWluZyB1bmhhc2ggaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGluIGBuZXQvc21jL2FmX3NtYy5jYC4KNi4gIGBzbWNfcmVsZWFzZWA6IFRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBzb2NrZXQgcmVsZWFzZSBhbmQgaXMgaW4gYG5ldC9zbWMvYWZfc21jLmNgLgoKTmV4dCwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gdHJpZ2dlciB0aGlzIGxvZ2ljLiBUaGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbiBsaXN0IC0gYFNNQ2AsIGBTTUNfRElBR2AsIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYElORklOSUJBTkRgIC0gc2VlbXMgcmVhc29uYWJsZS4gVGhlc2UgY292ZXIgdGhlIFNNQyBhbmQgSW5maW5pYmFuZCBzdWJzeXN0ZW1zLCB3aGljaCBtYWtlcyBzZW5zZS4KCk5vdyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSBrbm93IHRoaXMgZmVhdHVyZSB3YXJyYW50cyBmdXp6aW5nLCBzbyBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZSBjb25jaXNlLCBhbmQgY2xlYXJseSBhcnRpY3VsYXRlIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjb21wbGV0ZSBhcyBjb25maXJtZWQgYnkgdGhlIHByZXZpb3VzIHJldmlldy4gRmluYWxseSwgSSYjMzk7dmUgZ290IG15IGBGb2N1c1N5bWJvbHNgIGxpc3QsIHdoaWNoIEkmIzM5O3ZlIGFscmVhZHkgc2NydXRpbml6ZWQuCgpCZWZvcmUgSSBjb21taXQgdG8gYHNldC1yZXN1bHRzYCwgSSBuZWVkIGEgZmluYWwgc2FuaXR5IGNoZWNrLiBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgZXhpc3QsIGFuZCB0aGF0IHRoZXkgYXJlIGFjdHVhbGx5IHNwZWNpZmljIHRvIFNNQy4gTG9va3MgZ29vZC4gVGhlc2UgYXJlIGFsbCAqdmVyeSogc3BlY2lmaWMgc29ja2V0IGZ1bmN0aW9ucy4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtTTUNfRElBRyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uX3VuaGFzaCYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9mcmVlJiMzNDssCiAgICAmIzM0O19fc21jX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c21jX2Nvbm5fY3JlYXRlJiMzNDssCiAgICAmIzM0O3NtY191bmhhc2hfc2smIzM0OywKICAgICYjMzQ7c21jX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIHNvY2tldCBoYXNoIG1hbmFnZW1lbnQgYW5kIGxpbmsgZ3JvdXAgZGVzdHJ1Y3Rpb24gbGlmZWN5Y2xlIGluIHRoZSBTTUMgcHJvdG9jb2wgZmFtaWx5LiBJdCBpbnRyb2R1Y2VzIHNtY19jb25uX3VuaGFzaCgpIHdpdGggYSBuZXcgY29ubi1cdTAwM2V1bmhhc2hlZCBmbGFnIHRvIGVuc3VyZSBub24tZmFsbGJhY2sgU01DIHNvY2tldHMgYXJlIHVuaGFzaGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgbGluayBncm91cC9saW5rIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIHdpdGggc29ja2V0IGRpYWdub3N0aWMgZHVtcHMuIFRoZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgbmV0d29ya2luZyBzb2NrZXQgYW5kIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBjb2RlIGFjY2Vzc2libGUgdmlhIHVzZXItc3BhY2Ugc29ja2V0IGFuZCBzb2NrX2RpYWcgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1NNQ19ESUFHJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtESUJTX0xPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2Nvbm5fdW5oYXNoJiMzNDssCiAgICAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAgICYjMzQ7X19zbWNfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7LAogICAgJiMzNDtzbWNfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGhhc2ggbWFuYWdlbWVudCBhbmQgbGluayBncm91cCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgaW4gdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuIEl0IGludHJvZHVjZXMgc21jX2Nvbm5fdW5oYXNoKCkgd2l0aCBhIG5ldyBjb25uLVx1MDAzZXVuaGFzaGVkIGZsYWcgdG8gZW5zdXJlIG5vbi1mYWxsYmFjayBTTUMgc29ja2V0cyBhcmUgdW5oYXNoZWQgZXhhY3RseSBvbmNlIGJlZm9yZSBsaW5rIGdyb3VwL2xpbmsgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBzb2NrZXQgZGlhZ25vc3RpYyBkdW1wcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBuZXR3b3JraW5nIHNvY2tldCBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNvZGUgYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBzb2NrZXQgYW5kIHNvY2tfZGlhZyBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBzb2NrZXQgdGVhcmRvd24gKHNtY19jb25uX2ZyZWUpIGFuZCBzb2NrZXQgZGlhZ25vc3RpY3MgKHNtY19kaWFnKSBieSB1bmhhc2hpbmcgdGhlIHNvY2tldCBlYXJsaWVyIGFuZCB0cmFja2luZyB0aGUgdW5oYXNoIHN0YXRlIHZpYSBhIG5ldyBgdW5oYXNoZWRgIGZsYWcgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuXG5cbjEuIFRoZSBuZXcgYHVuaGFzaGVkYCBmaWVsZCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IHNtY19zb2NrYCB2aWEgYHNrX2FsbG9jKClgICh3aGljaCB6ZXJvZXMgbWVtb3J5KSBhbmQgaXMgZXhwbGljaXRseSByZXNldCB0byAwIGluIGBzbWNfY29ubl9jcmVhdGUoKWAuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxuMy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBzdHJ1Y3R1cmVzIChzdWNoIGFzIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGlvY3RsIHN0cnVjdHVyZXMpIGhhdmUgaGFkIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgaW50cm9kdWNlZC5cbjQuIFRoZSByYWNlIGNvbmRpdGlvbiBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOL0xPQ0tERVAsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4NjY5YmYyYjA0ZmIwOTcwMWZmNWU0ZmJlMGFmY2RjMDYwMjAyM2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDEwOjE4OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9hZl9zbWMuYyBiL25ldC9zbWMvYWZfc21jLmMKaW5kZXggZTlmOTNiM2FiNDM1Yi4uOGM3ODFhNGE0NDg1YiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9hZl9zbWMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL2FmX3NtYy5jCkBAIC0zMTAsNyAmIzQzOzMxMCwxNSBAQCBzdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpCiAJCXNtY19yZXN0b3JlX2ZhbGxiYWNrX2NoYW5nZXMoc21jKTsKIAl9CiAKLQlzay0mZ3Q7c2tfcHJvdC0mZ3Q7dW5oYXNoKHNrKTsKJiM0MzsJLyogRmFsbGJhY2sgc29ja2V0cyBuZXZlciBjYWxsIHNtY19jb25uX2ZyZWUoKSwgc28gdW5oYXNoIGRpcmVjdGx5LgomIzQzOwkgKiBOb24tZmFsbGJhY2sgc29ja2V0cyB1c2Ugc21jX2Nvbm5fdW5oYXNoKCkgc28gdGhhdCB0aGUgY29ubi0mZ3Q7dW5oYXNoZWQKJiM0MzsJICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuCiYjNDM7CSAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNtYy0mZ3Q7dXNlX2ZhbGxiYWNrKQomIzQzOwkJc2stJmd0O3NrX3Byb3QtJmd0O3VuaGFzaChzayk7CiYjNDM7CWVsc2UKJiM0MzsJCXNtY19jb25uX3VuaGFzaCgmYW1wO3NtYy0mZ3Q7Y29ubik7CiAKIAlpZiAoc2stJmd0O3NrX3N0YXRlID09IFNNQ19DTE9TRUQpIHsKIAkJaWYgKHNtYy0mZ3Q7Y2xjc29jaykgewpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWMuaCBiL25ldC9zbWMvc21jLmgKaW5kZXggNDI3YjZkNjNiOTkzMS4uMDc1MzEyMjc4ODM1YyAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWMuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtYy5oCkBAIC0yNzksNiAmIzQzOzI3OSw3IEBAIHN0cnVjdCBzbWNfY29ubmVjdGlvbiB7CiAJdTY0CQkJcGVlcl90b2tlbjsJLyogU01DLUQgdG9rZW4gb2YgcGVlciAqLwogCXU4CQkJa2lsbGVkOwkJLyogYWJub3JtYWwgdGVybWluYXRpb24gKi8KIAl1OAkJCWZyZWVkOwkJLyogbm9ybWFsIHRlcm1pbmF0aW9uICovCiYjNDM7CXU4CQkJdW5oYXNoZWQ7CS8qIHJlbW92ZWQgZnJvbSBzb2NrIGhhc2ggKi8KIAl1OAkJCW91dF9vZl9zeW5jOwkvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi8KIH07CiAKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuYwppbmRleCAwNGFlZGQ5NTc1NDNhLi5lMzAyMjIxYzM1ZTNmIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY29yZS5jCkBAIC0xMjUxLDYgJiM0MzsxMjUxLDIwIEBAIHN0YXRpYyB2b2lkIHNtY19idWZfdW51c2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLAogCX0KIH0KIAomIzQzOy8qIHVuaGFzaCB0aGUgc29ja2V0IG9uY2U7IG93bnMgdGhlIHNpbmdsZSB1bmhhc2ggZm9yIGFsbCBub24tZmFsbGJhY2sgcGF0aHMuCiYjNDM7ICogRXZlcnkgY2FsbGVyIGhvbGRzIGxvY2tfc29jayBmb3IgdGhpcyBzb2NrZXQsIHNvIGNvbm4tJmd0O3VuaGFzaGVkIGlzIHByb3RlY3RlZAomIzQzOyAqIGJ5IHRoYXQgbG9jayBhbmQgbm8gc2VwYXJhdGUgc3luY2hyb25pc2F0aW9uIGlzIG5lZWRlZC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHNtY19jb25uX3VuaGFzaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pOwomIzQzOwomIzQzOwlpZiAoIWNvbm4tJmd0O3VuaGFzaGVkKSB7CiYjNDM7CQljb25uLSZndDt1bmhhc2hlZCA9IDE7CiYjNDM7CQlzbWMtJmd0O3NrLnNrX3Byb3QtJmd0O3VuaGFzaCgmYW1wO3NtYy0mZ3Q7c2spOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovCiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKQogewpAQCAtMTI2Myw2ICYjNDM7MTI3NywxMSBAQCB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKQogCQlyZXR1cm47CiAKIAljb25uLSZndDtmcmVlZCA9IDE7CiYjNDM7CS8qIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgbGdyL2xuayByZWZzIHNvIHRoZSBkaWFnIHJlYWRlciwgd2hpY2gKJiM0MzsJICogaXRlcmF0ZXMgdW5kZXIgdGhlIHNvY2tldCBoYXNoIHJlYWRfbG9jaywgY2Fubm90IHNlZSBhIGNvbm5lY3Rpb24gd2hvc2UKJiM0MzsJICogbGdyIG9yIGxuayBpcyBiZWluZyBmcmVlZCBjb25jdXJyZW50bHkuCiYjNDM7CSAqLwomIzQzOwlzbWNfY29ubl91bmhhc2goY29ubik7CiAJaWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpCiAJCS8qIENvbm5lY3Rpb24gaGFzIGFscmVhZHkgdW5yZWdpc3RlcmVkIGZyb20KIAkJICogbGluayBncm91cC4KQEAgLTIwNTMsNiAmIzQzOzIwNzIsNyBAQCBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKQogCWlmICghY29ubi0mZ3Q7bGdyLSZndDtpc19zbWNkKQogCQlzbWNyX2xpbmtfaG9sZChjb25uLSZndDtsbmspOyAvKiBsaW5rX3B1dCBpbiBzbWNfY29ubl9mcmVlKCkgKi8KIAljb25uLSZndDtmcmVlZCA9IDA7CiYjNDM7CWNvbm4tJmd0O3VuaGFzaGVkID0gMDsKIAljb25uLSZndDtsb2NhbF90eF9jdHJsLmNvbW1vbi50eXBlID0gU01DX0NEQ19NU0dfVFlQRTsKIAljb25uLSZndDtsb2NhbF90eF9jdHJsLmxlbiA9IFNNQ19XUl9UWF9TSVpFOwogCWNvbm4tJmd0O3VyZ19zdGF0ZSA9IFNNQ19VUkdfUkVBRDsKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuaCBiL25ldC9zbWMvc21jX2NvcmUuaAppbmRleCA1YzE4ZjA4YTRjOGE1Li5mMjNkNjBhZWYwYjc5IDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY29yZS5oCkBAIC01OTUsNiAmIzQzOzU5NSw3IEBAIHZvaWQgc21jX3NuZGJ1Zl9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTsKIHZvaWQgc21jX3JtYl9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTsKIGludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTsKIAomIzQzO3ZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7CiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTsKIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpOwogaW50IHNtY19jb3JlX2luaXQodm9pZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgU29ja2V0IFVuaGFzaGluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBoYW5kbGluZyB0aGUgdW5oYXNoaW5nIG9mIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc29ja2V0cyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gTGV0JiMzOTtzIGJyZWFrIGRvd24gbXkgdW5kZXJzdGFuZGluZy4gRmlyc3QsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gY2VudGVyIGFyb3VuZCBhIG5ldyBmaWVsZCwgYHVuaGFzaGVkYCwgd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWVsZCBpcyB0byB0cmFjayB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdW5oYXNoZWQsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgcHJldmVudGluZyBkb3VibGUgdW5oYXNoaW5nLgoKTG9va2luZyBhdCBgX19zbWNfcmVsZWFzZWAsIHRoZSBsb2dpYyBpcyBub3cgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhlIGB1c2VfZmFsbGJhY2tgIGZsYWcuIElmIGl0JiMzOTtzIHNldCwgdGhlIHN0YW5kYXJkIHNvY2tldCB1bmhhc2ggaXMgdXNlZCwgYW5kIGl0IG1ha2VzIHNlbnNlIHRoYXQgYHNrLSZndDtza19wcm90LSZndDt1bmhhc2goc2spYCBpcyBjYWxsZWQuIEJ1dCBpZiB3ZSAqYXJlbiYjMzk7dCogdXNpbmcgdGhlIGZhbGxiYWNrLCB0aGUgcGF0aCBmb3IgdW5oYXNoaW5nIGJlY29tZXMgYHNtY19jb25uX3VuaGFzaCgmYW1wO3NtYy0mZ3Q7Y29ubilgLgoKVGhlIGNydWNpYWwgcGFydCBpcyB0aGVuIGBzbWNfY29ubl91bmhhc2hgLiBJdCBjaGVja3MgYCFjb25uLSZndDt1bmhhc2hlZGAuIFRoaXMgaXMgdGhlIHNhZmVndWFyZCwgZW5zdXJpbmcgdGhhdCB0aGUgZnVuY3Rpb24gb25seSBleGVjdXRlcyBvbmNlLiBJdCBzZXRzIGBjb25uLSZndDt1bmhhc2hlZCA9IDFgIHRvIG1hcmsgdGhlIGNvbm5lY3Rpb24gYXMgdW5oYXNoZWQgYW5kIHRoZW4gcHJvY2VlZHMgdG8gdW5oYXNoIHRoZSB1bmRlcmx5aW5nIHNvY2tldCB2aWEgYHNtYy0mZ3Q7c2suc2tfcHJvdC0mZ3Q7dW5oYXNoKCZhbXA7c21jLSZndDtzaylgLgoKSW4gYHNtY19jb25uX2ZyZWUoKWAsIGl0IGFwcGVhcnMgdGhhdCBgc21jX2Nvbm5fdW5oYXNoKGNvbm4pYCBpcyBjYWxsZWQgKmJlZm9yZSogcmVsZWFzaW5nIHRoZSBsb2dpY2FsIGdyb3VwIGFuZCBsaW5rIHJlZmVyZW5jZXMuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCBmb3IgZW5zdXJpbmcgY2xlYW51cC4gRmluYWxseSwgYHNtY19jb25uX2NyZWF0ZSgpYCBpbml0aWFsaXplcyBgY29ubi0mZ3Q7dW5oYXNoZWQgPSAwYCwgYXMgZXhwZWN0ZWQuIFRoaXMgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgY2xlYW4sIGZpcnN0LXRpbWUgdW5oYXNoLgoKVG8gcmVpbmZvcmNlIG15IHVuZGVyc3RhbmRpbmcsIEkmIzM5O2xsIGRyaWxsIGRvd24gdG8gc2VlIHdoZXJlIGBjb25uYCBpcyBhbGxvY2F0ZWQuIEkgcmVjYWxsIHRoYXQgYGNvbm5gIGlzIGVtYmVkZGVkIGluc2lkZSB0aGUgYHN0cnVjdCBzbWNfc29ja2AuIFdoZW4gYW4gU01DIHNvY2tldCBpcyBhbGxvY2F0ZWQsIHZpYSBlaXRoZXIgYHNtY19zb2NrX2FsbG9jYCBvciBgc21jX2NyZWF0ZWAsIHRoZSB3aG9sZSBgc21jX3NvY2tgIHN0cnVjdHVyZSwgaW5jbHVkaW5nIGBjb25uYCwgaXMgYWxsb2NhdGVkIGF0IG9uY2UuCgpUbyBkb3VibGUtY2hlY2sgdGhlIGFsbG9jYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBhbnl0aGluZyBJIG1pZ2h0IGJlIG1pc3NpbmcsIEkmIzM5O2xsIGxldmVyYWdlIG15IHByZWZlcnJlZCB0b29scyAoZ3JlcHBlciBhbmQvb3IgbXkgZmlsZSByZWFkaW5nIHV0aWxpdGllcykgYW5kIHBpbnBvaW50IHRoZSBtZW1vcnkgYWxsb2NhdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgd2hvbGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0zMzQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMzNjAtXG5uZXQvc21jL2FmX3NtYy5jOjMzNjE6aW50IHNtY19jcmVhdGVfY2xjc2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHkpXG5uZXQvc21jL2FmX3NtYy5jLTMzNjIte1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzM4MC1cbm5ldC9zbWMvYWZfc21jLmM6MzM4MTpzdGF0aWMgaW50IHNtY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG5uZXQvc21jL2FmX3NtYy5jLTMzODItXHRcdCAgICAgIGludCBrZXJuKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzQwMi1cbm5ldC9zbWMvYWZfc21jLmM6MzQwMzpcdHJjID0gc21jX2NyZWF0ZV9jbGNzayhuZXQsIHNrLCBmYW1pbHkpO1xubmV0L3NtYy9hZl9zbWMuYy0zNDA0LVx0aWYgKHJjKSB7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zNDEyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBzbWNfc29ja19mYW1pbHlfb3BzID0ge1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzQxNC1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbm5ldC9zbWMvYWZfc21jLmM6MzQxNTpcdC5jcmVhdGVcdD0gc21jX2NyZWF0ZSxcbm5ldC9zbWMvYWZfc21jLmMtMzQxNi19O1xuLS1cbm5ldC9zbWMvc21jLmg9NzE9dm9pZCBzbWNfc2tfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgaW50IHByb3RvY29sKTtcbm5ldC9zbWMvc21jLmgtNzItLyogY2xjc29jayBpbml0aWFsaXphdGlvbiAqL1xubmV0L3NtYy9zbWMuaDo3MzppbnQgc21jX2NyZWF0ZV9jbGNzayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgaW50IGZhbWlseSk7XG5uZXQvc21jL3NtYy5oLTc0LVxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz0xMTM9c3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9zbWMvc21jX2luZXQuYy0xMTktXHQvKiBjcmVhdGUgY2xjc29jayAqL1xubmV0L3NtYy9zbWNfaW5ldC5jOjEyMDpcdHJldHVybiBzbWNfY3JlYXRlX2NsY3NrKG5ldCwgc2ssIHNrLVx1MDAzZXNrX2ZhbWlseSk7XG5uZXQvc21jL3NtY19pbmV0LmMtMTIxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBTb2NrZXQgQWxsb2NhdGlvbiBpbiBTTUMgQ3JlYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIG15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGNydWNpYWwgc29ja2V0IGFsbG9jYXRpb24gcG9pbnRzIHdpdGhpbiB0aGUgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucyAoU01DKSBzZXR1cC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGBzbWNfc29ja19hbGxvY2Agb3IsIGFsdGVybmF0aXZlbHksIHRoZSBtb3JlIGdlbmVyaWMgYHNrX2FsbG9jYCBmdW5jdGlvbnMgYXMgdGhleSYjMzk7cmUgdXRpbGl6ZWQgd2l0aGluIGJvdGggYHNtY19jcmVhdGVgIGFuZCBgc21jX3NrX2luaXRgLiBNeSBpbnRlbnRpb24gaXMgdG8gaW1tZWRpYXRlbHkgc2VlIGhvdyB0aGUgc3lzdGVtIGFsbG9jYXRlcyB0aGUgKmFjdHVhbCogc29ja2V0IG9iamVjdCB0aGF0IHdpbGwgdW5kZXJwaW4gdGhlIFNNQyBjb21tdW5pY2F0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgZGlmZmVyaW5nIGFsbG9jYXRpb24gcGF0aHMgZGVwZW5kaW5nIG9uIGNvbnRleHQsIGFuZCBpZiBzbywgaG93IHRob3NlIHBhdGhzIG1heSBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgcmVzb3VyY2UgdXRpbGl6YXRpb24uIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZmxhZ3Mgb3IgcGFyYW1ldGVycyBwYXNzZWQgZHVyaW5nIHNvY2tldCBhbGxvY2F0aW9uIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGUgU01DIGRvbWFpbj8gQXJlIHdlIGFsbG9jYXRpbmcgYSBzdGFuZGFyZCBzb2NrZXQgdGhlbiBtb2RpZnlpbmcgaXQsIG9yIGlzIGEgZGVkaWNhdGVkIFNNQy1hd2FyZSBzb2NrZXQgdHlwZSBiZWluZyBicm91Z2h0IGludG8gZXhpc3RlbmNlPyBHZXR0aW5nIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFsbG9jYXRpb24gZmxvdyBpcyBnb2luZyB0byBiZSBmb3VuZGF0aW9uYWwgZm9yIGRpYWdub3NpbmcgYW55IGlzc3VlcyBsYXRlciBvbjsgZXNwZWNpYWxseSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVyaW5nIHNvY2tldCBsaWZldGltZSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz00Mjk9c3RhdGljIHN0cnVjdCBzb2NrICpzbWNfc29ja19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3NtYy9hZl9zbWMuYy00MzUtXHRwcm90ID0gKHByb3RvY29sID09IFNNQ1BST1RPX1NNQzYpID8gXHUwMDI2c21jX3Byb3RvNiA6IFx1MDAyNnNtY19wcm90bztcbm5ldC9zbWMvYWZfc21jLmM6NDM2Olx0c2sgPSBza19hbGxvYyhuZXQsIFBGX1NNQywgR0ZQX0tFUk5FTCwgcHJvdCwgMCk7XG5uZXQvc21jL2FmX3NtYy5jLTQzNy1cdGlmICghc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBzbWNfc29ja19hbGxvY2AgZnVuY3Rpb24gaW4gYG5ldC9zbWMvYWZfc21jLmNgOgoKKipBbmFseXppbmcgc21jX3NvY2tfYWxsb2MgaW4gbmV0L3NtYy9hZl9zbWMuYyoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBvcGVuaW5nIHVwIHRoZSBgc21jX3NvY2tfYWxsb2NgIGZ1bmN0aW9uIGluIGBuZXQvc21jL2FmX3NtYy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIFNNQyBzb2NrZXRzIGFyZSBhY3R1YWxseSBpbml0aWFsaXplZCBhbmQgY3JlYXRlZC4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIHRoYXQgdGhpcyBpcyB0aGUgcHJpbWFyeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGZvciB0aGUgU01DIHNvY2tldCBzdHJ1Y3R1cmUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgc2V0cyB1cCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGFueSBkZWZhdWx0IHZhbHVlcyBpdCB1c2VzLCBhbmQgd2hhdCBraW5kIG9mIGluaXRpYWwgY2hlY2tzIGl0JiMzOTtzIHBlcmZvcm1pbmcuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3ksIHdoZXRoZXIgaXQmIzM5O3MgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGttYWxsb2NgIGFuZCB3aGV0aGVyIGFueSBzcGVjaWZpYyBmbGFncyBhcmUgYmVpbmcgYXBwbGllZC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBhbnkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNvY2tldCYjMzk7cyBpbnRlcm5hbCBzdGF0ZSB2YXJpYWJsZXMsIHRoZSBzZXR0aW5nIG9mIHRoZSBwcm90b2NvbCBmYW1pbHksIGFuZCBwb3RlbnRpYWxseSBhbnkgcmVnaXN0cmF0aW9uIG9yIGxpbmtpbmcgaW50byB0aGUgb3ZlcmFsbCBTTUMgc3Vic3lzdGVtLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nIOKAkyBob3cgaXQgcmVzcG9uZHMgdG8gYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBvdGhlciBwb3RlbnRpYWwgaXNzdWVzIGR1cmluZyB0aGUgc29ja2V0IHNldHVwIHByb2Nlc3MuIEFueSByZXNvdXJjZSBsaW1pdHMgYmVpbmcgY29uc2lkZXJlZD8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBhdCB0aGlzIHBvaW50PyBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLCBhbmQgaXQgZ2l2ZXMgYSBwcmV0dHkgZ29vZCBjbHVlIG9mIHRoZSBvdmVyYWxsIHBpY3R1cmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyNTpcdFx0c21jX2Nsb3NlX2luaXQoc21jKTtcbiA0MjY6XHRcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlaGFzaChzayk7XG4gNDI3Olx0fVxuIDQyODpcdFxuIDQyOTpcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqc21jX3NvY2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIDQzMDpcdFx0XHRcdFx0ICAgaW50IHByb3RvY29sKVxuIDQzMTpcdHtcbiA0MzI6XHRcdHN0cnVjdCBwcm90byAqcHJvdDtcbiA0MzM6XHRcdHN0cnVjdCBzb2NrICpzaztcbiA0MzQ6XHRcbiA0MzU6XHRcdHByb3QgPSAocHJvdG9jb2wgPT0gU01DUFJPVE9fU01DNikgPyBcdTAwMjZzbWNfcHJvdG82IDogXHUwMDI2c21jX3Byb3RvO1xuIDQzNjpcdFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX1NNQywgR0ZQX0tFUk5FTCwgcHJvdCwgMCk7XG4gNDM3Olx0XHRpZiAoIXNrKVxuIDQzODpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0Mzk6XHRcbiA0NDA6XHRcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsgLyogc2V0cyBza19yZWZjbnQgdG8gMSAqL1xuIDQ0MTpcdFx0c21jX3NrX2luaXQobmV0LCBzaywgcHJvdG9jb2wpO1xuIDQ0MjpcdFxuIDQ0MzpcdFx0cmV0dXJuIHNrO1xuIDQ0NDpcdH1cbiA0NDU6XHRcbiA0NDY6XHRpbnQgc21jX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxuIDQ0NzpcdFx0ICAgICBpbnQgYWRkcl9sZW4pXG4gNDQ4Olx0e1xuIDQ0OTpcdFx0c3RydWN0IHNvY2thZGRyX2luICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyO1xuIDQ1MDpcdFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiA0NTE6XHRcdHN0cnVjdCBzbWNfc29jayAqc21jO1xuIDQ1MjpcdFx0aW50IHJjO1xuIDQ1MzpcdFxuIDQ1NDpcdFx0c21jID0gc21jX3NrKHNrKTtcbiA0NTU6XHRcbiA0NTY6XHRcdC8qIHJlcGxpY2F0ZSB0ZXN0cyBmcm9tIGluZXRfYmluZCgpLCB0byBiZSBzYWZlIHdydC4gZnV0dXJlIGNoYW5nZXMgKi9cbiA0NTc6XHRcdHJjID0gLUVJTlZBTDtcbiA0NTg6XHRcdGlmIChhZGRyX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpXG4gNDU5Olx0XHRcdGdvdG8gb3V0O1xuIDQ2MDpcdFxuIDQ2MTpcdFx0cmMgPSAtRUFGTk9TVVBQT1JUO1xuIDQ2MjpcdFx0aWYgKGFkZHItXHUwMDNlc2luX2ZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxuIDQ2MzpcdFx0ICAgIGFkZHItXHUwMDNlc2luX2ZhbWlseSAhPSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbiA0NjQ6XHRcdCAgICBhZGRyLVx1MDAzZXNpbl9mYW1pbHkgIT0gQUZfVU5TUEVDKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTYxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIFNNQyBDb25uZWN0aW9uIEhhbmRsaW5nKioKCk9rYXksIHNvIGBza19hbGxvY2AgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgemVyb2VkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHVzaW5nIGVpdGhlciBga21lbV9jYWNoZV96YWxsb2NgIG9yIGBremFsbG9jYC4gVGhhdCYjMzk7cyBnb29kOyBpdCYjMzk7cyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuIEFuZCB0aGVuIEkgc2VlIHRoYXQgYHNtY19jb25uX2NyZWF0ZWAgZXhwbGljaXRseSBzZXRzIGBjb25uLSZndDt1bmhhc2hlZCA9IDBgLiBUaGlzIG1ha2VzIG1lIHRoaW5rIHRoZXJlICpzaG91bGRuJiMzOTt0KiBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGZpZWxkLgoKQnV0LCBJJiMzOTttIGEgc3RpY2tsZXIgZm9yIGRldGFpbCwgYW5kIEkmIzM5O3ZlIGxlYXJuZWQgdGhlIGhhcmQgd2F5IG5vdCB0byBhc3N1bWUgYW55dGhpbmcuIFNvLCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkgY2VydGFpbiouIExldCYjMzk7cyBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IGNoZWNrIGZvciBhbnkgb3RoZXIgaW5zdGFuY2VzIHdoZXJlIGBzbWNfY29ubmVjdGlvbmAgb3IsIGNydWNpYWxseSwgdGhlIGB1bmhhc2hlZGAgZmllbGQsIGlzIHVzZWQgd2l0aGluIHRoZSBTTUMgc3Vic3lzdGVtLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgaWYgdGhlcmUmIzM5O3MgYW55IGNvZGUgcGF0aCB3aGVyZSBgdW5oYXNoZWRgIG1pZ2h0IGJlIHJlYWQgYmVmb3JlIGJlaW5nIGV4cGxpY2l0bHkgc2V0LCBkZXNwaXRlIHRoZSBpbml0aWFsaXphdGlvbiBpbiBgc21jX2Nvbm5fY3JlYXRlYC4KCkkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gZmlsZXMgaW4gdGhlIGBuZXQvc21jL2AgZGlyZWN0b3J5IGl0c2VsZiwgcGFydGljdWxhcmx5IHRoZSBkaWFnbm9zdGljIHJlYWRlciwgYW5kIGFueSBvdGhlciBmaWxlcyBkZWFsaW5nIHdpdGggY29ubmVjdGlvbiBtYW5hZ2VtZW50LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYWNjZXNzIG9yIHJlbHkgb24gdGhlIGB1bmhhc2hlZGAgZmllbGQmIzM5O3Mgc3RhdGUuIEkgbmVlZCB0byBiZSAxMDAlIGNvbmZpZGVudCB0aGVyZSYjMzk7cyBubyBzdWJ0bGUsIGx1cmtpbmcsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5oYXNoZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9Mjg4PXN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMxMy1cdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cbm5ldC9zbWMvYWZfc21jLmM6MzE0Olx0ICogTm9uLWZhbGxiYWNrIHNvY2tldHMgdXNlIHNtY19jb25uX3VuaGFzaCgpIHNvIHRoYXQgdGhlIGNvbm4tXHUwMDNldW5oYXNoZWRcbm5ldC9zbWMvYWZfc21jLmMtMzE1LVx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXG4tLVxubmV0L3NtYy9zbWMuaD0xOTU9c3RydWN0IHNtY19jb25uZWN0aW9uIHtcbi0tXG5uZXQvc21jL3NtYy5oLTI4MS1cdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xubmV0L3NtYy9zbWMuaDoyODI6XHR1OFx0XHRcdHVuaGFzaGVkO1x0LyogcmVtb3ZlZCBmcm9tIHNvY2sgaGFzaCAqL1xubmV0L3NtYy9zbWMuaC0yODMtXHR1OFx0XHRcdG91dF9vZl9zeW5jO1x0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEyMjQ9c3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTQtLyogdW5oYXNoIHRoZSBzb2NrZXQgb25jZTsgb3ducyB0aGUgc2luZ2xlIHVuaGFzaCBmb3IgYWxsIG5vbi1mYWxsYmFjayBwYXRocy5cbm5ldC9zbWMvc21jX2NvcmUuYzoxMjU1OiAqIEV2ZXJ5IGNhbGxlciBob2xkcyBsb2NrX3NvY2sgZm9yIHRoaXMgc29ja2V0LCBzbyBjb25uLVx1MDAzZXVuaGFzaGVkIGlzIHByb3RlY3RlZFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTYtICogYnkgdGhhdCBsb2NrIGFuZCBubyBzZXBhcmF0ZSBzeW5jaHJvbmlzYXRpb24gaXMgbmVlZGVkLlxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xMjU4PXZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTI2MS1cbm5ldC9zbWMvc21jX2NvcmUuYzoxMjYyOlx0aWYgKCFjb25uLVx1MDAzZXVuaGFzaGVkKSB7XG5uZXQvc21jL3NtY19jb3JlLmM6MTI2MzpcdFx0Y29ubi1cdTAwM2V1bmhhc2hlZCA9IDE7XG5uZXQvc21jL3NtY19jb3JlLmMtMTI2NC1cdFx0c21jLVx1MDAzZXNrLnNrX3Byb3QtXHUwMDNldW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE5OTY9aW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3NC1cdGNvbm4tXHUwMDNlZnJlZWQgPSAwO1xubmV0L3NtYy9zbWNfY29yZS5jOjIwNzU6XHRjb25uLVx1MDAzZXVuaGFzaGVkID0gMDtcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc2LVx0Y29ubi1cdTAwM2Vsb2NhbF90eF9jdHJsLmNvbW1vbi50eXBlID0gU01DX0NEQ19NU0dfVFlQRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMwNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIHRoZSBTTUMgRGlhZyBSZWFkZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIHJhY2UgY29uZGl0aW9uIHRoaXMgaXMgdGFyZ2V0aW5nLiBUaGUgYG5ldC9zbWMvc21jX2RpYWcuY2AgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQsIHNwZWNpZmljYWxseSB0aGUgZGlhZyByZWFkZXIgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoYXQgYXJlYSB3ZWxsLCBhbmQgSSYjMzk7dmUgc2VlbiBzb21lIHRyaWNreSB0aHJlYWRpbmcgaXNzdWVzIGNyb3AgdXAgaW4gdGhlIHBhc3QgcmVsYXRlZCB0byBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGNvbGxlY3Rpb24uIE15IGludHVpdGlvbiBzdWdnZXN0cyB0aGF0IHRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUga2luZCBvZiBjb25jdXJyZW50IGFjY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGhvdyB0aGUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyByZWFkIGFuZCB3cml0dGVuLCBwZXJoYXBzIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb3IgdGVhcmRvd24sIG9yIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGFuZCB3aGF0IHRoZSBjb21taXQgbWVzc2FnZSBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWFnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX1NNQylcdCYjNDM7PSBzbWMub1xubmV0L3NtYy9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19TTUNfRElBRylcdCYjNDM7PSBzbWNfZGlhZy5vXG5uZXQvc21jL01ha2VmaWxlLTUtc21jLXkgOj0gYWZfc21jLm8gc21jX3BuZXQubyBzbWNfaWIubyBzbWNfY2xjLm8gc21jX2NvcmUubyBzbWNfd3IubyBzbWNfbGxjLm9cbi0tXG5uZXQvc21jL3NtYy5oPTI4Nj1zdHJ1Y3Qgc21jX3NvY2sge1x0XHRcdFx0Lyogc21jIHNvY2sgY29udGFpbmVyICovXG4tLVxubmV0L3NtYy9zbWMuaC0zMDktXHRpbnRcdFx0XHRmYWxsYmFja19yc247XHQvKiByZWFzb24gZm9yIGZhbGxiYWNrICovXG5uZXQvc21jL3NtYy5oOjMxMDpcdHUzMlx0XHRcdHBlZXJfZGlhZ25vc2lzOyAvKiBkZWNsaW5lIHJlYXNvbiBmcm9tIHBlZXIgKi9cbm5ldC9zbWMvc21jLmgtMzExLVx0YXRvbWljX3QgICAgICAgICAgICAgICAgcXVldWVkX3NtY19oczsgIC8qIHF1ZXVlZCBzbWMgaGFuZHNoYWtlcyAqL1xuLS1cbm5ldC9zbWMvc21jX2NsYy5jPTY4OT1pbnQgc21jX2NsY193YWl0X21zZyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgdm9pZCAqYnVmLCBpbnQgYnVmbGVuLFxuLS1cbm5ldC9zbWMvc21jX2NsYy5jLTc4OS1cdFx0cmVhc29uX2NvZGUgPSBTTUNfQ0xDX0RFQ0xfUEVFUkRFQ0w7XG5uZXQvc21jL3NtY19jbGMuYzo3OTA6XHRcdHNtYy1cdTAwM2VwZWVyX2RpYWdub3NpcyA9IG50b2hsKGRjbGMtXHUwMDNlcGVlcl9kaWFnbm9zaXMpO1xubmV0L3NtYy9zbWNfY2xjLmMtNzkxLVx0XHRpZiAoKGRjbGMtXHUwMDNlaGRyLnR5cGV2MiBcdTAwMjYgU01DX0ZJUlNUX0NPTlRBQ1RfTUFTSykgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3NtYy9zbWNfY2xjLmMtODAzLS8qIHNlbmQgQ0xDIERFQ0xJTkUgbWVzc2FnZSBhY3Jvc3MgaW50ZXJuYWwgVENQIHNvY2tldCAqL1xubmV0L3NtYy9zbWNfY2xjLmM6ODA0OmludCBzbWNfY2xjX3NlbmRfZGVjbGluZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgdTMyIHBlZXJfZGlhZ19pbmZvLCB1OCB2ZXJzaW9uKVxubmV0L3NtYy9zbWNfY2xjLmMtODA1LXtcbi0tXG5uZXQvc21jL3NtY19jbGMuYy04MTctXHRkY2xjLm9zX3R5cGUgPSB2ZXJzaW9uID09IFNNQ19WMSA/IDAgOiBTTUNfQ0xDX09TX0xJTlVYO1xubmV0L3NtYy9zbWNfY2xjLmM6ODE4Olx0ZGNsYy5oZHIudHlwZXYyID0gKHBlZXJfZGlhZ19pbmZvID09IFNNQ19DTENfREVDTF9TWU5DRVJSKSA/XG5uZXQvc21jL3NtY19jbGMuYy04MTktXHRcdFx0XHRcdFx0U01DX0ZJUlNUX0NPTlRBQ1RfTUFTSyA6IDA7XG4tLVxubmV0L3NtYy9zbWNfY2xjLmMtODIzLVx0XHQgICAgICAgc2l6ZW9mKGxvY2FsX3N5c3RlbWlkKSk7XG5uZXQvc21jL3NtY19jbGMuYzo4MjQ6XHRkY2xjLnBlZXJfZGlhZ25vc2lzID0gaHRvbmwocGVlcl9kaWFnX2luZm8pO1xubmV0L3NtYy9zbWNfY2xjLmMtODI1LVx0aWYgKHZlcnNpb24gPT0gU01DX1YxKSB7XG4tLVxubmV0L3NtYy9zbWNfY2xjLmg9MzAyPXN0cnVjdCBzbWNfY2xjX21zZ19kZWNsaW5lIHtcdC8qIGNsYyBkZWNsaW5lIG1lc3NhZ2UgKi9cbi0tXG5uZXQvc21jL3NtY19jbGMuaC0zMDQtXHR1OCBpZF9mb3JfcGVlcltTTUNfU1lTVEVNSURfTEVOXTsgLyogc2VuZGVyIHBlZXJfaWQgKi9cbm5ldC9zbWMvc21jX2NsYy5oOjMwNTpcdF9fYmUzMiBwZWVyX2RpYWdub3NpcztcdC8qIGRpYWdub3NpcyBpbmZvcm1hdGlvbiAqL1xubmV0L3NtYy9zbWNfY2xjLmgtMzA2LSNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRClcbi0tXG5uZXQvc21jL3NtY19jbGMuaC0zMTYtXG5uZXQvc21jL3NtY19jbGMuaDozMTc6I2RlZmluZSBTTUNfREVDTF9ESUFHX0NPVU5UX1YyXHQ0IC8qIG5vLiBvZiBhZGRpdGlvbmFsIHBlZXIgZGlhZ25vc2lzIGNvZGVzICovXG5uZXQvc21jL3NtY19jbGMuaC0zMTgtXG5uZXQvc21jL3NtY19jbGMuaD0zMTk9c3RydWN0IHNtY19jbGNfbXNnX2RlY2xpbmVfdjIge1x0LyogY2xjIGRlY2xpbmUgbWVzc2FnZSAqL1xuLS1cbm5ldC9zbWMvc21jX2NsYy5oLTMyMS1cdHU4IGlkX2Zvcl9wZWVyW1NNQ19TWVNURU1JRF9MRU5dOyAvKiBzZW5kZXIgcGVlcl9pZCAqL1xubmV0L3NtYy9zbWNfY2xjLmg6MzIyOlx0X19iZTMyIHBlZXJfZGlhZ25vc2lzO1x0LyogZGlhZ25vc2lzIGluZm9ybWF0aW9uICovXG5uZXQvc21jL3NtY19jbGMuaC0zMjMtI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKVxuLS1cbm5ldC9zbWMvc21jX2NsYy5oLTMzMC1cdHU4IHJlc2VydmVkMlszXTtcbm5ldC9zbWMvc21jX2NsYy5oOjMzMTpcdF9fYmUzMiBwZWVyX2RpYWdub3Npc192MltTTUNfREVDTF9ESUFHX0NPVU5UX1YyXTtcbm5ldC9zbWMvc21jX2NsYy5oLTMzMi1cdHN0cnVjdCBzbWNfY2xjX21zZ190cmFpbCB0cmw7IC8qIGV5ZSBjYXRjaGVyIFwmIzM0O1NNQ0RcJiMzNDsgb3IgXCYjMzQ7U01DUlwmIzM0OyBFQkNESUMgKi9cbi0tXG5uZXQvc21jL3NtY19jbGMuaD00NDc9aW50IHNtY19jbGNfd2FpdF9tc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHZvaWQgKmJ1ZiwgaW50IGJ1Zmxlbixcbm5ldC9zbWMvc21jX2NsYy5oLTQ0OC1cdFx0ICAgICB1OCBleHBlY3RlZF90eXBlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xubmV0L3NtYy9zbWNfY2xjLmg6NDQ5OmludCBzbWNfY2xjX3NlbmRfZGVjbGluZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgdTMyIHBlZXJfZGlhZ19pbmZvLCB1OCB2ZXJzaW9uKTtcbm5ldC9zbWMvc21jX2NsYy5oLTQ1MC1pbnQgc21jX2NsY19zZW5kX3Byb3Bvc2FsKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTI2OT12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjc5LVx0Y29ubi1cdTAwM2VmcmVlZCA9IDE7XG5uZXQvc21jL3NtY19jb3JlLmM6MTI4MDpcdC8qIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgbGdyL2xuayByZWZzIHNvIHRoZSBkaWFnIHJlYWRlciwgd2hpY2hcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjgxLVx0ICogaXRlcmF0ZXMgdW5kZXIgdGhlIHNvY2tldCBoYXNoIHJlYWRfbG9jaywgY2Fubm90IHNlZSBhIGNvbm5lY3Rpb24gd2hvc2Vcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTUtI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG5uZXQvc21jL3NtY19kaWFnLmM6MTY6I2luY2x1ZGUgXHUwMDNjbGludXgvc29ja19kaWFnLmhcdTAwM2Vcbm5ldC9zbWMvc21jX2RpYWcuYzoxNzojaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFx1MDAzZVxubmV0L3NtYy9zbWNfZGlhZy5jOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3NtY19kaWFnLmhcdTAwM2Vcbm5ldC9zbWMvc21jX2RpYWcuYy0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTI1LVxubmV0L3NtYy9zbWNfZGlhZy5jOjI2OnN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCB7XG5uZXQvc21jL3NtY19kaWFnLmMtMjctXHRpbnQgcG9zWzJdO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yOS1cbm5ldC9zbWMvc21jX2RpYWcuYzozMDpzdGF0aWMgc3RydWN0IHNtY19kaWFnX2R1bXBfY3R4ICpzbWNfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9zbWMvc21jX2RpYWcuYy0zMS17XG5uZXQvc21jL3NtY19kaWFnLmM6MzI6XHRyZXR1cm4gKHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqKWNiLVx1MDAzZWN0eDtcbm5ldC9zbWMvc21jX2RpYWcuYy0zMy19XG5uZXQvc21jL3NtY19kaWFnLmMtMzQtXG5uZXQvc21jL3NtY19kaWFnLmM6MzU6c3RhdGljIHZvaWQgc21jX2RpYWdfbXNnX2NvbW1vbl9maWxsKHN0cnVjdCBzbWNfZGlhZ19tc2cgKnIsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9zbWMvc21jX2RpYWcuYy0zNi17XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTM5LVx0bWVtc2V0KHIsIDAsIHNpemVvZigqcikpO1xubmV0L3NtYy9zbWNfZGlhZy5jOjQwOlx0ci1cdTAwM2VkaWFnX2ZhbWlseSA9IHNrLVx1MDAzZXNrX2ZhbWlseTtcbm5ldC9zbWMvc21jX2RpYWcuYzo0MTpcdHNvY2tfZGlhZ19zYXZlX2Nvb2tpZShzaywgci1cdTAwM2VpZC5pZGlhZ19jb29raWUpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTQyLVx0aWYgKCFzbWMtXHUwMDNlY2xjc29jaylcbm5ldC9zbWMvc21jX2RpYWcuYy00My1cdFx0cmV0dXJuO1xubmV0L3NtYy9zbWNfZGlhZy5jOjQ0Olx0ci1cdTAwM2VpZC5pZGlhZ19zcG9ydCA9IGh0b25zKHNtYy1cdTAwM2VjbGNzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX251bSk7XG5uZXQvc21jL3NtY19kaWFnLmM6NDU6XHRyLVx1MDAzZWlkLmlkaWFnX2Rwb3J0ID0gc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2stXHUwMDNlc2tfZHBvcnQ7XG5uZXQvc21jL3NtY19kaWFnLmM6NDY6XHRyLVx1MDAzZWlkLmlkaWFnX2lmID0gc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmO1xubmV0L3NtYy9zbWNfZGlhZy5jLTQ3LVx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IFNNQ1BST1RPX1NNQykge1xubmV0L3NtYy9zbWNfZGlhZy5jOjQ4Olx0XHRyLVx1MDAzZWlkLmlkaWFnX3NyY1swXSA9IHNtYy1cdTAwM2VjbGNzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3Jjdl9zYWRkcjtcbm5ldC9zbWMvc21jX2RpYWcuYzo0OTpcdFx0ci1cdTAwM2VpZC5pZGlhZ19kc3RbMF0gPSBzbWMtXHUwMDNlY2xjc29jay1cdTAwM2Vzay1cdTAwM2Vza19kYWRkcjtcbm5ldC9zbWMvc21jX2RpYWcuYy01MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9zbWMvc21jX2RpYWcuYy01MS1cdH0gZWxzZSBpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gU01DUFJPVE9fU01DNikge1xubmV0L3NtYy9zbWNfZGlhZy5jOjUyOlx0XHRtZW1jcHkoXHUwMDI2ci1cdTAwM2VpZC5pZGlhZ19zcmMsIFx1MDAyNnNtYy1cdTAwM2VjbGNzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3Y2X3Jjdl9zYWRkcixcbm5ldC9zbWMvc21jX2RpYWcuYy01My1cdFx0ICAgICAgIHNpemVvZihzbWMtXHUwMDNlY2xjc29jay1cdTAwM2Vzay1cdTAwM2Vza192Nl9yY3Zfc2FkZHIpKTtcbm5ldC9zbWMvc21jX2RpYWcuYzo1NDpcdFx0bWVtY3B5KFx1MDAyNnItXHUwMDNlaWQuaWRpYWdfZHN0LCBcdTAwMjZzbWMtXHUwMDNlY2xjc29jay1cdTAwM2Vzay1cdTAwM2Vza192Nl9kYWRkcixcbm5ldC9zbWMvc21jX2RpYWcuYy01NS1cdFx0ICAgICAgIHNpemVvZihzbWMtXHUwMDNlY2xjc29jay1cdTAwM2Vzay1cdTAwM2Vza192Nl9kYWRkcikpO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy01OS1cbm5ldC9zbWMvc21jX2RpYWcuYzo2MDpzdGF0aWMgaW50IHNtY19kaWFnX21zZ19hdHRyc19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zbWMvc21jX2RpYWcuYzo2MTpcdFx0XHRcdCAgIHN0cnVjdCBzbWNfZGlhZ19tc2cgKnIsXG5uZXQvc21jL3NtY19kaWFnLmMtNjItXHRcdFx0XHQgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTY2LVxubmV0L3NtYy9zbWNfZGlhZy5jOjY3Olx0ci1cdTAwM2VkaWFnX3VpZCA9IGZyb21fa3VpZF9tdW5nZWQodXNlcl9ucywgc2tfdWlkKHNrKSk7XG5uZXQvc21jL3NtY19kaWFnLmM6Njg6XHRyLVx1MDAzZWRpYWdfaW5vZGUgPSBzb2NrX2lfaW5vKHNrKTtcbm5ldC9zbWMvc21jX2RpYWcuYy02OS1cdHJldHVybiAwO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy03MS1cbm5ldC9zbWMvc21jX2RpYWcuYzo3MjpzdGF0aWMgaW50IF9fc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc21jL3NtY19kaWFnLmMtNzMtXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxubmV0L3NtYy9zbWNfZGlhZy5jOjc0Olx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzbWNfZGlhZ19yZXEgKnJlcSxcbm5ldC9zbWMvc21jX2RpYWcuYy03NS1cdFx0XHQgICBzdHJ1Y3QgbmxhdHRyICpiYylcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtNzctXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHNtY19zayhzayk7XG5uZXQvc21jL3NtY19kaWFnLmM6Nzg6XHRzdHJ1Y3Qgc21jX2RpYWdfZmFsbGJhY2sgZmFsbGJhY2s7XG5uZXQvc21jL3NtY19kaWFnLmMtNzktXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XG5uZXQvc21jL3NtY19kaWFnLmM6ODA6XHRzdHJ1Y3Qgc21jX2RpYWdfbXNnICpyO1xubmV0L3NtYy9zbWNfZGlhZy5jLTgxLVx0c3RydWN0IG5sbXNnaGRyICpubGg7XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTg4LVx0ciA9IG5sbXNnX2RhdGEobmxoKTtcbm5ldC9zbWMvc21jX2RpYWcuYzo4OTpcdHNtY19kaWFnX21zZ19jb21tb25fZmlsbChyLCBzayk7XG5uZXQvc21jL3NtY19kaWFnLmM6OTA6XHRyLVx1MDAzZWRpYWdfc3RhdGUgPSBzay1cdTAwM2Vza19zdGF0ZTtcbm5ldC9zbWMvc21jX2RpYWcuYy05MS1cdGlmIChzbWMtXHUwMDNldXNlX2ZhbGxiYWNrKVxubmV0L3NtYy9zbWNfZGlhZy5jOjkyOlx0XHRyLVx1MDAzZWRpYWdfbW9kZSA9IFNNQ19ESUFHX01PREVfRkFMTEJBQ0tfVENQO1xubmV0L3NtYy9zbWNfZGlhZy5jLTkzLVx0ZWxzZSBpZiAoc21jX2Nvbm5fbGdyX3ZhbGlkKFx1MDAyNnNtYy1cdTAwM2Vjb25uKSBcdTAwMjZcdTAwMjYgc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZWlzX3NtY2QpXG5uZXQvc21jL3NtY19kaWFnLmM6OTQ6XHRcdHItXHUwMDNlZGlhZ19tb2RlID0gU01DX0RJQUdfTU9ERV9TTUNEO1xubmV0L3NtYy9zbWNfZGlhZy5jLTk1LVx0ZWxzZVxubmV0L3NtYy9zbWNfZGlhZy5jOjk2Olx0XHRyLVx1MDAzZWRpYWdfbW9kZSA9IFNNQ19ESUFHX01PREVfU01DUjtcbm5ldC9zbWMvc21jX2RpYWcuYy05Ny1cdHVzZXJfbnMgPSBza191c2VyX25zKE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5zayk7XG5uZXQvc21jL3NtY19kaWFnLmM6OTg6XHRpZiAoc21jX2RpYWdfbXNnX2F0dHJzX2ZpbGwoc2ssIHNrYiwgciwgdXNlcl9ucykpXG5uZXQvc21jL3NtY19kaWFnLmMtOTktXHRcdGdvdG8gZXJyb3V0O1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0xMDEtXHRmYWxsYmFjay5yZWFzb24gPSBzbWMtXHUwMDNlZmFsbGJhY2tfcnNuO1xubmV0L3NtYy9zbWNfZGlhZy5jOjEwMjpcdGZhbGxiYWNrLnBlZXJfZGlhZ25vc2lzID0gc21jLVx1MDAzZXBlZXJfZGlhZ25vc2lzO1xubmV0L3NtYy9zbWNfZGlhZy5jLTEwMy1cdGlmIChubGFfcHV0KHNrYiwgU01DX0RJQUdfRkFMTEJBQ0ssIHNpemVvZihmYWxsYmFjayksIFx1MDAyNmZhbGxiYWNrKSBcdTAwM2MgMClcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTA1LVxubmV0L3NtYy9zbWNfZGlhZy5jOjEwNjpcdGlmICgocmVxLVx1MDAzZWRpYWdfZXh0IFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgKFNNQ19ESUFHX0NPTk5JTkZPIC0gMSkpKSBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2RpYWcuYy0xMDctXHQgICAgc21jLVx1MDAzZWNvbm4uYWxlcnRfdG9rZW5fbG9jYWwpIHtcbm5ldC9zbWMvc21jX2RpYWcuYy0xMDgtXHRcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFx1MDAyNnNtYy1cdTAwM2Vjb25uO1xubmV0L3NtYy9zbWNfZGlhZy5jOjEwOTpcdFx0c3RydWN0IHNtY19kaWFnX2Nvbm5pbmZvIGNpbmZvID0ge1xubmV0L3NtYy9zbWNfZGlhZy5jLTExMC1cdFx0XHQudG9rZW4gPSBjb25uLVx1MDAzZWFsZXJ0X3Rva2VuX2xvY2FsLFxuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0xNDYtXHRpZiAoc21jX2Nvbm5fbGdyX3ZhbGlkKFx1MDAyNnNtYy1cdTAwM2Vjb25uKSBcdTAwMjZcdTAwMjYgIXNtYy1cdTAwM2Vjb25uLmxnci1cdTAwM2Vpc19zbWNkIFx1MDAyNlx1MDAyNlxubmV0L3NtYy9zbWNfZGlhZy5jOjE0NzpcdCAgICAocmVxLVx1MDAzZWRpYWdfZXh0IFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgKFNNQ19ESUFHX0xHUklORk8gLSAxKSkpIFx1MDAyNlx1MDAyNlxubmV0L3NtYy9zbWNfZGlhZy5jLTE0OC1cdCAgICAhbGlzdF9lbXB0eShcdTAwMjZzbWMtXHUwMDNlY29ubi5sZ3ItXHUwMDNlbGlzdCkpIHtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTUwLVxubmV0L3NtYy9zbWNfZGlhZy5jOjE1MTpcdFx0c3RydWN0IHNtY19kaWFnX2xncmluZm8gbGluZm8gPSB7XG5uZXQvc21jL3NtY19kaWFnLmMtMTUyLVx0XHRcdC5yb2xlID0gc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXJvbGUsXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTE2NS1cdGlmIChzbWNfY29ubl9sZ3JfdmFsaWQoXHUwMDI2c21jLVx1MDAzZWNvbm4pIFx1MDAyNlx1MDAyNiBzbWMtXHUwMDNlY29ubi5sZ3ItXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2RpYWcuYzoxNjY6XHQgICAgKHJlcS1cdTAwM2VkaWFnX2V4dCBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIChTTUNfRElBR19ETUJJTkZPIC0gMSkpKSBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2RpYWcuYy0xNjctXHQgICAgIWxpc3RfZW1wdHkoXHUwMDI2c21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZWxpc3QpIFx1MDAyNlx1MDAyNiBzbWMtXHUwMDNlY29ubi5ybWJfZGVzYykge1xubmV0L3NtYy9zbWNfZGlhZy5jLTE2OC1cdFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXHUwMDI2c21jLVx1MDAzZWNvbm47XG5uZXQvc21jL3NtY19kaWFnLmM6MTY5Olx0XHRzdHJ1Y3Qgc21jZF9kaWFnX2RtYmluZm8gZGluZm87XG5uZXQvc21jL3NtY19kaWFnLmMtMTcwLVx0XHRzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QgPSBjb25uLVx1MDAzZWxnci1cdTAwM2VzbWNkO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0xOTUtXG5uZXQvc21jL3NtY19kaWFnLmM6MTk2OnN0YXRpYyBpbnQgc21jX2RpYWdfZHVtcF9wcm90byhzdHJ1Y3QgcHJvdG8gKnByb3QsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc21jL3NtY19kaWFnLmMtMTk3LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCBwX3R5cGUpXG5uZXQvc21jL3NtY19kaWFnLmMtMTk4LXtcbm5ldC9zbWMvc21jX2RpYWcuYzoxOTk6XHRzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKmNiX2N0eCA9IHNtY19kdW1wX2NvbnRleHQoY2IpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTIwMC1cdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTIxNi1cdFx0XHRnb3RvIG5leHQ7XG5uZXQvc21jL3NtY19kaWFnLmM6MjE3Olx0XHRyYyA9IF9fc21jX2RpYWdfZHVtcChzaywgc2tiLCBjYiwgbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpLCBiYyk7XG5uZXQvc21jL3NtY19kaWFnLmMtMjE4LVx0XHRpZiAocmMgXHUwMDNjIDApXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTIyOS1cbm5ldC9zbWMvc21jX2RpYWcuYzoyMzA6c3RhdGljIGludCBzbWNfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzEte1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yMzMtXG5uZXQvc21jL3NtY19kaWFnLmM6MjM0Olx0cmMgPSBzbWNfZGlhZ19kdW1wX3Byb3RvKFx1MDAyNnNtY19wcm90bywgc2tiLCBjYiwgU01DUFJPVE9fU01DKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzUtXHRpZiAoIXJjKVxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNjpcdFx0c21jX2RpYWdfZHVtcF9wcm90byhcdTAwMjZzbWNfcHJvdG82LCBza2IsIGNiLCBTTUNQUk9UT19TTUM2KTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzctXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjM5LVxubmV0L3NtYy9zbWNfZGlhZy5jOjI0MDpzdGF0aWMgaW50IHNtY19kaWFnX2hhbmRsZXJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKmgpXG5uZXQvc21jL3NtY19kaWFnLmMtMjQxLXtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjQ3LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xubmV0L3NtYy9zbWNfZGlhZy5jOjI0ODpcdFx0XHRcdC5kdW1wID0gc21jX2RpYWdfZHVtcCxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNDktXHRcdFx0XHQubWluX2R1bXBfYWxsb2MgPSBTS0JfV0lUSF9PVkVSSEVBRCgzMjc2OCksXG5uZXQvc21jL3NtY19kaWFnLmMtMjUwLVx0XHRcdH07XG5uZXQvc21jL3NtY19kaWFnLmM6MjUxOlx0XHRcdHJldHVybiBuZXRsaW5rX2R1bXBfc3RhcnQobmV0LVx1MDAzZWRpYWdfbmxzaywgc2tiLCBoLCBcdTAwMjZjKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNTItXHRcdH1cbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjU2LVxubmV0L3NtYy9zbWNfZGlhZy5jOjI1NzpzdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19oYW5kbGVyIHNtY19kaWFnX2hhbmRsZXIgPSB7XG5uZXQvc21jL3NtY19kaWFnLmMtMjU4LVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5uZXQvc21jL3NtY19kaWFnLmMtMjU5LVx0LmZhbWlseSA9IEFGX1NNQyxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjA6XHQuZHVtcCA9IHNtY19kaWFnX2hhbmRsZXJfZHVtcCxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjEtfTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjItXG5uZXQvc21jL3NtY19kaWFnLmM6MjYzOnN0YXRpYyBpbnQgX19pbml0IHNtY19kaWFnX2luaXQodm9pZClcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjQte1xubmV0L3NtYy9zbWNfZGlhZy5jOjI2NTpcdHJldHVybiBzb2NrX2RpYWdfcmVnaXN0ZXIoXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XG5uZXQvc21jL3NtY19kaWFnLmMtMjY2LX1cbm5ldC9zbWMvc21jX2RpYWcuYy0yNjctXG5uZXQvc21jL3NtY19kaWFnLmM6MjY4OnN0YXRpYyB2b2lkIF9fZXhpdCBzbWNfZGlhZ19leGl0KHZvaWQpXG5uZXQvc21jL3NtY19kaWFnLmMtMjY5LXtcbm5ldC9zbWMvc21jX2RpYWcuYzoyNzA6XHRzb2NrX2RpYWdfdW5yZWdpc3RlcihcdTAwMjZzbWNfZGlhZ19oYW5kbGVyKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNzEtfVxubmV0L3NtYy9zbWNfZGlhZy5jLTI3Mi1cbm5ldC9zbWMvc21jX2RpYWcuYzoyNzM6bW9kdWxlX2luaXQoc21jX2RpYWdfaW5pdCk7XG5uZXQvc21jL3NtY19kaWFnLmM6Mjc0Om1vZHVsZV9leGl0KHNtY19kaWFnX2V4aXQpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTI3NS1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuLS1cbm5ldC9zbWMvc21jX2liLmM9NDU4PWludCBzbWNfaWJfY3JlYXRlX3Byb3RlY3Rpb25fZG9tYWluKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX2liLmMtNDY4LVxubmV0L3NtYy9zbWNfaWIuYzo0Njk6c3RhdGljIGJvb2wgc21jcl9kaWFnX2lzX2Rldl9jcml0aWNhbChzdHJ1Y3Qgc21jX2xncl9saXN0ICpzbWNfbGdyLFxubmV0L3NtYy9zbWNfaWIuYy00NzAtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpXG4tLVxubmV0L3NtYy9zbWNfaWIuYz01NTI9c3RhdGljIGludCBzbWNfbmxfaGFuZGxlX3NtY3JfZGV2KHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldixcbi0tXG5uZXQvc21jL3NtY19pYi5jLTU3MS1cdFx0Z290byBlcnJvdXQ7XG5uZXQvc21jL3NtY19pYi5jOjU3MjpcdGlzX2NyaXQgPSBzbWNyX2RpYWdfaXNfZGV2X2NyaXRpY2FsKFx1MDAyNnNtY19sZ3JfbGlzdCwgc21jaWJkZXYpO1xubmV0L3NtYy9zbWNfaWIuYy01NzMtXHRpZiAobmxhX3B1dF91OChza2IsIFNNQ19OTEFfREVWX0lTX0NSSVQsIGlzX2NyaXQpKVxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz0xMjM9c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9zbWMvc21jX2luZXQuYy0xMjQte1xubmV0L3NtYy9zbWNfaW5ldC5jOjEyNTpcdC8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLVx1MDAzZWNsY3NvY2tcbm5ldC9zbWMvc21jX2luZXQuYy0xMjYtXHQgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzg3CgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiwgbGlrZWx5IGEgVXNlLUFmdGVyLUZyZWUgb3IgYSBOVUxMIGRlcmVmZXJlbmNlLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgYHNtY19kaWFnYCBjb2RlIGl0ZXJhdGluZyB0aHJvdWdoIGhhc2hlZCBTTUMgc29ja2V0cyBhbmQgYWNjZXNzaW5nIHRoZSBgc21jLSZndDtjb25uLmxncmAgb3IgYGxua2AgcG9pbnRlcnMgd2hpbGUgYHNtY19jb25uX2ZyZWUoKWAgaXMgcG90ZW50aWFsbHkgdGVhcmluZyB0aGVtIGRvd24gY29uY3VycmVudGx5LiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4gY29uY3VycmVudCBzeXN0ZW1zLCBhbmQgaXQmIzM5O3MgZ29vZCB0aGV5IGFyZSBhZGRyZXNzaW5nIHRoaXMuIFRoZSBzb2x1dGlvbiBvZiB1bmhhc2hpbmcgdGhlIHNvY2tldCAqYmVmb3JlKiBmcmVlaW5nIHRob3NlIGNydWNpYWwgcmVmZXJlbmNlcyBpbiBgc21jX2Nvbm5fZnJlZSgpYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBwcmV2ZW50IHRoZSBhY2Nlc3MgdG8gc3RhbGUgbWVtb3J5LiBJbnRyb2R1Y2luZyB0aGUgYGNvbm4tJmd0O3VuaGFzaGVkYCBmbGFnIGFuZCB1c2luZyBpdCB0byBwcmV2ZW50IGRvdWJsZS11bmhhc2hpbmcgKG9yIGVuc3VyaW5nIGl0IGhhcHBlbnMgb25seSBvbmNlKSBpcyBhIGNsZWFuIHdheSB0byBtYW5hZ2UgdGhlIHN0YXRlIGNoYW5nZS4gSSB3b3VsZCBleHBlY3QgdGhpcyB0byByZXNvbHZlIHRoZSBvcmlnaW5hbCBpc3N1ZS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7RGlkIHRoaXMgZml4IGludHJvZHVjZSBhbnkgbmV3IGlzc3Vlcz8mIzM0Oy4gU3BlY2lmaWNhbGx5LCBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG5vdz8gSSYjMzk7bSBzZWVpbmcgYSBuZXcgZmllbGQsIGB1OCB1bmhhc2hlZDtgLCBhZGRlZCB0byB0aGUgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuIEhvd2V2ZXIsIHRoZSBtZW1vcnkgZm9yIGBzdHJ1Y3Qgc21jX3NvY2tgIGlzIGFsbG9jYXRlZCB2aWEgYHNrX2FsbG9jYCB3aGljaCB1c2VzIGBrbWVtX2NhY2hlX3phbGxvY2Agb3IgYGt6YWxsb2NgLCBtZWFuaW5nIGl0JiMzOTtzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC4gRnVydGhlciwgYHNtY19jb25uX2NyZWF0ZWAgZXhwbGljaXRseSBpbml0aWFsaXplcyBgY29ubi0mZ3Q7dW5oYXNoZWQgPSAwO2AuIFRoZSB1c2Ugb2YgYHNtY19jb25uX3VuaGFzaGAgY2hlY2tzIHRoaXMgZmxhZyBiZWZvcmUgb3BlcmF0aW5nLiBUaGVyZSBhcmVuJiMzOTt0IGFueSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLCBvciBldmVuIHVzZWQgaW4gYW55IGJyYW5jaGluZyBsb2dpYy4gQW5kIEkgc2VlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0cyBjb3BpZWQgdG8gdXNlcnNwYWNlIChubyBuZXcgcGFkZGluZywgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYmVpbmcgc2VudCBvdmVyIG5ldGxpbmsgb3IgaW9jdGwpLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBidWZmZXIgbGVuZ3RocyBvciBib3VuZCBjaGVja3MsIGVpdGhlci4gVGhlIHBhdGNoIHNlZW1zIHZlcnkgd2VsbC1jb250YWluZWQgYW5kIGNhcmVmdWwuCgpXaXRoIHRoaXMgaW4gbWluZCwgbGV0JiMzOTtzIGNvbnNpZGVyIEtBU0FOIHZzLiBLTVNBTi4gVGhlIG9yaWdpbmFsIGJ1ZyB3YXMgYSBjbGFzc2ljIFVBRi9yYWNlLCB3aGljaCBLQVNBTiB3b3VsZCBiZSBncmVhdCBhdCBjYXRjaGluZy4gVGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgc2hvdWxkIGJlIGVudGlyZWx5IHN1ZmZpY2llbnQgZm9yIHZlcmlmeWluZyB0aGlzIGZpeCBhbmQgZW5zdXJpbmcgdGhlcmUgYXJlIG5vIG5ldyB2dWxuZXJhYmlsaXRpZXMuCgpTbywgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIHByb3ZpZGUgY2xlYXIgcmVhc29uaW5nIGFib3V0IHRoZSBVQUYgbmF0dXJlIG9mIHRoZSBvcmlnaW5hbCBwcm9ibGVtIGFuZCB0aGUgbGFjayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHNvY2tldCB0ZWFyZG93biAoc21jX2Nvbm5fZnJlZSkgYW5kIHNvY2tldCBkaWFnbm9zdGljcyAoc21jX2RpYWcpIGJ5IHVuaGFzaGluZyB0aGUgc29ja2V0IGVhcmxpZXIgYW5kIHRyYWNraW5nIHRoZSB1bmhhc2ggc3RhdGUgdmlhIGEgbmV3IGB1bmhhc2hlZGAgZmxhZyBpbiBgc3RydWN0IHNtY19jb25uZWN0aW9uYC5cblxuMS4gVGhlIG5ldyBgdW5oYXNoZWRgIGZpZWxkIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgc21jX3NvY2tgIHZpYSBgc2tfYWxsb2MoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkpIGFuZCBpcyBleHBsaWNpdGx5IHJlc2V0IHRvIDAgaW4gYHNtY19jb25uX2NyZWF0ZSgpYC5cbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXG4zLiBObyBrZXJuZWwtdG8tdXNlciBjb3B5IHN0cnVjdHVyZXMgKHN1Y2ggYXMgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgc3RydWN0dXJlcykgaGF2ZSBoYWQgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyBpbnRyb2R1Y2VkLlxuNC4gVGhlIHJhY2UgY29uZGl0aW9uIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBzb2NrZXQgdGVhcmRvd24gKHNtY19jb25uX2ZyZWUpIGFuZCBzb2NrZXQgZGlhZ25vc3RpY3MgKHNtY19kaWFnKSBieSB1bmhhc2hpbmcgdGhlIHNvY2tldCBlYXJsaWVyIGFuZCB0cmFja2luZyB0aGUgdW5oYXNoIHN0YXRlIHZpYSBhIG5ldyBgdW5oYXNoZWRgIGZsYWcgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuXG5cbjEuIFRoZSBuZXcgYHVuaGFzaGVkYCBmaWVsZCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IHNtY19zb2NrYCB2aWEgYHNrX2FsbG9jKClgICh3aGljaCB6ZXJvZXMgbWVtb3J5KSBhbmQgaXMgZXhwbGljaXRseSByZXNldCB0byAwIGluIGBzbWNfY29ubl9jcmVhdGUoKWAuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxuMy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBzdHJ1Y3R1cmVzIChzdWNoIGFzIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGlvY3RsIHN0cnVjdHVyZXMpIGhhdmUgaGFkIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgaW50cm9kdWNlZC5cbjQuIFRoZSByYWNlIGNvbmRpdGlvbiBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOL0xPQ0tERVAsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6MjQuMTUwNzA0MjI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2NTE5NTQzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX3VuaGFzaFwiLFxuICAgIFwic21jX2Nvbm5fZnJlZVwiLFxuICAgIFwiX19zbWNfcmVsZWFzZVwiLFxuICAgIFwic21jX2Nvbm5fY3JlYXRlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCIsXG4gICAgXCJzbWNfcmVsZWFzZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBzb2NrZXQgdGVhcmRvd24gKHNtY19jb25uX2ZyZWUpIGFuZCBzb2NrZXQgZGlhZ25vc3RpY3MgKHNtY19kaWFnKSBieSB1bmhhc2hpbmcgdGhlIHNvY2tldCBlYXJsaWVyIGFuZCB0cmFja2luZyB0aGUgdW5oYXNoIHN0YXRlIHZpYSBhIG5ldyBgdW5oYXNoZWRgIGZsYWcgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuXFxuXFxuMS4gVGhlIG5ldyBgdW5oYXNoZWRgIGZpZWxkIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgc21jX3NvY2tgIHZpYSBgc2tfYWxsb2MoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkpIGFuZCBpcyBleHBsaWNpdGx5IHJlc2V0IHRvIDAgaW4gYHNtY19jb25uX2NyZWF0ZSgpYC5cXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxcbjMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgc3RydWN0dXJlcyAoc3VjaCBhcyBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBzdHJ1Y3R1cmVzKSBoYXZlIGhhZCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGludHJvZHVjZWQuXFxuNC4gVGhlIHJhY2UgY29uZGl0aW9uIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUCwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHNvY2tldCBoYXNoIG1hbmFnZW1lbnQgYW5kIGxpbmsgZ3JvdXAgZGVzdHJ1Y3Rpb24gbGlmZWN5Y2xlIGluIHRoZSBTTUMgcHJvdG9jb2wgZmFtaWx5LiBJdCBpbnRyb2R1Y2VzIHNtY19jb25uX3VuaGFzaCgpIHdpdGggYSBuZXcgY29ubi1cXHUwMDNldW5oYXNoZWQgZmxhZyB0byBlbnN1cmUgbm9uLWZhbGxiYWNrIFNNQyBzb2NrZXRzIGFyZSB1bmhhc2hlZCBleGFjdGx5IG9uY2UgYmVmb3JlIGxpbmsgZ3JvdXAvbGluayByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyB3aXRoIHNvY2tldCBkaWFnbm9zdGljIGR1bXBzLiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGFuZCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgY29kZSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIHNvY2tldCBhbmQgc29ja19kaWFnIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjI0LjE1MDcwODIxNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0Mzc4MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjg2NjliZjJiMDRmYjA5NzAxZmY1ZTRmYmUwYWZjZGMwNjAyMDIzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDEwOjE4OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvYWZfc21jLmMgYi9uZXQvc21jL2FmX3NtYy5jXFxuaW5kZXggZTlmOTNiM2FiNDM1Yi4uOGM3ODFhNGE0NDg1YiAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXFxuKysrIGIvbmV0L3NtYy9hZl9zbWMuY1xcbkBAIC0zMTAsNyArMzEwLDE1IEBAIHN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4gXFx0XFx0c21jX3Jlc3RvcmVfZmFsbGJhY2tfY2hhbmdlcyhzbWMpO1xcbiBcXHR9XFxuIFxcbi1cXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKHNrKTtcXG4rXFx0LyogRmFsbGJhY2sgc29ja2V0cyBuZXZlciBjYWxsIHNtY19jb25uX2ZyZWUoKSwgc28gdW5oYXNoIGRpcmVjdGx5LlxcbitcXHQgKiBOb24tZmFsbGJhY2sgc29ja2V0cyB1c2Ugc21jX2Nvbm5fdW5oYXNoKCkgc28gdGhhdCB0aGUgY29ubi1cXHUwMDNldW5oYXNoZWRcXG4rXFx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXFxuK1xcdCAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKVxcbitcXHRcXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKHNrKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzbWNfY29ubl91bmhhc2goXFx1MDAyNnNtYy1cXHUwMDNlY29ubik7XFxuIFxcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQpIHtcXG4gXFx0XFx0aWYgKHNtYy1cXHUwMDNlY2xjc29jaykge1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaFxcbmluZGV4IDQyN2I2ZDYzYjk5MzEuLjA3NTMxMjI3ODgzNWMgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWMuaFxcbisrKyBiL25ldC9zbWMvc21jLmhcXG5AQCAtMjc5LDYgKzI3OSw3IEBAIHN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XFxuIFxcdHU2NFxcdFxcdFxcdHBlZXJfdG9rZW47XFx0LyogU01DLUQgdG9rZW4gb2YgcGVlciAqL1xcbiBcXHR1OFxcdFxcdFxcdGtpbGxlZDtcXHRcXHQvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xcbiBcXHR1OFxcdFxcdFxcdGZyZWVkO1xcdFxcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xcbitcXHR1OFxcdFxcdFxcdHVuaGFzaGVkO1xcdC8qIHJlbW92ZWQgZnJvbSBzb2NrIGhhc2ggKi9cXG4gXFx0dThcXHRcXHRcXHRvdXRfb2Zfc3luYztcXHQvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi9cXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuY1xcbmluZGV4IDA0YWVkZDk1NzU0M2EuLmUzMDIyMjFjMzVlM2YgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXFxuKysrIGIvbmV0L3NtYy9zbWNfY29yZS5jXFxuQEAgLTEyNTEsNiArMTI1MSwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0fVxcbiB9XFxuIFxcbisvKiB1bmhhc2ggdGhlIHNvY2tldCBvbmNlOyBvd25zIHRoZSBzaW5nbGUgdW5oYXNoIGZvciBhbGwgbm9uLWZhbGxiYWNrIHBhdGhzLlxcbisgKiBFdmVyeSBjYWxsZXIgaG9sZHMgbG9ja19zb2NrIGZvciB0aGlzIHNvY2tldCwgc28gY29ubi1cXHUwMDNldW5oYXNoZWQgaXMgcHJvdGVjdGVkXFxuKyAqIGJ5IHRoYXQgbG9jayBhbmQgbm8gc2VwYXJhdGUgc3luY2hyb25pc2F0aW9uIGlzIG5lZWRlZC5cXG4rICovXFxuK3ZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4re1xcbitcXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xcbitcXG4rXFx0aWYgKCFjb25uLVxcdTAwM2V1bmhhc2hlZCkge1xcbitcXHRcXHRjb25uLVxcdTAwM2V1bmhhc2hlZCA9IDE7XFxuK1xcdFxcdHNtYy1cXHUwMDNlc2suc2tfcHJvdC1cXHUwMDNldW5oYXNoKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG4gdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4ge1xcbkBAIC0xMjYzLDYgKzEyNzcsMTEgQEAgdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0Y29ubi1cXHUwMDNlZnJlZWQgPSAxO1xcbitcXHQvKiBVbmhhc2ggYmVmb3JlIGRyb3BwaW5nIGxnci9sbmsgcmVmcyBzbyB0aGUgZGlhZyByZWFkZXIsIHdoaWNoXFxuK1xcdCAqIGl0ZXJhdGVzIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCByZWFkX2xvY2ssIGNhbm5vdCBzZWUgYSBjb25uZWN0aW9uIHdob3NlXFxuK1xcdCAqIGxnciBvciBsbmsgaXMgYmVpbmcgZnJlZWQgY29uY3VycmVudGx5LlxcbitcXHQgKi9cXG4rXFx0c21jX2Nvbm5fdW5oYXNoKGNvbm4pO1xcbiBcXHRpZiAoIXNtY19jb25uX2xncl92YWxpZChjb25uKSlcXG4gXFx0XFx0LyogQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZnJvbVxcbiBcXHRcXHQgKiBsaW5rIGdyb3VwLlxcbkBAIC0yMDUzLDYgKzIwNzIsNyBAQCBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbiBcXHRpZiAoIWNvbm4tXFx1MDAzZWxnci1cXHUwMDNlaXNfc21jZClcXG4gXFx0XFx0c21jcl9saW5rX2hvbGQoY29ubi1cXHUwMDNlbG5rKTsgLyogbGlua19wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXFxuIFxcdGNvbm4tXFx1MDAzZWZyZWVkID0gMDtcXG4rXFx0Y29ubi1cXHUwMDNldW5oYXNoZWQgPSAwO1xcbiBcXHRjb25uLVxcdTAwM2Vsb2NhbF90eF9jdHJsLmNvbW1vbi50eXBlID0gU01DX0NEQ19NU0dfVFlQRTtcXG4gXFx0Y29ubi1cXHUwMDNlbG9jYWxfdHhfY3RybC5sZW4gPSBTTUNfV1JfVFhfU0laRTtcXG4gXFx0Y29ubi1cXHUwMDNldXJnX3N0YXRlID0gU01DX1VSR19SRUFEO1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmggYi9uZXQvc21jL3NtY19jb3JlLmhcXG5pbmRleCA1YzE4ZjA4YTRjOGE1Li5mMjNkNjBhZWYwYjc5IDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuaFxcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuaFxcbkBAIC01OTUsNiArNTk1LDcgQEAgdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbiB2b2lkIHNtY19ybWJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XFxuIGludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcXG4gXFxuK3ZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XFxuIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbiBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcXG4gaW50IHNtY19jb3JlX2luaXQodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjI0LjcyNTgxNDY3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTQyMDk0MDE3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX3VuaGFzaFwiLFxuICAgIFwic21jX2Nvbm5fZnJlZVwiLFxuICAgIFwiX19zbWNfcmVsZWFzZVwiLFxuICAgIFwic21jX2Nvbm5fY3JlYXRlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCIsXG4gICAgXCJzbWNfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaGFzaCBtYW5hZ2VtZW50IGFuZCBsaW5rIGdyb3VwIGRlc3RydWN0aW9uIGxpZmVjeWNsZSBpbiB0aGUgU01DIHByb3RvY29sIGZhbWlseS4gSXQgaW50cm9kdWNlcyBzbWNfY29ubl91bmhhc2goKSB3aXRoIGEgbmV3IGNvbm4tXFx1MDAzZXVuaGFzaGVkIGZsYWcgdG8gZW5zdXJlIG5vbi1mYWxsYmFjayBTTUMgc29ja2V0cyBhcmUgdW5oYXNoZWQgZXhhY3RseSBvbmNlIGJlZm9yZSBsaW5rIGdyb3VwL2xpbmsgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBzb2NrZXQgZGlhZ25vc3RpYyBkdW1wcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBuZXR3b3JraW5nIHNvY2tldCBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNvZGUgYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBzb2NrZXQgYW5kIHNvY2tfZGlhZyBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4NjY5YmYyYjA0ZmIwOTcwMWZmNWU0ZmJlMGFmY2RjMDYwMjAyM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEwOjE4OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9hZl9zbWMuYyBiL25ldC9zbWMvYWZfc21jLmNcbmluZGV4IGU5ZjkzYjNhYjQzNWIuLjhjNzgxYTRhNDQ4NWIgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXG4rKysgYi9uZXQvc21jL2FmX3NtYy5jXG5AQCAtMzEwLDcgKzMxMCwxNSBAQCBzdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4gXHRcdHNtY19yZXN0b3JlX2ZhbGxiYWNrX2NoYW5nZXMoc21jKTtcbiBcdH1cbiBcbi1cdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKTtcbitcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cbitcdCAqIE5vbi1mYWxsYmFjayBzb2NrZXRzIHVzZSBzbWNfY29ubl91bmhhc2goKSBzbyB0aGF0IHRoZSBjb25uLVx1MDAzZXVuaGFzaGVkXG4rXHQgKiBmbGFnIGtlZXBzIHRoZSB1bmhhc2ggZXhhY3RseSBvbmNlIGV2ZW4gd2hlbiBzbWNfY29ubl9mcmVlKCkgYWxyZWFkeSByYW5cbitcdCAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLlxuK1x0ICovXG4rXHRpZiAoc21jLVx1MDAzZXVzZV9mYWxsYmFjaylcbitcdFx0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spO1xuK1x0ZWxzZVxuK1x0XHRzbWNfY29ubl91bmhhc2goXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xuIFxuIFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQpIHtcbiBcdFx0aWYgKHNtYy1cdTAwM2VjbGNzb2NrKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWMuaCBiL25ldC9zbWMvc21jLmhcbmluZGV4IDQyN2I2ZDYzYjk5MzEuLjA3NTMxMjI3ODgzNWMgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtYy5oXG4rKysgYi9uZXQvc21jL3NtYy5oXG5AQCAtMjc5LDYgKzI3OSw3IEBAIHN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XG4gXHR1NjRcdFx0XHRwZWVyX3Rva2VuO1x0LyogU01DLUQgdG9rZW4gb2YgcGVlciAqL1xuIFx0dThcdFx0XHRraWxsZWQ7XHRcdC8qIGFibm9ybWFsIHRlcm1pbmF0aW9uICovXG4gXHR1OFx0XHRcdGZyZWVkO1x0XHQvKiBub3JtYWwgdGVybWluYXRpb24gKi9cbitcdHU4XHRcdFx0dW5oYXNoZWQ7XHQvKiByZW1vdmVkIGZyb20gc29jayBoYXNoICovXG4gXHR1OFx0XHRcdG91dF9vZl9zeW5jO1x0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IDA0YWVkZDk1NzU0M2EuLmUzMDIyMjFjMzVlM2YgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTEyNTEsNiArMTI1MSwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbiBcdH1cbiB9XG4gXG4rLyogdW5oYXNoIHRoZSBzb2NrZXQgb25jZTsgb3ducyB0aGUgc2luZ2xlIHVuaGFzaCBmb3IgYWxsIG5vbi1mYWxsYmFjayBwYXRocy5cbisgKiBFdmVyeSBjYWxsZXIgaG9sZHMgbG9ja19zb2NrIGZvciB0aGlzIHNvY2tldCwgc28gY29ubi1cdTAwM2V1bmhhc2hlZCBpcyBwcm90ZWN0ZWRcbisgKiBieSB0aGF0IGxvY2sgYW5kIG5vIHNlcGFyYXRlIHN5bmNocm9uaXNhdGlvbiBpcyBuZWVkZWQuXG4rICovXG4rdm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuK3tcbitcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XG4rXG4rXHRpZiAoIWNvbm4tXHUwMDNldW5oYXNoZWQpIHtcbitcdFx0Y29ubi1cdTAwM2V1bmhhc2hlZCA9IDE7XG4rXHRcdHNtYy1cdTAwM2Vzay5za19wcm90LVx1MDAzZXVuaGFzaChcdTAwMjZzbWMtXHUwMDNlc2spO1xuK1x0fVxuK31cbitcbiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuIHtcbkBAIC0xMjYzLDYgKzEyNzcsMTEgQEAgdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y29ubi1cdTAwM2VmcmVlZCA9IDE7XG4rXHQvKiBVbmhhc2ggYmVmb3JlIGRyb3BwaW5nIGxnci9sbmsgcmVmcyBzbyB0aGUgZGlhZyByZWFkZXIsIHdoaWNoXG4rXHQgKiBpdGVyYXRlcyB1bmRlciB0aGUgc29ja2V0IGhhc2ggcmVhZF9sb2NrLCBjYW5ub3Qgc2VlIGEgY29ubmVjdGlvbiB3aG9zZVxuK1x0ICogbGdyIG9yIGxuayBpcyBiZWluZyBmcmVlZCBjb25jdXJyZW50bHkuXG4rXHQgKi9cbitcdHNtY19jb25uX3VuaGFzaChjb25uKTtcbiBcdGlmICghc21jX2Nvbm5fbGdyX3ZhbGlkKGNvbm4pKVxuIFx0XHQvKiBDb25uZWN0aW9uIGhhcyBhbHJlYWR5IHVucmVnaXN0ZXJlZCBmcm9tXG4gXHRcdCAqIGxpbmsgZ3JvdXAuXG5AQCAtMjA1Myw2ICsyMDcyLDcgQEAgaW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbiBcdGlmICghY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZClcbiBcdFx0c21jcl9saW5rX2hvbGQoY29ubi1cdTAwM2VsbmspOyAvKiBsaW5rX3B1dCBpbiBzbWNfY29ubl9mcmVlKCkgKi9cbiBcdGNvbm4tXHUwMDNlZnJlZWQgPSAwO1xuK1x0Y29ubi1cdTAwM2V1bmhhc2hlZCA9IDA7XG4gXHRjb25uLVx1MDAzZWxvY2FsX3R4X2N0cmwuY29tbW9uLnR5cGUgPSBTTUNfQ0RDX01TR19UWVBFO1xuIFx0Y29ubi1cdTAwM2Vsb2NhbF90eF9jdHJsLmxlbiA9IFNNQ19XUl9UWF9TSVpFO1xuIFx0Y29ubi1cdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX1JFQUQ7XG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5oIGIvbmV0L3NtYy9zbWNfY29yZS5oXG5pbmRleCA1YzE4ZjA4YTRjOGE1Li5mMjNkNjBhZWYwYjc5IDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5oXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmhcbkBAIC01OTUsNiArNTk1LDcgQEAgdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgc21jX3JtYl9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiBpbnQgc21jX3ZsYW5fYnlfdGNwc2soc3RydWN0IHNvY2tldCAqY2xjc29jaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XG4gXG4rdm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbiBpbnQgc21jX2NvcmVfaW5pdCh2b2lkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjI0LjcyNTgxNjI2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NTI3OTc0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTUMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0J3MgZnV6ei13b3J0aHkuIEl0J3MgdG91Y2hpbmcgdGhlIFNNQyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgYGFmX3NtYy5jYCwgYHNtYy5oYCwgYW5kIGBzbWNfY29yZS5jYCBmaWxlcy4gVGhhdCdzIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMsIEFGX1NNQyBzb2NrZXQgZmFtaWx5LiBHb29kLCBJJ20gZmFtaWxpYXIgd2l0aCB0aGF0LiBOb3csIHdoYXQncyBjaGFuZ2VkP1xuXG5Fc3NlbnRpYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgY29uZGl0aW9uYWwgYHVuaGFzaGAgYmFzZWQgb24gYHNtYy1cdTAwM2V1c2VfZmFsbGJhY2tgIGluIGBfX3NtY19yZWxlYXNlYC4gSWYgd2UncmUgdXNpbmcgZmFsbGJhY2sgbW9kZSwgaXQgZ29lcyB0aHJvdWdoIHRoZSB1c3VhbCBgc2tfcHJvdC1cdTAwM2V1bmhhc2hgLCBvdGhlcndpc2UgaXQgY2FsbHMgYHNtY19jb25uX3VuaGFzaGAuICBUaGV5J3ZlIGFsc28gYWRkZWQgYSBgdW5oYXNoZWRgIGZsYWcgdG8gdGhlIGBzbWNfY29ubmVjdGlvbmAgc3RydWN0LCBhbmQgYSBuZXcgYHNtY19jb25uX3VuaGFzaGAgZnVuY3Rpb24uICBJdCdzIGluaXRpYWxpemVkIGluIGBzbWNfY29ubl9jcmVhdGVgIGFuZCBjYWxsZWQgZHVyaW5nIGBzbWNfY29ubl9mcmVlYC4gSW50ZXJlc3RpbmcuXG5cbk5vdywgZm9yIGZ1enppbmcsIEkgbmVlZCB0byBrbm93IGhvdyByZWFjaGFibGUgdGhpcyBjb2RlIGlzLiBTTUMgc29ja2V0cyBjYW4gYmUgY3JlYXRlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBzdGFuZGFyZCBgc29ja2V0KEFGX1NNQywgLi4uKWAgY2FsbHMsIG9yIHZpYSB0aGUgYEFGX0lORVRgL2BBRl9JTkVUNmAgcGF0aHdheXMgYXMgd2VsbC4gVGhhdOKAmXMgZ29vZCDigJMgd2UgaGF2ZSBjb250cm9sIGZyb20gdXNlciBzcGFjZS4gIEFuZCwgdGhlcmUncyBldmVuIGxvb3BiYWNrLCBmYWxsYmFjaywgb3IgZW11bGF0ZWQgU01DIGRldmljZXMgd2hpY2ggd2lkZW5zIHRoZSBhdHRhY2sgc3VyZmFjZSBldmVuIGZ1cnRoZXIgKFNNQy1EIGxvb3BiYWNrLCBJU00sIFNNQy1SIHZpYSBzb2Z0LVJvQ0UsIHJ4ZSwgZXRjLiwgYW5kIGZhbGxiYWNrIFRDUCkuICBTeXprYWxsZXIgaXMgYWxyZWFkeSBmdXp6aW5nIGBBRl9TTUNgLCB3aGljaCBpcyBhIHBvc2l0aXZlIHNpZ24uXG5cbk5leHQsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyB0byBzZWUgd2hhdCBjb25maWdzIGFyZSBpbnZvbHZlZCwgZGVwZW5kZW5jaWVzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpb25zIHRoYXQgY291bGQgaW5jcmVhc2UgdGhlIGF0dGFjayBzdXJmYWNlLCBvciBtYWtlIGZ1enppbmcgdGhpcyBtb3JlIHByb2R1Y3RpdmUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJ4oCZbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3NhcnkgdG8gcmVhY2ggdGhlIGNvZGUgY2hhbmdlIGluIGRpZmZlcmVudCBjb250ZXh0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjMwLjU3ODYxNjY1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAxOTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU01DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODozMC42Mjg2NDE0NThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDE4OTczNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgU01DIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzIGBuZXQvc21jL0tjb25maWdgIGZpbGUuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gU3lzdGVtIE1hbmFnZW1lbnQgQ29udHJvbCAoU01DKSBuZXR3b3JraW5nLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGtub2JzIHRoZSB1c2VyIGhhcyB0byB0dW5lLCBob3cgZGVwZW5kZW5jaWVzIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBkZWZhdWx0cyBhcmUgcHJvdmlkZWQuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGhpZXJhcmNoeSDigJMgaXMgaXQgYSB0b3AtbGV2ZWwgZmVhdHVyZSwgb3IgaXMgaXQgbmVzdGVkIHVuZGVyIHNvbWUgYnJvYWRlciBuZXR3b3JraW5nIG9yIGhhcmR3YXJlIGNvbnRleHQ/IFRoZSBkZXBlbmRlbmNpZXMgYXJlIGdvaW5nIHRvIGJlIGtleTsgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggb3RoZXIgZmVhdHVyZXMgb3IgaGFyZHdhcmUgYXJlIHJlcXVpcmVkIG9yIGluY29tcGF0aWJsZS4gSSdtIGFsc28gc2Nhbm5pbmcgZm9yIGFueSBwb3RlbnRpYWwgd2FybmluZ3Mgb3IgY29tbWVudGFyeSB3aXRoaW4gdGhlIGZpbGUuIEl0J3MgbGlrZWx5IGdvaW5nIHRvIGluY2x1ZGUgb3B0aW9ucyBmb3IgZW5hYmxpbmcgdGhlIFNNQyBwcm90b2NvbCwgcG9zc2libHkgc3BlY2lmeWluZyB2YXJpYW50cyBsaWtlIFNNQy1SIG9yIFNNQy1ELCBhbmQgcGVyaGFwcyBvcHRpb25zIHRvIGNvbmZpZ3VyZSBidWZmZXIgc2l6ZXMsIGNvbm5lY3Rpb24gbGltaXRzLCBhbmQgb3RoZXIgcGVyZm9ybWFuY2UvdHVuaW5nIHBhcmFtZXRlcnMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgc2VsZWN0YCBhbmQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljLiBUaGlzIGlzIG15IGNoYW5jZSB0byBhc3Nlc3MgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGVzaWduLCBhbmQgaG93IGZsZXhpYmxlIHRoZSBjb2RlIGlzLiBJIGFtIGV4cGVjdGluZyBzb21lIHNvbGlkIGRvY3VtZW50YXRpb24sIGFuZCBlcnJvciBoYW5kbGluZy4gSSBob3BlIHRvIGNvbWUgb3V0IHdpdGggYSBzb3VuZCBncmFzcCBvZiB0aGUgb3B0aW9ucyBhbmQgdGhlaXIgcmFtaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjMzLjA0NzYxODA5MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNNQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgRElCU1xcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBTTUMtUiBwcm92aWRlcyBhIFxcXCJzb2NrZXRzIG92ZXIgUkRNQVxcXCIgc29sdXRpb24gbWFraW5nIHVzZSBvZlxcbiAgIDc6XFx0XFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcXG4gICA4OlxcdFxcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cXG4gICA5OlxcdFxcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xcbiAgMTA6XFx0XFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFNNQ19ESUFHXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFNNQ1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xcbiAgMTk6XFx0XFx0ICBzbWNzcy5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBpZiB1bnN1cmUsIHNheSBZLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRjb25maWcgU01DX0hTX0NUUkxfQlBGXFxuICAyNDpcXHRcXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBTTUMgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfU1lTQ0FMTFxcbiAgMjY6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIFNNQ19IU19DVFJMX0JQRiBlbmFibGVzIHN1cHBvcnQgdG8gcmVnaXN0ZXIgZ2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQ1xcbiAgMjk6XFx0XFx0ICBoYW5kc2hha2UgZmxvdywgd2hpY2ggb2ZmZXIgbXVjaCBncmVhdGVyIGZsZXhpYmlsaXR5IGluIG1vZGlmeWluZyB0aGUgYmVoYXZpb3JcXG4gIDMwOlxcdFxcdCAgb2YgdGhlIFNNQyBwcm90b2NvbCBzdGFjayBjb21wYXJlZCB0byBhIGNvbXBsZXRlIGtlcm5lbC1iYXNlZCBhcHByb2FjaC4gU2VsZWN0XFxuICAzMTpcXHRcXHQgIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGZpbHRyaW5nIHRoZSBoYW5kc2hha2UgcHJvY2VzcyB2aWEgZUJQRiBwcm9ncmFtcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6MzMuMDQ3Njk0MjMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3MjI1NDM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBcIkRJQlNcIiAtIENvbmZpZ3VyYXRpb24gb3IgVHlwbz8qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgXCJESUJTXCIgdGhpbmcgaXMgZXZlbiBhIHJlYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGp1c3QgYSBzaW1wbGUgdHlwbyB0aGF0J3Mgc2xpcHBlZCB0aHJvdWdoLiBJJ3ZlIGdvdCBhIHByZXR0eSBnb29kIG5vc2UgZm9yIHRoZXNlIHRoaW5ncywgc28gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyB2YWxpZGl0eS4gTXkgZ3V0IHRlbGxzIG1lIEkgc2hvdWxkICppbW1lZGlhdGVseSogcmVhY2ggZm9yIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGluIHRoaXMgZG9tYWluLiBJIG5lZWQgdG8gY29uZHVjdCBhIHRob3JvdWdoIHNlYXJjaCBmb3IgXCJESUJTXCIgd2l0aGluIHRoZW0uIEhvcGVmdWxseSwgaXQncyBkZWZpbmVkIHNvbWV3aGVyZS4gSWYgaXQgKmlzKiBhIHZhbGlkIG9wdGlvbiwgdGhhdCB0ZWxscyBtZSBhIGxvdCBhYm91dCB0aGUgY29udGV4dCBhbmQgdGhlIHByb2JsZW0gSSdtIGRlYWxpbmcgd2l0aC4gSWYgaXQgKmlzbid0Kiwgd2VsbCwgdGhlbiBJIGtub3cgZXhhY3RseSB3aGVyZSB0byBiZWdpbiBteSB0cm91Ymxlc2hvb3RpbmcgYnkgbG9va2luZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBhcmVhIGZvciBvdGhlciB0aGluZ3MuIFRoYXQgd291bGQgYWxzbyB0ZWxsIG1lIHdoZXJlIHRoZSB0eXBvIGlzIG1vc3QgbGlrZWx5IGxvY2F0ZWQsIHdoaWNoIHdvdWxkIGJlIHF1aXRlIHVzZWZ1bC4gTGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTkyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODozNS41MTk5NTA0ODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMzAzMDk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRElCU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoyOmNvbmZpZyBESUJTXFxuZHJpdmVycy9kaWJzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6MzcuNDUyOTg3MDE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwNDgyMTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLY29uZmlnIERpdmUgZm9yIERJQlMgb3IgU01DIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBESUJTIG9yIFNNQy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbiBsb2dpYyBsaXZlcy4gTGV0J3Mgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBicm9hZGVyIEtjb25maWcgbGFuZHNjYXBlIGZvciBtZW50aW9ucyBvZiBESUJTIG9yIFNNQyBpbiBvdGhlciBicmFuY2hlcyBvciBmaWxlcy4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGF0LCBhIHF1aWNrIGNoZWNrIG9uIGxpbmUgNCBvZiBgbmV0L3NtYy9LY29uZmlnYCBpbiBnaXQgc2VlbXMgbGlrZSBhIHNvbGlkIGluaXRpYWwgbW92ZTsgaXQgY291bGQgcXVpY2tseSBnaXZlIHNvbWUgaW5pdGlhbCBjbHVlcy4gTm93LCBhZnRlciB0aGF0LCBJIHRoaW5rIEknbGwgemVybyBpbiBvbiB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZSBhZ2FpbiBhbmQgY2hlY2sgc3BlY2lmaWNhbGx5IHdoYXQgdGhpcyBtb2R1bGUgZGVwZW5kcyBvbi4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgd2h5IHRoZXkgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiBhIGdpdmVuIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzOTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODozOS41NTc4MTA4NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU01DXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFNNQy1SIHByb3ZpZGVzIGEgXFxcInNvY2tldHMgb3ZlciBSRE1BXFxcIiBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXFxuICAgNzpcXHRcXHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxcbiAgIDg6XFx0XFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxcbiAgIDk6XFx0XFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXFxuICAxMDpcXHRcXHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjM5LjU1Nzg4NzYwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzMwNTY0ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgYG5ldC9zbWMvTWFrZWZpbGVgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgYG5ldC9zbWMvTWFrZWZpbGVgLiBHaXZlbiB0aGlzIGxvY2F0aW9uLCBJIGltbWVkaWF0ZWx5IGV4cGVjdCB0byBmaW5kIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgc3BlY2lmaWMgdG8gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgcHJvdG9jb2wgc3RhY2suIEkgYW50aWNpcGF0ZSBkaXJlY3RpdmVzIGZvciBjb21waWxpbmcgdGhlIFNNQy1zcGVjaWZpYyBzb3VyY2UgZmlsZXMsIGxpbmtpbmcgdGhlbSwgYW5kIHBvdGVudGlhbGx5IGluY29ycG9yYXRpbmcgYW55IG5lY2Vzc2FyeSBsaWJyYXJpZXMgb3IgaGVhZGVyIGZpbGVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGZsYWdzIHJlbGF0ZWQgdG8gY29tcGlsZXIgb3B0aW1pemF0aW9uIGZvciBwZXJmb3JtYW5jZSwgc3BlY2lmaWMgdGFyZ2V0IGFyY2hpdGVjdHVyZXMsIGFuZCB0aGUgaW5jbHVzaW9uIG9mIGFueSBTTUMtcmVsYXRlZCBrZXJuZWwgbW9kdWxlcy4gSSdsbCBhbHNvIGJlIG1lbnRhbGx5IG1hcHBpbmcgdGhpcyBNYWtlZmlsZSBhZ2FpbnN0IHRoZSBvdmVyYWxsIGJ1aWxkIHN5c3RlbSBzdHJ1Y3R1cmU7IEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBob3cgdGhlc2UgU01DIGNvbXBvbmVudHMgYXJlIGludGVncmF0ZWQuIEknbGwgc3RhcnQgYnkgcXVpY2tseSBzY2FubmluZyB0aGUgc3RydWN0dXJlLCBsb29raW5nIGZvciBjb21tb24gcGF0dGVybnMgYW5kIGltcG9ydGFudCB2YXJpYWJsZSBkZWZpbml0aW9ucy4gRnJvbSB0aGVyZSBJJ2xsIGRyaWxsIGRvd24gdG8gdGhlIG1vcmUgaW50cmljYXRlIGRlcGVuZGVuY2llcyBhbmQgcnVsZXMgYXMgbmVlZGVkLiBUaGlzIHVzdWFsbHkgaGVscHMgbWUgdW5kZXJzdGFuZCB3aGF0J3MgY3JpdGljYWwgYW5kIHdoYXQncyBsZXNzIHNvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo0MS44ODg0NTUzOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y2NmbGFncy15ICs9IC1JJChzcmMpXFxuICAgMzpcXHRvYmotJChDT05GSUdfU01DKVxcdCs9IHNtYy5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfU01DX0RJQUcpXFx0Kz0gc21jX2RpYWcub1xcbiAgIDU6XFx0c21jLXkgOj0gYWZfc21jLm8gc21jX3BuZXQubyBzbWNfaWIubyBzbWNfY2xjLm8gc21jX2NvcmUubyBzbWNfd3IubyBzbWNfbGxjLm9cXG4gICA2OlxcdHNtYy15ICs9IHNtY19jZGMubyBzbWNfdHgubyBzbWNfcngubyBzbWNfY2xvc2UubyBzbWNfaXNtLm8gc21jX25ldGxpbmsubyBzbWNfc3RhdHMub1xcbiAgIDc6XFx0c21jLXkgKz0gc21jX3RyYWNlcG9pbnQubyBzbWNfaW5ldC5vXFxuICAgODpcXHRzbWMtJChDT05GSUdfU1lTQ1RMKSArPSBzbWNfc3lzY3RsLm9cXG4gICA5OlxcdHNtYy0kKENPTkZJR19TTUNfSFNfQ1RSTF9CUEYpICs9IHNtY19oc19icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo0MS44ODg1MTMwNzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTczMDg3ODc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgRElCUyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIERJQlMgbW9kdWxlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9kaWJzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gZGVmaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIGxpc3QgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgaGFyZHdhcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBsb2dpYyB0aGVyZSwgdGhpbmdzIGxpa2UgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgdGhhdCB3aWxsIHJldmVhbCB3aGljaCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIG11c3QgYmUgZW5hYmxlZCBmb3IgRElCUyB0byBldmVuIGJlIGNvbnNpZGVyZWQgZm9yIGluY2x1c2lvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYW55IGludGVncmF0aW9uIHdvcmsuIFRoaXMgaXMgd2hlcmUgSSdsbCBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NDMuNjE5Mzk0NDAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0Y29uZmlnIERJQlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlZmF1bHQgblxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgKERJQlMpIGlzIGEgY29tbXVuaWNhdGlvbiBtZXRob2QgdGhhdFxcbiAgIDc6XFx0XFx0ICB1c2VzIGNvbW1vbiBwaHlzaWNhbCAoaW50ZXJuYWwpIG1lbW9yeSBmb3Igc3luY2hyb25vdXMgZGlyZWN0IGFjY2Vzc1xcbiAgIDg6XFx0XFx0ICBpbnRvIGEgcmVtb3RlIGJ1ZmZlci5cXG4gICA5OlxcdFxcbiAgMTA6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gcHJvdmlkZSB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIgYmV0d2VlblxcbiAgMTE6XFx0XFx0ICBkaWJzIGRldmljZXMgYW5kIGRpYnMgY2xpZW50cyBsaWtlIHRoZSBTTUMgcHJvdG9jb2wuXFxuICAxMjpcXHRcXHQgIFRoZSBtb2R1bGUgbmFtZSBpcyBkaWJzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgRElCU19MT1xcbiAgMTU6XFx0XFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBESUJTXFxuICAxNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgRElCU19MTyBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBzb2Z0d2FyZS1lbXVsYXRlZCBkaWJzIGRldmljZVxcbiAgMjA6XFx0XFx0ICBuYW1lZCBsbyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgd2hlbiBjb21tdW5pY2F0aW9uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjQzLjYxOTQ1OTI1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTU5MTM5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIFBhdGNoIGZvciBQb3RlbnRpYWwgSXNzdWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIGFueSBleGlzdGluZyBmdW5jdGlvbmFsaXR5LCBvciBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgb3B0aW9ucy4gVGhlIGBTTUNfRElBR2AgbWVudGlvbiBjYXVnaHQgbXkgZXllLiBUaGUgY29tbWVudCBpbiB0aGUgcGF0Y2ggaXMgcHJldHR5IGV4cGxpY2l0OiBpdCBzZWVtcyBsaWtlIHRoZSB1bmhhc2hpbmcgb2YgY29ubmVjdGlvbnMgYmVmb3JlIHJlbGVhc2luZyByZXNvdXJjZXMgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgZGlhZ25vc3RpYyByZWFkZXIgYW5kIHRoZSBzb2NrZXQgaGFzaCByZWFkIGxvY2suIFRoaXMgc3VnZ2VzdHMgYFNNQ19ESUFHYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZhY3RvciBoZXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgc21jX2Nvbm5fdW5oYXNoYCwgYHNtY19jb25uX2ZyZWVgLCBgc21jX2Nvbm5fY3JlYXRlYCwgYW5kIGBfX3NtY19yZWxlYXNlYCBhcmUgYWxsIGFmZmVjdGVkLiBOb3csIEkgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBzbWNfY29ubl91bmhhc2hgLCBgc21jX2Nvbm5fZnJlZWAsIGBfX3NtY19yZWxlYXNlYCwgYW5kIGBzbWNfcmVsZWFzZWAsIGFuZCB0aGVpciBzdXJyb3VuZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgaW1wYWN0IHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIHRoZSBkaWFnbm9zdGljIHJlYWRlci4gVGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMgY3JpdGljYWwgdG8gYSBjb21wbGV0ZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NDYuMTc4NjAxNDczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgzODY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY29ubl9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0yODg9c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zMTItXFxubmV0L3NtYy9hZl9zbWMuYzozMTM6XFx0LyogRmFsbGJhY2sgc29ja2V0cyBuZXZlciBjYWxsIHNtY19jb25uX2ZyZWUoKSwgc28gdW5oYXNoIGRpcmVjdGx5Llxcbm5ldC9zbWMvYWZfc21jLmMtMzE0LVxcdCAqIE5vbi1mYWxsYmFjayBzb2NrZXRzIHVzZSBzbWNfY29ubl91bmhhc2goKSBzbyB0aGF0IHRoZSBjb25uLVxcdTAwM2V1bmhhc2hlZFxcbm5ldC9zbWMvYWZfc21jLmM6MzE1OlxcdCAqIGZsYWcga2VlcHMgdGhlIHVuaGFzaCBleGFjdGx5IG9uY2UgZXZlbiB3aGVuIHNtY19jb25uX2ZyZWUoKSBhbHJlYWR5IHJhblxcbm5ldC9zbWMvYWZfc21jLmMtMzE2LVxcdCAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLlxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zMjktXFx0XFx0aWYgKCFzbWMtXFx1MDAzZXVzZV9mYWxsYmFjaylcXG5uZXQvc21jL2FmX3NtYy5jOjMzMDpcXHRcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMzMxLVxcdH1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTAxNj1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IGxvY2FsX2ZpcnN0KVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMDI0LVxcbm5ldC9zbWMvYWZfc21jLmM6MTAyNTpcXHRzbWNfY29ubl9mcmVlKGNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMTAyNi1cXHRpZiAobG9jYWxfZmlyc3QgXFx1MDAyNlxcdTAwMjYgbGdyX3ZhbGlkKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYz0xMjg9dm9pZCBzbWNfY2xvc2VfYWN0aXZlX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTYtXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcXG5uZXQvc21jL3NtY19jbG9zZS5jOjE1NzpcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTU4LVxcdFxcdHJlbGVhc2VfY2xjc29jayA9IHRydWU7XFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jLTE2Ny1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTY4OlxcdFxcdHNtY19jb25uX2ZyZWUoXFx1MDAyNnNtYy1cXHUwMDNlY29ubik7XFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNjktXFx0XFx0cmVsZWFzZV9jbGNzb2NrID0gdHJ1ZTtcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy00MzUtXFx0XFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIXNrLVxcdTAwM2Vza19zb2NrZXQpKSB7XFxubmV0L3NtYy9zbWNfY2xvc2UuYzo0MzY6XFx0XFx0XFx0c21jX2Nvbm5fZnJlZShjb25uKTtcXG5uZXQvc21jL3NtY19jbG9zZS5jLTQzNy1cXHRcXHRcXHRpZiAoc21jLVxcdTAwM2VjbGNzb2NrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkwLVxcdGF0b21pY19pbmMoXFx1MDAyNmNvbm4tXFx1MDAzZWxuay1cXHUwMDNlY29ubl9jbnQpO1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxMDkxOlxcdC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkyLVxcdHNtY3JfbGlua19ob2xkKGNvbm4tXFx1MDAzZWxuayk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTI1OD12b2lkIHNtY19jb25uX3VuaGFzaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI2OC0vKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI2OTp2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjcwLXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xOTk2PWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3MC1cXHR9XFxubmV0L3NtYy9zbWNfY29yZS5jOjIwNzE6XFx0c21jX2xncl9ob2xkKGNvbm4tXFx1MDAzZWxncik7IC8qIGxncl9wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXFxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzItXFx0aWYgKCFjb25uLVxcdTAwM2VsZ3ItXFx1MDAzZWlzX3NtY2QpXFxubmV0L3NtYy9zbWNfY29yZS5jOjIwNzM6XFx0XFx0c21jcl9saW5rX2hvbGQoY29ubi1cXHUwMDNlbG5rKTsgLyogbGlua19wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXFxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzQtXFx0Y29ubi1cXHUwMDNlZnJlZWQgPSAwO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oPTU5OD12b2lkIHNtY19jb25uX3VuaGFzaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbm5ldC9zbWMvc21jX2NvcmUuaDo1OTk6dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XFxubmV0L3NtYy9zbWNfY29yZS5oLTYwMC1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NDYuMjI1NDQ1MDEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzUyNzA0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgbmV0L3NtYy9zbWNfZGlhZy5jYCBmb3IgQ29ubmVjdGlvbiBEaWFnbm9zdGljcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBjb25uZWN0aW9uIGRpYWdub3N0aWNzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyIChTTUMpIGNvbnRleHQuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBgbmV0L3NtYy9zbWNfZGlhZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gKnJlYWRzKiBjb25uZWN0aW9uIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgZGV0YWlscyBhYm91dCBzb2NrZXRzLiBJJ20gYXNzdW1pbmcgdGhpcyBmaWxlIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBkZXRhaWxzIG9mIGdhdGhlcmluZyB0aGVzZSBjb25uZWN0aW9uIHN0YXRpc3RpY3Mgd291bGQgcmVzaWRlLiBJIGV4cGVjdCB0byBmaW5kIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiBsaWtlIGNvbm5lY3Rpb24gc3RhdGUsIHNvY2tldCBhZGRyZXNzZXMsIGVycm9yIGNvdW50cywgYW5kIGFueSBvdGhlciByZWxldmFudCBtZXRyaWNzIGZvciBkZWJ1Z2dpbmcgYW5kIHRyb3VibGVzaG9vdGluZyBTTUMtcmVsYXRlZCBjb25uZWN0aW9ucy4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbWV0aG9kcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGVtcGxveWVkIHRvIGFjY2VzcyBhbmQgaW50ZXJwcmV0IHRoaXMgY29ubmVjdGlvbiBkYXRhIHdpdGhpbiB0aGUgU01DIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGtleSB0byBteSBvdmVyYWxsIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo0OC42MDA3MTc1NzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Nzk1NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaGFzaHxyZWFkX2xvY2t8c21jX2RpYWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX1NNQylcXHQrPSBzbWMub1xcbm5ldC9zbWMvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfU01DX0RJQUcpXFx0Kz0gc21jX2RpYWcub1xcbm5ldC9zbWMvTWFrZWZpbGUtNS1zbWMteSA6PSBhZl9zbWMubyBzbWNfcG5ldC5vIHNtY19pYi5vIHNtY19jbGMubyBzbWNfY29yZS5vIHNtY193ci5vIHNtY19sbGMub1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0xMjI9c3RhdGljIHN0cnVjdCBzb2NrICpzbWNfdGNwX3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMjUtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxubmV0L3NtYy9hZl9zbWMuYzoxMjY6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXFfdW5oYXNoLFxcbm5ldC9zbWMvYWZfc21jLmMtMTI3LVxcdFxcdFxcdFxcdFxcdCAgYm9vbCAqb3duX3JlcSxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTMzLVxcbm5ldC9zbWMvYWZfc21jLmM6MTM0OlxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvc21jL2FmX3NtYy5jLTEzNS1cXHRzbWMgPSBzbWNfY2xjc29ja191c2VyX2RhdGFfcmN1KHNrKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTUyLVxcdC8qIHBhc3N0aHJvdWdoIHRvIG9yaWdpbmFsIHN5biByZWN2IHNvY2sgZmN0ICovXFxubmV0L3NtYy9hZl9zbWMuYzoxNTM6XFx0Y2hpbGQgPSBzbWMtXFx1MDAzZW9yaV9hZl9vcHMtXFx1MDAzZXN5bl9yZWN2X3NvY2soc2ssIHNrYiwgcmVxLCBkc3QsIHJlcV91bmhhc2gsXFxubmV0L3NtYy9hZl9zbWMuYy0xNTQtXFx0XFx0XFx0XFx0XFx0ICAgICAgIG93bl9yZXEsIG9wdF9jaGlsZF9pbml0KTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTk5PWludCBzbWNfaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTIxMy1cXG5uZXQvc21jL2FmX3NtYy5jOjIxNDp2b2lkIHNtY191bmhhc2hfc2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9zbWMvYWZfc21jLmMtMjE1LXtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjM4PXN0cnVjdCBwcm90byBzbWNfcHJvdG8gPSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI0Mi1cXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxubmV0L3NtYy9hZl9zbWMuYzoyNDM6XFx0LnVuaGFzaFxcdFxcdD0gc21jX3VuaGFzaF9zayxcXG5uZXQvc21jL2FmX3NtYy5jLTI0NC1cXHQucmVsZWFzZV9jYlxcdD0gc21jX3JlbGVhc2VfY2IsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTI1MT1zdHJ1Y3QgcHJvdG8gc21jX3Byb3RvNiA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjU1LVxcdC5oYXNoXFx0XFx0PSBzbWNfaGFzaF9zayxcXG5uZXQvc21jL2FmX3NtYy5jOjI1NjpcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbm5ldC9zbWMvYWZfc21jLmMtMjU3LVxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9Mjg4PXN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzEyLVxcbm5ldC9zbWMvYWZfc21jLmM6MzEzOlxcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cXG5uZXQvc21jL2FmX3NtYy5jOjMxNDpcXHQgKiBOb24tZmFsbGJhY2sgc29ja2V0cyB1c2Ugc21jX2Nvbm5fdW5oYXNoKCkgc28gdGhhdCB0aGUgY29ubi1cXHUwMDNldW5oYXNoZWRcXG5uZXQvc21jL2FmX3NtYy5jOjMxNTpcXHQgKiBmbGFnIGtlZXBzIHRoZSB1bmhhc2ggZXhhY3RseSBvbmNlIGV2ZW4gd2hlbiBzbWNfY29ubl9mcmVlKCkgYWxyZWFkeSByYW5cXG5uZXQvc21jL2FmX3NtYy5jLTMxNi1cXHQgKiBmaXJzdCAoZS5nLiB2aWEgc21jX2Nvbm5fa2lsbCgpKS5cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzE4LVxcdGlmIChzbWMtXFx1MDAzZXVzZV9mYWxsYmFjaylcXG5uZXQvc21jL2FmX3NtYy5jOjMxOTpcXHRcXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKHNrKTtcXG5uZXQvc21jL2FmX3NtYy5jLTMyMC1cXHRlbHNlXFxubmV0L3NtYy9hZl9zbWMuYzozMjE6XFx0XFx0c21jX2Nvbm5fdW5oYXNoKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMzIyLVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz04NTA9c3RhdGljIHZvaWQgc21jX2ZiYWNrX2ZvcndhcmRfd2FrZXVwKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc29jayAqY2xjc2ssXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTg1Ny1cXHRcXHRcXHRcXHQgIHNtY19mYmFja19tYXJrX3dva2VuKTtcXG5uZXQvc21jL2FmX3NtYy5jOjg1ODpcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9hZl9zbWMuYy04NTktXFx0d3EgPSByY3VfZGVyZWZlcmVuY2UoY2xjc2stXFx1MDAzZXNrX3dxKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9ODcyPXN0YXRpYyB2b2lkIHNtY19mYmFja19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKmNsY3NrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy04NzUtXFxubmV0L3NtYy9hZl9zbWMuYzo4NzY6XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZjbGNzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxubmV0L3NtYy9hZl9zbWMuYy04NzctXFx0c21jID0gc21jX2NsY3NvY2tfdXNlcl9kYXRhKGNsY3NrKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9ODg0PXN0YXRpYyB2b2lkIHNtY19mYmFja19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpjbGNzaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtODg3LVxcbm5ldC9zbWMvYWZfc21jLmM6ODg4OlxcdHJlYWRfbG9ja19iaChcXHUwMDI2Y2xjc2stXFx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xcbm5ldC9zbWMvYWZfc21jLmMtODg5LVxcdHNtYyA9IHNtY19jbGNzb2NrX3VzZXJfZGF0YShjbGNzayk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTg5Nj1zdGF0aWMgdm9pZCBzbWNfZmJhY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKmNsY3NrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy04OTktXFxubmV0L3NtYy9hZl9zbWMuYzo5MDA6XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZjbGNzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxubmV0L3NtYy9hZl9zbWMuYy05MDEtXFx0c21jID0gc21jX2NsY3NvY2tfdXNlcl9kYXRhKGNsY3NrKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9OTA4PXN0YXRpYyB2b2lkIHNtY19mYmFja19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKmNsY3NrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy05MTEtXFxubmV0L3NtYy9hZl9zbWMuYzo5MTI6XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZjbGNzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxubmV0L3NtYy9hZl9zbWMuYy05MTMtXFx0c21jID0gc21jX2NsY3NvY2tfdXNlcl9kYXRhKGNsY3NrKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTc0NT1zdGF0aWMgaW50IHNtY19jbGNzb2NrX2FjY2VwdChzdHJ1Y3Qgc21jX3NvY2sgKmxzbWMsIHN0cnVjdCBzbWNfc29jayAqKm5ld19zbWMpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE3NzAtXFx0aWYgKHJjIFxcdTAwM2MgMCB8fCBsc2stXFx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQpIHtcXG5uZXQvc21jL2FmX3NtYy5jOjE3NzE6XFx0XFx0bmV3X3NrLVxcdTAwM2Vza19wcm90LVxcdTAwM2V1bmhhc2gobmV3X3NrKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE3NzItXFx0XFx0aWYgKG5ld19jbGNzb2NrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0xODMyPXN0cnVjdCBzb2NrICpzbWNfYWNjZXB0X2RlcXVldWUoc3RydWN0IHNvY2sgKnBhcmVudCxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTg0Mi1cXHRcXHRpZiAobmV3X3NrLVxcdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEKSB7XFxubmV0L3NtYy9hZl9zbWMuYzoxODQzOlxcdFxcdFxcdG5ld19zay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKG5ld19zayk7XFxubmV0L3NtYy9hZl9zbWMuYy0xODQ0LVxcdFxcdFxcdGlmIChpc2stXFx1MDAzZWNsY3NvY2spIHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjYzOD1zdGF0aWMgdm9pZCBzbWNfY2xjc29ja19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpsaXN0ZW5fY2xjc29jaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjY0MS1cXG5uZXQvc21jL2FmX3NtYy5jOjI2NDI6XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZsaXN0ZW5fY2xjc29jay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxubmV0L3NtYy9hZl9zbWMuYy0yNjQzLVxcdGxzbWMgPSBzbWNfY2xjc29ja191c2VyX2RhdGEobGlzdGVuX2NsY3NvY2spO1xcbi0tXFxubmV0L3NtYy9zbWMuaD00MD1pbnQgc21jX2hhc2hfc2soc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtYy5oOjQxOnZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9zbWMvc21jLmgtNDItdm9pZCBzbWNfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spO1xcbi0tXFxubmV0L3NtYy9zbWMuaD0xOTU9c3RydWN0IHNtY19jb25uZWN0aW9uIHtcXG4tLVxcbm5ldC9zbWMvc21jLmgtMjgxLVxcdHU4XFx0XFx0XFx0ZnJlZWQ7XFx0XFx0Lyogbm9ybWFsIHRlcm1pbmF0aW9uICovXFxubmV0L3NtYy9zbWMuaDoyODI6XFx0dThcXHRcXHRcXHR1bmhhc2hlZDtcXHQvKiByZW1vdmVkIGZyb20gc29jayBoYXNoICovXFxubmV0L3NtYy9zbWMuaC0yODMtXFx0dThcXHRcXHRcXHRvdXRfb2Zfc3luYztcXHQvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTQ2OT1zdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtNDgzLVxcdGxnciA9IHNtY19nZXRfbGdyKGxpbmspO1xcbm5ldC9zbWMvc21jX2NkYy5jOjQ4NDpcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxubmV0L3NtYy9zbWNfY2RjLmMtNDg1LVxcdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXFx1MDAzZXRva2VuKSwgbGdyKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NsYy5jPTExOD1pbnQgc21jX2NsY191ZWlkX2NvdW50KHZvaWQpXFxuLS1cXG5uZXQvc21jL3NtY19jbGMuYy0xMjEtXFxubmV0L3NtYy9zbWNfY2xjLmM6MTIyOlxcdHJlYWRfbG9jayhcXHUwMDI2c21jX2NsY19laWRfdGFibGUubG9jayk7XFxubmV0L3NtYy9zbWNfY2xjLmMtMTIzLVxcdGNvdW50ID0gc21jX2NsY19laWRfdGFibGUudWVpZF9jbnQ7XFxuLS1cXG5uZXQvc21jL3NtY19jbGMuYz0yMDY9c3RhdGljIGludCBfc21jX25sX3VlaWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmMtMjExLVxcbm5ldC9zbWMvc21jX2NsYy5jOjIxMjpcXHRyZWFkX2xvY2soXFx1MDAyNnNtY19jbGNfZWlkX3RhYmxlLmxvY2spO1xcbm5ldC9zbWMvc21jX2NsYy5jLTIxMy1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGxzdF91ZWlkLCBcXHUwMDI2c21jX2NsY19laWRfdGFibGUubGlzdCwgbGlzdCkge1xcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmM9MjM4PWludCBzbWNfbmxfZHVtcF9zZWlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9zbWMvc21jX2NsYy5jLTI2MS1cXHRcXHRnb3RvIGVycjtcXG5uZXQvc21jL3NtY19jbGMuYzoyNjI6XFx0cmVhZF9sb2NrKFxcdTAwMjZzbWNfY2xjX2VpZF90YWJsZS5sb2NrKTtcXG5uZXQvc21jL3NtY19jbGMuYy0yNjMtXFx0c2VpZF9lbmFibGVkID0gc21jX2NsY19laWRfdGFibGUuc2VpZF9lbmFibGVkO1xcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmM9MzE2PWJvb2wgc21jX2NsY19tYXRjaF9laWQodTggKm5lZ290aWF0ZWRfZWlkLFxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmMtMzIzLVxcdG5lZ290aWF0ZWRfZWlkWzBdID0gMDtcXG5uZXQvc21jL3NtY19jbGMuYzozMjQ6XFx0cmVhZF9sb2NrKFxcdTAwMjZzbWNfY2xjX2VpZF90YWJsZS5sb2NrKTtcXG5uZXQvc21jL3NtY19jbGMuYy0zMjUtXFx0aWYgKHBlZXJfZWlkIFxcdTAwMjZcXHUwMDI2IGxvY2FsX2VpZCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmM9NTYzPXN0YXRpYyBpbnQgc21jX2NsY19wcmZ4X3NldChzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLFxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmMtNTgwLVxcbm5ldC9zbWMvc21jX2NsYy5jOjU4MTpcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfY2xjLmMtNTgyLVxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmM9NjU3PWludCBzbWNfY2xjX3ByZnhfbWF0Y2goc3RydWN0IHNvY2tldCAqY2xjc29jayxcXG4tLVxcbm5ldC9zbWMvc21jX2NsYy5jLTY2My1cXG5uZXQvc21jL3NtY19jbGMuYzo2NjQ6XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9zbWMvc21jX2NsYy5jLTY2NS1cXG4tLVxcbm5ldC9zbWMvc21jX2NsYy5jPTg0Nj1pbnQgc21jX2NsY19zZW5kX3Byb3Bvc2FsKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmMtOTQyLVxcdFxcdHYyX2V4dC1cXHUwMDNlZmVhdHVyZV9tYXNrID0gaHRvbnMoU01DX0ZFQVRVUkVfTUFTSyk7XFxubmV0L3NtYy9zbWNfY2xjLmM6OTQzOlxcdFxcdHJlYWRfbG9jayhcXHUwMDI2c21jX2NsY19laWRfdGFibGUubG9jayk7XFxubmV0L3NtYy9zbWNfY2xjLmMtOTQ0LVxcdFxcdHYyX2V4dC1cXHUwMDNlaGRyLmVpZF9jbnQgPSBzbWNfY2xjX2VpZF90YWJsZS51ZWlkX2NudDtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz03MTQ9c3RhdGljIHZvaWQgc21jX2xncl9mcmVlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTcyNy1cXHR9XFxubmV0L3NtYy9zbWNfY29yZS5jOjcyODpcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTcyOS1cXHRjb25ucyA9IFJCX0VNUFRZX1JPT1QoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfYWxsKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMDk1PXN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMTIzLWFnYWluOlxcbm5ldC9zbWMvc21jX2NvcmUuYzoxMTI0OlxcdHJlYWRfbG9ja19iaChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19sb2NrKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTEyNS1cXHRmb3IgKG5vZGUgPSByYl9maXJzdChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19hbGwpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkge1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTEyMjQ9c3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI1My1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI1NDovKiB1bmhhc2ggdGhlIHNvY2tldCBvbmNlOyBvd25zIHRoZSBzaW5nbGUgdW5oYXNoIGZvciBhbGwgbm9uLWZhbGxiYWNrIHBhdGhzLlxcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjU1OiAqIEV2ZXJ5IGNhbGxlciBob2xkcyBsb2NrX3NvY2sgZm9yIHRoaXMgc29ja2V0LCBzbyBjb25uLVxcdTAwM2V1bmhhc2hlZCBpcyBwcm90ZWN0ZWRcXG5uZXQvc21jL3NtY19jb3JlLmMtMTI1Ni0gKiBieSB0aGF0IGxvY2sgYW5kIG5vIHNlcGFyYXRlIHN5bmNocm9uaXNhdGlvbiBpcyBuZWVkZWQuXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTctICovXFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNTg6dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU5LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjYxLVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjYyOlxcdGlmICghY29ubi1cXHUwMDNldW5oYXNoZWQpIHtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTI2MzpcXHRcXHRjb25uLVxcdTAwM2V1bmhhc2hlZCA9IDE7XFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNjQ6XFx0XFx0c21jLVxcdTAwM2Vzay5za19wcm90LVxcdTAwM2V1bmhhc2goXFx1MDAyNnNtYy1cXHUwMDNlc2spO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjY1LVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjY5PXZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI4MC1cXHQvKiBVbmhhc2ggYmVmb3JlIGRyb3BwaW5nIGxnci9sbmsgcmVmcyBzbyB0aGUgZGlhZyByZWFkZXIsIHdoaWNoXFxubmV0L3NtYy9zbWNfY29yZS5jOjEyODE6XFx0ICogaXRlcmF0ZXMgdW5kZXIgdGhlIHNvY2tldCBoYXNoIHJlYWRfbG9jaywgY2Fubm90IHNlZSBhIGNvbm5lY3Rpb24gd2hvc2VcXG5uZXQvc21jL3NtY19jb3JlLmMtMTI4Mi1cXHQgKiBsZ3Igb3IgbG5rIGlzIGJlaW5nIGZyZWVkIGNvbmN1cnJlbnRseS5cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI4My1cXHQgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI4NDpcXHRzbWNfY29ubl91bmhhc2goY29ubik7XFxubmV0L3NtYy9zbWNfY29yZS5jLTEyODUtXFx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTU3OT1zdGF0aWMgdm9pZCBfX3NtY19sZ3JfdGVybWluYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBib29sIHNvZnQpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTU5MS1cXHQvKiBraWxsIHJlbWFpbmluZyBsaW5rIGdyb3VwIGNvbm5lY3Rpb25zICovXFxubmV0L3NtYy9zbWNfY29yZS5jOjE1OTI6XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZsZ3ItXFx1MDAzZWNvbm5zX2xvY2spO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xNTkzLVxcdG5vZGUgPSByYl9maXJzdChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19hbGwpO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE2MDItXFx0XFx0c29ja19wdXQoXFx1MDAyNnNtYy1cXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgYWJvdmUgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTYwMzpcXHRcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTE2MDQtXFx0XFx0bm9kZSA9IHJiX2ZpcnN0KFxcdTAwMjZsZ3ItXFx1MDAzZWNvbm5zX2FsbCk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTkxOD1pbnQgc21jX3ZsYW5fYnlfdGNwc2soc3RydWN0IHNvY2tldCAqY2xjc29jaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xOTI2LVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxOTI3OlxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTkyOC1cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xOTk2PWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3NC1cXHRjb25uLVxcdTAwM2VmcmVlZCA9IDA7XFxubmV0L3NtYy9zbWNfY29yZS5jOjIwNzU6XFx0Y29ubi1cXHUwMDNldW5oYXNoZWQgPSAwO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc2LVxcdGNvbm4tXFx1MDAzZWxvY2FsX3R4X2N0cmwuY29tbW9uLnR5cGUgPSBTTUNfQ0RDX01TR19UWVBFO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oPTU5Nj1pbnQgc21jX3ZsYW5fYnlfdGNwc2soc3RydWN0IHNvY2tldCAqY2xjc29jaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XFxubmV0L3NtYy9zbWNfY29yZS5oLTU5Ny1cXG5uZXQvc21jL3NtY19jb3JlLmg6NTk4OnZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XFxubmV0L3NtYy9zbWNfY29yZS5oLTU5OS12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW5ldF9kaWFnLmhcXHUwMDNlXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbWNfZGlhZy5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjY6c3RydWN0IHNtY19kaWFnX2R1bXBfY3R4IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjctXFx0aW50IHBvc1syXTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yOS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MzA6c3RhdGljIHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqc21jX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTMxLXtcXG5uZXQvc21jL3NtY19kaWFnLmM6MzI6XFx0cmV0dXJuIChzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKiljYi1cXHUwMDNlY3R4O1xcbm5ldC9zbWMvc21jX2RpYWcuYy0zMy19XFxubmV0L3NtYy9zbWNfZGlhZy5jLTM0LVxcbm5ldC9zbWMvc21jX2RpYWcuYzozNTpzdGF0aWMgdm9pZCBzbWNfZGlhZ19tc2dfY29tbW9uX2ZpbGwoc3RydWN0IHNtY19kaWFnX21zZyAqciwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0zNi17XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtNTktXFxubmV0L3NtYy9zbWNfZGlhZy5jOjYwOnN0YXRpYyBpbnQgc21jX2RpYWdfbXNnX2F0dHJzX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zbWMvc21jX2RpYWcuYzo2MTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc21jX2RpYWdfbXNnICpyLFxcbm5ldC9zbWMvc21jX2RpYWcuYy02Mi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtNzEtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjcyOnN0YXRpYyBpbnQgX19zbWNfZGlhZ19kdW1wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc21jL3NtY19kaWFnLmMtNzMtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9zbWMvc21jX2RpYWcuYzo3NDpcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgc21jX2RpYWdfcmVxICpyZXEsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTc1LVxcdFxcdFxcdCAgIHN0cnVjdCBubGF0dHIgKmJjKVxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTc3LVxcdHN0cnVjdCBzbWNfc29jayAqc21jID0gc21jX3NrKHNrKTtcXG5uZXQvc21jL3NtY19kaWFnLmM6Nzg6XFx0c3RydWN0IHNtY19kaWFnX2ZhbGxiYWNrIGZhbGxiYWNrO1xcbm5ldC9zbWMvc21jX2RpYWcuYy03OS1cXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjgwOlxcdHN0cnVjdCBzbWNfZGlhZ19tc2cgKnI7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTgxLVxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTg4LVxcdHIgPSBubG1zZ19kYXRhKG5saCk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjg5OlxcdHNtY19kaWFnX21zZ19jb21tb25fZmlsbChyLCBzayk7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTkwLVxcdHItXFx1MDAzZWRpYWdfc3RhdGUgPSBzay1cXHUwMDNlc2tfc3RhdGU7XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtOTctXFx0dXNlcl9ucyA9IHNrX3VzZXJfbnMoTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5zayk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjk4OlxcdGlmIChzbWNfZGlhZ19tc2dfYXR0cnNfZmlsbChzaywgc2tiLCByLCB1c2VyX25zKSlcXG5uZXQvc21jL3NtY19kaWFnLmMtOTktXFx0XFx0Z290byBlcnJvdXQ7XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMTA4LVxcdFxcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFxcdTAwMjZzbWMtXFx1MDAzZWNvbm47XFxubmV0L3NtYy9zbWNfZGlhZy5jOjEwOTpcXHRcXHRzdHJ1Y3Qgc21jX2RpYWdfY29ubmluZm8gY2luZm8gPSB7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTExMC1cXHRcXHRcXHQudG9rZW4gPSBjb25uLVxcdTAwM2VhbGVydF90b2tlbl9sb2NhbCxcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xNTAtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE1MTpcXHRcXHRzdHJ1Y3Qgc21jX2RpYWdfbGdyaW5mbyBsaW5mbyA9IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMTUyLVxcdFxcdFxcdC5yb2xlID0gc21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlcm9sZSxcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTUtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE5NjpzdGF0aWMgaW50IHNtY19kaWFnX2R1bXBfcHJvdG8oc3RydWN0IHByb3RvICpwcm90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IHBfdHlwZSlcXG5uZXQvc21jL3NtY19kaWFnLmMtMTk4LXtcXG5uZXQvc21jL3NtY19kaWFnLmM6MTk5OlxcdHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqY2JfY3R4ID0gc21jX2R1bXBfY29udGV4dChjYik7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTIwMC1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMDYtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIwNzpcXHRyZWFkX2xvY2soXFx1MDAyNnByb3QtXFx1MDAzZWguc21jX2hhc2gtXFx1MDAzZWxvY2spO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yMDgtXFx0aGVhZCA9IFxcdTAwMjZwcm90LVxcdTAwM2VoLnNtY19oYXNoLVxcdTAwM2VodDtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMTYtXFx0XFx0XFx0Z290byBuZXh0O1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyMTc6XFx0XFx0cmMgPSBfX3NtY19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCksIGJjKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjE4LVxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjI5LVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyMzA6c3RhdGljIGludCBzbWNfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvc21jL3NtY19kaWFnLmMtMjMxLXtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzMtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNDpcXHRyYyA9IHNtY19kaWFnX2R1bXBfcHJvdG8oXFx1MDAyNnNtY19wcm90bywgc2tiLCBjYiwgU01DUFJPVE9fU01DKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjM1LVxcdGlmICghcmMpXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNjpcXHRcXHRzbWNfZGlhZ19kdW1wX3Byb3RvKFxcdTAwMjZzbWNfcHJvdG82LCBza2IsIGNiLCBTTUNQUk9UT19TTUM2KTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjM3LVxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzktXFxubmV0L3NtYy9zbWNfZGlhZy5jOjI0MDpzdGF0aWMgaW50IHNtY19kaWFnX2hhbmRsZXJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKmgpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI0MS17XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjQ3LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyNDg6XFx0XFx0XFx0XFx0LmR1bXAgPSBzbWNfZGlhZ19kdW1wLFxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNDktXFx0XFx0XFx0XFx0Lm1pbl9kdW1wX2FsbG9jID0gU0tCX1dJVEhfT1ZFUkhFQUQoMzI3NjgpLFxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI1Ni1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjU3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19kaWFnX2hhbmRsZXIgc21jX2RpYWdfaGFuZGxlciA9IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjU4LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNTktXFx0LmZhbWlseSA9IEFGX1NNQyxcXG5uZXQvc21jL3NtY19kaWFnLmM6MjYwOlxcdC5kdW1wID0gc21jX2RpYWdfaGFuZGxlcl9kdW1wLFxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjEtfTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjYyLVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjM6c3RhdGljIGludCBfX2luaXQgc21jX2RpYWdfaW5pdCh2b2lkKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjQte1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjU6XFx0cmV0dXJuIHNvY2tfZGlhZ19yZWdpc3RlcihcXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI2Ni19XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI2Ny1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjY4OnN0YXRpYyB2b2lkIF9fZXhpdCBzbWNfZGlhZ19leGl0KHZvaWQpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI2OS17XFxubmV0L3NtYy9zbWNfZGlhZy5jOjI3MDpcXHRzb2NrX2RpYWdfdW5yZWdpc3RlcihcXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI3MS19XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI3Mi1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjczOm1vZHVsZV9pbml0KHNtY19kaWFnX2luaXQpO1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyNzQ6bW9kdWxlX2V4aXQoc21jX2RpYWdfZXhpdCk7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI3NS1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLS1cXG5uZXQvc21jL3NtY19oc19icGYuaC0yMC0gKlxcbm5ldC9zbWMvc21jX2hzX2JwZi5oOjIxOiAqIE5vdGU6IENhbGxlciBNVVNUIGVuc3VyZSBpdCdzIHdhcyBpbnZva2VkIHVuZGVyIHJjdV9yZWFkX2xvY2suXFxubmV0L3NtYy9zbWNfaHNfYnBmLmgtMjItICovXFxuLS1cXG5uZXQvc21jL3NtY19pYi5jPTI3ND1pbnQgc21jX2liX2RldGVybWluZV9naWQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQsXFxuLS1cXG5uZXQvc21jL3NtY19pYi5jLTI4Ni1cXG5uZXQvc21jL3NtY19pYi5jOjI4NzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfaWIuYy0yODgtXFx0XFx0bmRldiA9IHJkbWFfcmVhZF9naWRfYXR0cl9uZGV2X3JjdShhdHRyKTtcXG4tLVxcbm5ldC9zbWMvc21jX2liLmM9MzA3PXN0YXRpYyBib29sIHNtY19pYl9jaGVja19saW5rX2dpZCh1OCBnaWRbU01DX0dJRF9TSVpFXSwgYm9vbCBzbWNydjIsXFxuLS1cXG5uZXQvc21jL3NtY19pYi5jLTMxOC1cXG5uZXQvc21jL3NtY19pYi5jOjMxOTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfaWIuYy0zMjAtXFx0XFx0aWYgKCghc21jcnYyIFxcdTAwMjZcXHUwMDI2IGF0dHItXFx1MDAzZWdpZF90eXBlID09IElCX0dJRF9UWVBFX1JPQ0UpIHx8XFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MjM9c3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jLTI4LVxcdC5oYXNoXFx0XFx0PSBzbWNfaGFzaF9zayxcXG5uZXQvc21jL3NtY19pbmV0LmM6Mjk6XFx0LnVuaGFzaFxcdFxcdD0gc21jX3VuaGFzaF9zayxcXG5uZXQvc21jL3NtY19pbmV0LmMtMzAtXFx0LnJlbGVhc2VfY2JcXHQ9IHNtY19yZWxlYXNlX2NiLFxcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jPTcwPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXQ2X3Byb3QgPSB7XFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmMtNzUtXFx0Lmhhc2hcXHRcXHQ9IHNtY19oYXNoX3NrLFxcbm5ldC9zbWMvc21jX2luZXQuYzo3NjpcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbm5ldC9zbWMvc21jX2luZXQuYy03Ny1cXHQucmVsZWFzZV9jYlxcdD0gc21jX3JlbGVhc2VfY2IsXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MTIzPXN0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3NtYy9zbWNfaW5ldC5jLTEyNC17XFxubmV0L3NtYy9zbWNfaW5ldC5jOjEyNTpcXHQvKiBUaGUgc29jayBpcyBoYXNoZWQgYW5kIHNtY19kaWFnIGR1bXBzIGRlcmVmZXJlbmNlIHNtYy1cXHUwMDNlY2xjc29ja1xcbm5ldC9zbWMvc21jX2luZXQuYy0xMjYtXFx0ICogd2l0aG91dCBjbGNzb2NrX3JlbGVhc2VfbG9jaywgd2hpbGUgc2tfY29tbW9uX3JlbGVhc2UoKSBjYWxsc1xcbm5ldC9zbWMvc21jX2luZXQuYzoxMjc6XFx0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXFxubmV0L3NtYy9zbWNfaW5ldC5jLTEyOC1cXHQgKiBzbyBubyBkdW1wIGNhbiBvYnNlcnZlIHRoZSBjbGNzb2NrIGJlaW5nIHJlbGVhc2VkOyB0aGUgc2Vjb25kXFxubmV0L3NtYy9zbWNfaW5ldC5jOjEyOTpcXHQgKiB1bmhhc2ggaXMgYSBuby1vcC5cXG5uZXQvc21jL3NtY19pbmV0LmMtMTMwLVxcdCAqL1xcbm5ldC9zbWMvc21jX2luZXQuYzoxMzE6XFx0c2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZXVuaGFzaChzayk7XFxubmV0L3NtYy9zbWNfaW5ldC5jLTEzMi1cXHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jPTczMT1ib29sIHNtY19wbmV0X2lzX25kZXZfcG5ldGlkKHN0cnVjdCBuZXQgKm5ldCwgdTggKnBuZXRpZClcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy03MzYtXFxubmV0L3NtYy9zbWNfcG5ldC5jOjczNzpcXHRyZWFkX2xvY2soXFx1MDAyNnNuLVxcdTAwM2VwbmV0aWRzX25kZXYubG9jayk7XFxubmV0L3NtYy9zbWNfcG5ldC5jLTczOC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBlLCBcXHUwMDI2c24tXFx1MDAzZXBuZXRpZHNfbmRldi5saXN0LCBsaXN0KSB7XFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmM9MTEzMj12b2lkIHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmMtMTEzNi1cXG5uZXQvc21jL3NtY19wbmV0LmM6MTEzNzpcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfcG5ldC5jLTExMzgtXFx0ZHN0ID0gX19za19kc3RfZ2V0KHNrKTtcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYz0xMTQ5PXZvaWQgc21jX3BuZXRfZmluZF9pc21fcmVzb3VyY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTExNTUtXFxubmV0L3NtYy9zbWNfcG5ldC5jOjExNTY6XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTU3LVxcdGRzdCA9IF9fc2tfZHN0X2dldChzayk7XFxuLS1cXG5uZXQvc21jL3NtY19yeC5jPTMyPXN0YXRpYyB2b2lkIHNtY19yeF93YWtlX3VwKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMzktXFx0LyogY2FsbGVkIGFscmVhZHkgaW4gc21jX2xpc3Rlbl93b3JrKCkgKi9cXG5uZXQvc21jL3NtY19yeC5jOjQwOlxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvc21jL3NtY19yeC5jLTQxLVxcdHdxID0gcmN1X2RlcmVmZXJlbmNlKHNrLVxcdTAwM2Vza193cSk7XFxuLS1cXG5uZXQvc21jL3NtY19zeXNjdGwuYz0zOD1zdGF0aWMgaW50IHNtY19uZXRfcmVwbGFjZV9zbWNfaHNfY3RybChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5uZXQvc21jL3NtY19zeXNjdGwuYy00MS1cXG5uZXQvc21jL3NtY19zeXNjdGwuYzo0MjpcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfc3lzY3RsLmMtNDMtXFx0LyogbnVsbCBvciBlbXB0eSBuYW1lIGFzayB0byBjbGVhciBjdXJyZW50IGN0cmwgKi9cXG4tLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5jPTcwPXN0YXRpYyBpbnQgcHJvY19zbWNfaHNfY3RybChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5jLTgxLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5jOjgyOlxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvc21jL3NtY19zeXNjdGwuYy04My1cXHRjdHJsID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cXHUwMDNlc21jLmhzX2N0cmwpO1xcbi0tXFxubmV0L3NtYy9zbWNfc3lzY3RsLmM9MjE0PWludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3NtYy9zbWNfc3lzY3RsLmMtMjIzLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5jOjIyNDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfc3lzY3RsLmMtMjI1LVxcdFxcdGN0cmwgPSByY3VfZGVyZWZlcmVuY2UoaW5pdF9uZXQuc21jLmhzX2N0cmwpO1xcbi0tXFxubmV0L3NtYy9zbWNfdHguYz00MT1zdGF0aWMgdm9pZCBzbWNfdHhfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3NtYy9zbWNfdHguYy01MS1cXHRcXHRjbGVhcl9iaXQoU09DS19OT1NQQUNFLCBcXHUwMDI2c29jay1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9zbWMvc21jX3R4LmM6NTI6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9zbWMvc21jX3R4LmMtNTMtXFx0XFx0d3EgPSByY3VfZGVyZWZlcmVuY2Uoc2stXFx1MDAzZXNrX3dxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NDguNjQ5NTE5ODY1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzQ0MTYxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTTUMgVW5oYXNoIEZ1bmN0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHNtY191bmhhc2hfc2tgIGZ1bmN0aW9uLiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBuZXQvc21jL2FmX3NtYy5jYC4gVGhpcyBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgU01DLXJlbGF0ZWQgY29kZSwgc28gaXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgc29ja2V0cyBhcmUgdW5oYXNoZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBTTUMgZnJhbWV3b3JrLiBJJ20gYXNzdW1pbmcgdGhhdCBpdCdzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCBJIG5lZWQgdG8gZGlzc2VjdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHRhc2suIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDc5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NTAuNDgzOTM4ODM4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL2FmX3NtYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5OSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5OTpcXHRpbnQgc21jX2hhc2hfc2soc3RydWN0IHNvY2sgKnNrKVxcbiAyMDA6XFx0e1xcbiAyMDE6XFx0XFx0c3RydWN0IHNtY19oYXNoaW5mbyAqaCA9IHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VoLnNtY19oYXNoO1xcbiAyMDI6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdGhlYWQgPSBcXHUwMDI2aC1cXHUwMDNlaHQ7XFxuIDIwNTpcXHRcXG4gMjA2OlxcdFxcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNmgtXFx1MDAzZWxvY2spO1xcbiAyMDc6XFx0XFx0c2tfYWRkX25vZGUoc2ssIGhlYWQpO1xcbiAyMDg6XFx0XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2Vsb2NrKTtcXG4gMjA5OlxcdFxcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cXHUwMDNlc2tfcHJvdCwgMSk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdHJldHVybiAwO1xcbiAyMTI6XFx0fVxcbiAyMTM6XFx0XFxuIDIxNDpcXHR2b2lkIHNtY191bmhhc2hfc2soc3RydWN0IHNvY2sgKnNrKVxcbiAyMTU6XFx0e1xcbiAyMTY6XFx0XFx0c3RydWN0IHNtY19oYXNoaW5mbyAqaCA9IHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VoLnNtY19oYXNoO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2Vsb2NrKTtcXG4gMjE5OlxcdFxcdGlmIChza19kZWxfbm9kZV9pbml0KHNrKSlcXG4gMjIwOlxcdFxcdFxcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cXHUwMDNlc2tfcHJvdCwgLTEpO1xcbiAyMjE6XFx0XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2Vsb2NrKTtcXG4gMjIyOlxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0LyogVGhpcyB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdXNlciByZWFsbHkgcmVsZWFzZSBzb2NrX2xvY2suIFNvIGRvIHRoZVxcbiAyMjU6XFx0ICogd29yayB3aGljaCB3ZSBkaWRuJ3QgZG8gYmVjYXVzZSBvZiB1c2VyIGhvbGQgdGhlIHNvY2tfbG9jayBpbiB0aGVcXG4gMjI2OlxcdCAqIEJIIGNvbnRleHRcXG4gMjI3OlxcdCAqL1xcbiAyMjg6XFx0dm9pZCBzbWNfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuIDIyOTpcXHR7XFxuIDIzMDpcXHRcXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHNtY19zayhzayk7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdGlmIChzbWMtXFx1MDAzZWNvbm4udHhfaW5fcmVsZWFzZV9zb2NrKSB7XFxuIDIzMzpcXHRcXHRcXHRzbWNfdHhfcGVuZGluZyhcXHUwMDI2c21jLVxcdTAwM2Vjb25uKTtcXG4gMjM0OlxcdFxcdFxcdHNtYy1cXHUwMDNlY29ubi50eF9pbl9yZWxlYXNlX3NvY2sgPSBmYWxzZTtcXG4gMjM1OlxcdFxcdH1cXG4gMjM2OlxcdH1cXG4gMjM3OlxcdFxcbiAyMzg6XFx0c3RydWN0IHByb3RvIHNtY19wcm90byA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NTAuNDg0MTIzOTA4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTY4NTI0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFNNQyBSZWxlYXNlKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCdzIGhhcHBlbmluZyBpbiB0aGUgYF9fc21jX3JlbGVhc2VgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvZGUgYmxvY2sgc3Bhbm5pbmcgcm91Z2hseSBsaW5lcyAyODggdGhyb3VnaCAzNDAuIFRoaXMgcmFuZ2UgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhbmQgd2hlcmUgSSdsbCBnZXQgdGhlIG1vc3QgdXNlZnVsIGluZm9ybWF0aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBkYXRhIG1hbmlwdWxhdGlvbiBoYXBwZW5pbmcgd2l0aGluIHRoYXQgc2VnbWVudCB0byBmdWxseSBncmFzcCB0aGUgZnVuY3Rpb24ncyBvdmVyYWxsIGJlaGF2aW9yLiBJJ20gYW50aWNpcGF0aW5nIHRoaXMgc2VjdGlvbiB0byBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIFNNQyByZWxlYXNlIHByb2Nlc3MsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0LiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo1Mi42NDA5Nzk1ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvYWZfc21jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg4LFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg4OlxcdHN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4gMjg5OlxcdHtcXG4gMjkwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IFxcdTAwMjZzbWMtXFx1MDAzZXNrO1xcbiAyOTE6XFx0XFx0aW50IHJjID0gMDtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0aWYgKCFzbWMtXFx1MDAzZXVzZV9mYWxsYmFjaykge1xcbiAyOTQ6XFx0XFx0XFx0cmMgPSBzbWNfY2xvc2VfYWN0aXZlKHNtYyk7XFxuIDI5NTpcXHRcXHRcXHRzbWNfc29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcXG4gMjk2OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biB8PSBTSFVURE9XTl9NQVNLO1xcbiAyOTc6XFx0XFx0fSBlbHNlIHtcXG4gMjk4OlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gU01DX0NMT1NFRCkge1xcbiAyOTk6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBTTUNfTElTVEVOIFxcdTAwMjZcXHUwMDI2XFxuIDMwMDpcXHRcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlICE9IFNNQ19JTklUKVxcbiAzMDE6XFx0XFx0XFx0XFx0XFx0c29ja19wdXQoc2spOyAvKiBwYXNzaXZlIGNsb3NpbmcgKi9cXG4gMzAyOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gU01DX0xJU1RFTikge1xcbiAzMDM6XFx0XFx0XFx0XFx0XFx0Lyogd2FrZSB1cCBjbGNzb2NrIGFjY2VwdCAqL1xcbiAzMDQ6XFx0XFx0XFx0XFx0XFx0cmMgPSBrZXJuZWxfc29ja19zaHV0ZG93bihzbWMtXFx1MDAzZWNsY3NvY2ssXFxuIDMwNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFNIVVRfUkRXUik7XFxuIDMwNjpcXHRcXHRcXHRcXHR9XFxuIDMwNzpcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xcbiAzMDg6XFx0XFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuIDMwOTpcXHRcXHRcXHR9XFxuIDMxMDpcXHRcXHRcXHRzbWNfcmVzdG9yZV9mYWxsYmFja19jaGFuZ2VzKHNtYyk7XFxuIDMxMTpcXHRcXHR9XFxuIDMxMjpcXHRcXG4gMzEzOlxcdFxcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cXG4gMzE0OlxcdFxcdCAqIE5vbi1mYWxsYmFjayBzb2NrZXRzIHVzZSBzbWNfY29ubl91bmhhc2goKSBzbyB0aGF0IHRoZSBjb25uLVxcdTAwM2V1bmhhc2hlZFxcbiAzMTU6XFx0XFx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXFxuIDMxNjpcXHRcXHQgKiBmaXJzdCAoZS5nLiB2aWEgc21jX2Nvbm5fa2lsbCgpKS5cXG4gMzE3OlxcdFxcdCAqL1xcbiAzMTg6XFx0XFx0aWYgKHNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKVxcbiAzMTk6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZXVuaGFzaChzayk7XFxuIDMyMDpcXHRcXHRlbHNlXFxuIDMyMTpcXHRcXHRcXHRzbWNfY29ubl91bmhhc2goXFx1MDAyNnNtYy1cXHUwMDNlY29ubik7XFxuIDMyMjpcXHRcXG4gMzIzOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gU01DX0NMT1NFRCkge1xcbiAzMjQ6XFx0XFx0XFx0aWYgKHNtYy1cXHUwMDNlY2xjc29jaykge1xcbiAzMjU6XFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gMzI2OlxcdFxcdFxcdFxcdHNtY19jbGNzb2NrX3JlbGVhc2Uoc21jKTtcXG4gMzI3OlxcdFxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuIDMyODpcXHRcXHRcXHR9XFxuIDMyOTpcXHRcXHRcXHRpZiAoIXNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKVxcbiAzMzA6XFx0XFx0XFx0XFx0c21jX2Nvbm5fZnJlZShcXHUwMDI2c21jLVxcdTAwM2Vjb25uKTtcXG4gMzMxOlxcdFxcdH1cXG4gMzMyOlxcdFxcbiAzMzM6XFx0XFx0cmV0dXJuIHJjO1xcbiAzMzQ6XFx0fVxcbiAzMzU6XFx0XFxuIDMzNjpcXHRpbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4gMzM3OlxcdHtcXG4gMzM4OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiAzMzk6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWM7XFxuIDM0MDpcXHRcXHRpbnQgb2xkX3N0YXRlLCByYyA9IDA7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdGlmICghc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjUyLjY0MTE1ODI5NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTE2MjYxNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGBzbWNfY29ubl9mcmVlYCBmdW5jdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gYHNtY19jb25uX2ZyZWVgKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCBgc21jX2Nvbm5fZnJlZWAuIFdlJ3JlIGluIGBuZXQvc21jL3NtY19jb3JlLmNgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgbG9naWMgb2YgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucyBvdmVyIFJETUEuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24ncyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGFuIFNNQyBjb25uZWN0aW9uIOKAkyBwcmV0dHkgc3RhbmRhcmQgc3R1ZmYuIEkgZXhwZWN0IGl0J2xsIGhhbmRsZSB0aGluZ3MgbGlrZSBjbGVhbmluZyB1cCBtZW1vcnkgYnVmZmVycywgY2xvc2luZyBzb2NrZXRzLCBhbmQgcG90ZW50aWFsbHkgbm90aWZ5aW5nIHRoZSByZW1vdGUgcGVlciBhYm91dCB0aGUgY29ubmVjdGlvbiB0ZXJtaW5hdGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBTTUMsIEknbSBhbnRpY2lwYXRpbmcgdGhlcmUgd2lsbCBiZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZCwgcHJvYmFibHkgc3BpbmxvY2tzIG9yIG11dGV4ZXMsIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdGhlIHRlYXJkb3duIHByb2Nlc3MuIFRoZSBjaGFsbGVuZ2Ugd2l0aCBTTUMgaXMgYWx3YXlzIG1hbmFnaW5nIHNoYXJlZCBtZW1vcnkgc2FmZWx5LCBzbyBJJ20ga2VlbiB0byBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGF0IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGFzc2VzcyB0aGUgZ2VuZXJhbCByb2J1c3RuZXNzIG9mIHRoZSBjbGVhbnVwIHByb2NlZHVyZS4gSSBhbHNvIHdvbmRlciBhYm91dCBpdHMgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBTTUMgY29tcG9uZW50czsgYXJlIHRoZXJlIGNhbGxiYWNrcyBvciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG1vZHVsZT8gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTcyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo1NS4xNTc0MjI5MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjU1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjU1OlxcdCAqIEV2ZXJ5IGNhbGxlciBob2xkcyBsb2NrX3NvY2sgZm9yIHRoaXMgc29ja2V0LCBzbyBjb25uLVxcdTAwM2V1bmhhc2hlZCBpcyBwcm90ZWN0ZWRcXG4xMjU2OlxcdCAqIGJ5IHRoYXQgbG9jayBhbmQgbm8gc2VwYXJhdGUgc3luY2hyb25pc2F0aW9uIGlzIG5lZWRlZC5cXG4xMjU3OlxcdCAqL1xcbjEyNTg6XFx0dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbjEyNTk6XFx0e1xcbjEyNjA6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG4xMjYxOlxcdFxcbjEyNjI6XFx0XFx0aWYgKCFjb25uLVxcdTAwM2V1bmhhc2hlZCkge1xcbjEyNjM6XFx0XFx0XFx0Y29ubi1cXHUwMDNldW5oYXNoZWQgPSAxO1xcbjEyNjQ6XFx0XFx0XFx0c21jLVxcdTAwM2Vzay5za19wcm90LVxcdTAwM2V1bmhhc2goXFx1MDAyNnNtYy1cXHUwMDNlc2spO1xcbjEyNjU6XFx0XFx0fVxcbjEyNjY6XFx0fVxcbjEyNjc6XFx0XFxuMTI2ODpcXHQvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG4xMjY5OlxcdHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuMTI3MDpcXHR7XFxuMTI3MTpcXHRcXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGNvbm4tXFx1MDAzZWxncjtcXG4xMjcyOlxcdFxcbjEyNzM6XFx0XFx0aWYgKCFsZ3IgfHwgY29ubi1cXHUwMDNlZnJlZWQpXFxuMTI3NDpcXHRcXHRcXHQvKiBDb25uZWN0aW9uIGhhcyBuZXZlciBiZWVuIHJlZ2lzdGVyZWQgaW4gYVxcbjEyNzU6XFx0XFx0XFx0ICogbGluayBncm91cCwgb3IgaGFzIGFscmVhZHkgYmVlbiBmcmVlZC5cXG4xMjc2OlxcdFxcdFxcdCAqL1xcbjEyNzc6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNzg6XFx0XFxuMTI3OTpcXHRcXHRjb25uLVxcdTAwM2VmcmVlZCA9IDE7XFxuMTI4MDpcXHRcXHQvKiBVbmhhc2ggYmVmb3JlIGRyb3BwaW5nIGxnci9sbmsgcmVmcyBzbyB0aGUgZGlhZyByZWFkZXIsIHdoaWNoXFxuMTI4MTpcXHRcXHQgKiBpdGVyYXRlcyB1bmRlciB0aGUgc29ja2V0IGhhc2ggcmVhZF9sb2NrLCBjYW5ub3Qgc2VlIGEgY29ubmVjdGlvbiB3aG9zZVxcbjEyODI6XFx0XFx0ICogbGdyIG9yIGxuayBpcyBiZWluZyBmcmVlZCBjb25jdXJyZW50bHkuXFxuMTI4MzpcXHRcXHQgKi9cXG4xMjg0OlxcdFxcdHNtY19jb25uX3VuaGFzaChjb25uKTtcXG4xMjg1OlxcdFxcdGlmICghc21jX2Nvbm5fbGdyX3ZhbGlkKGNvbm4pKVxcbjEyODY6XFx0XFx0XFx0LyogQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZnJvbVxcbjEyODc6XFx0XFx0XFx0ICogbGluayBncm91cC5cXG4xMjg4OlxcdFxcdFxcdCAqL1xcbjEyODk6XFx0XFx0XFx0Z290byBsZ3JfcHV0O1xcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRpZiAobGdyLVxcdTAwM2Vpc19zbWNkKSB7XFxuMTI5MjpcXHRcXHRcXHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XFxuMTI5MzpcXHRcXHRcXHR0YXNrbGV0X2tpbGwoXFx1MDAyNmNvbm4tXFx1MDAzZXJ4X3Rza2xldCk7XFxuMTI5NDpcXHRcXHRcXHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkobGdyLVxcdTAwM2VzbWNkKSlcXG4xMjk1OlxcdFxcdFxcdFxcdHNtY2RfYnVmX2RldGFjaChjb25uKTtcXG4xMjk2OlxcdFxcdH0gZWxzZSB7XFxuMTI5NzpcXHRcXHRcXHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcXG4xMjk4OlxcdFxcdFxcdGlmIChjdXJyZW50X3dvcmsoKSAhPSBcXHUwMDI2Y29ubi1cXHUwMDNlYWJvcnRfd29yaylcXG4xMjk5OlxcdFxcdFxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo1NS4xNTc1NTQzNjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzMTU3NTM1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBHYW1lIFBsYW46IFNNQyBQcm90b2NvbCoqXG5cbkFscmlnaHQsIHRoaXMgbG9va3MgcHJvbWlzaW5nLCBkZWZpbml0ZWx5IGZ1enotd29ydGh5LiBNeSBndXQgdGVsbHMgbWUgdGhpcyBgbmV0L3NtYy9gIGNvZGUgaXMgcmlwZSBmb3IgYSBnb29kLCBoYXJkIGZ1enppbmcgc2Vzc2lvbi4gVGhlIFNNQyBwcm90b2NvbCB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgaW4gbXkgc2lnaHRzLiBIZXJlJ3Mgd2h5OlxuXG5GaXJzdCwgaXTigJlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiBJIGNhbiBsZXZlcmFnZSBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucyDigJMgYHNvY2tldChBRl9TTUMsIC4uLilgLCBgY29ubmVjdGAsIGBsaXN0ZW5gLCBgYWNjZXB0YCwgYGNsb3NlYCDigJMgdGhlIHdob2xlIHNoZWJhbmcuIEFuZCBkb24ndCBmb3JnZXQgdGhlIHNvY2tldCBtb25pdG9yaW5nIG5ldGxpbmsgcmVxdWVzdHMgKFNNQ19ESUFHKSwgdGhhdCdzIGFuIGF0dGFjayB2ZWN0b3IgSSBjYW4gcGxheSB3aXRoLlxuXG5TZWNvbmQsIHRoZSBjb2RlIHRvdWNoZXMgY3J1Y2lhbCBhcmVhczogaXTigJlzIG1vZGlmeWluZyB0aGUgc29ja2V0IHVuaGFzaGluZyBsaWZlY3ljbGUsIGRlYWxpbmcgd2l0aCBzeW5jaHJvbml6YXRpb24sIGFuZCBtYW5hZ2luZyB0aGUgc3RhdGUgZmxhZ3Mgd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYCDigJMgc3BlY2lmaWNhbGx5IGBjb25uLVx1MDAzZXVuaGFzaGVkYC4gYHNtY19jb25uX3VuaGFzaGAgZ2V0cyBjYWxsZWQgZHVyaW5nIGBzbWNfY29ubl9mcmVlYCBhbmQgYF9fc21jX3JlbGVhc2VgLCB3aGljaCBpcyB3aGVyZSBteSBpbnRlcmVzdCBwZWFrcyEgVGhpcyBzY3JlYW1zIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBmaXggb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgaXNzdWUgZm9yIHRoZSBzb2NrZXQgaGFzaCB0YWJsZSBhbmQgZGlhZ25vc3RpYyByZWFkZXIuIENvbmN1cnJlbnQgY2FsbHMgdG8gYGNsb3NlYCwgYHJlbGVhc2VgLCBgYWJvcnRgLCBhbmQgYHNvY2tfZGlhZ2Agd2lsbCBiZSB0aGUga2V5IHRvIHVubG9ja2luZyBhbnkgaGlkZGVuIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQ6XG5cbjEuICBgU01DYCAod2hpY2gsIGZyb20gbG9va2luZyBhdCBgbmV0L3NtYy9LY29uZmlnYCwgZGVwZW5kcyBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYCkgaXMgZW5hYmxlZC5cbjIuICBgU01DX0RJQUdgIGlzIGVuYWJsZWQuXG4zLiAgYElORVRgIChlc3NlbnRpYWwgZm9yIG5ldHdvcmtpbmcsIG9mIGNvdXJzZSlcbjQuICBgSU5GSU5JQkFORGAgKHJlcXVpcmVkIGZvciBoYXJkd2FyZSBzdXBwb3J0KVxuNS4gIGBESUJTYCAoRGlyZWN0IEludGVyZmFjZSBiZXR3ZWVuIEJ1cyBhbmQgU29ja2V0KVxuNi4gIEFuZCBzaW5jZSBJIGxpa2UgdG8gY292ZXIgYWxsIHRoZSBiYXNlcywgSSdsbCBkb3VibGUgY2hlY2sgdGhhdCBgRElCU19MT2AgaXMgZW5hYmxlZCB0b28sIGp1c3QgaW4gY2FzZSwgaXTigJlzIHRoZSBzb2Z0d2FyZSBsb29wYmFjayBvcHRpb24uXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgU01DLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudDsgSSBkb27igJl0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgZnV6emluZy4gVGltZSB0byBkaXZlIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk5NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjA1LjQ3MzMxMDMwMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMjQ5NDQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU01DfGNvbmZpZyBJTkZJTklCQU5EfGNvbmZpZyBESUJTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc9MTQ2PWNvbmZpZyBJMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0hcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTUwLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc6MTUxOmNvbmZpZyBTTUNfVUNPREVfUEFUQ0hcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnLTE1Mi1cXHRib29sIFxcXCJTTUMgcmVsb2NhdGlvbiBwYXRjaFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyOm1lbnVjb25maWcgSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE2PWlmIElORklOSUJBTkRcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0xNy1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoxODpjb25maWcgSU5GSU5JQkFORF9VU0VSX01BRFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHVzZXJzcGFjZSBNQUQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTI3LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTM5LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQwOmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTX0NPUkVcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00MS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00My1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0NDpjb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQ1LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUwLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjUxOmNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cXHRib29sIFxcXCJJbmZpbmlCYW5kIG9uLWRlbWFuZCBwYWdpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTYzLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02NS1cXHRib29sIFxcXCJSRE1BL0NNXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NzI6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU19DT05GSUdGU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTczLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTgwLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjgxOmNvbmZpZyBJTkZJTklCQU5EX1ZJUlRfRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctODItXFx0ZGVmX2Jvb2wgIUhJR0hNRU1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0JOR19SRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXh0IGdlbmVyYXRpb24gUm9DRSBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5YVF9SRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gTmV0eHRyZW1lIEhDQSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0NYR0I0XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ2hlbHNpbyBUNC9UNSBSRE1BIERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZy02LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX0VGQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJBbWF6b24gRWxhc3RpYyBGYWJyaWMgQWRhcHRlciAoRUZBKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0VSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQWxpYmFiYSBFbGFzdGljIFJETUEgQWRhcHRlciAoRVJETUEpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0hGSTFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkNvcm5lbGlzIE9QWCBHZW4xIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9ITlNfSElQMDhcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSGlzaWxpY29uIEhpcDA4IEZhbWlseSBSb0NFIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvS2NvbmZpZy0zLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnOjQ6Y29uZmlnIElORklOSUJBTkRfSU9OSUNcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJBTUQgUGVuc2FuZG8gRFNDIFJETUEvUm9DRSBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0lSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwoUikgRXRoZXJuZXQgUHJvdG9jb2wgRHJpdmVyIGZvciBSRE1BXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX01USENBXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWVsbGFub3ggSENBIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy05LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjEwOmNvbmZpZyBJTkZJTklCQU5EX01USENBX0RFQlVHXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMTEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX09DUkRNQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJFbXVsZXggT25lIENvbm5lY3QgSENBIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3FlZHIvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1FFRFJcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlFMb2dpYyBSb0NFIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9VU05JQ1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlZlcmJzIHN1cHBvcnQgZm9yIENpc2NvIFZJQ1xcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdm13X3B2cmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfVk1XQVJFX1BWUkRNQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVk13YXJlIFBhcmF2aXJ0dWFsaXplZCBSRE1BIERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1JETUFWVFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJSRE1BIHZlcmJzIHRyYW5zcG9ydCBsaWJyYXJ5XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSVAtb3Zlci1JbmZpbmlCYW5kXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTExLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZzoxMjpjb25maWcgSU5GSU5JQkFORF9JUE9JQl9DTVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0xMy1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgQ29ubmVjdGVkIE1vZGUgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0yNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjc6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiSVAtb3Zlci1JbmZpbmlCYW5kIGRlYnVnZ2luZ1xcXCIgaWYgRVhQRVJUXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctNDEtXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjQyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEFcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiSVAtb3Zlci1JbmZpbmlCYW5kIGRhdGEgcGF0aCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVNFUlxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcImlTQ1NJIEV4dGVuc2lvbnMgZm9yIFJETUEgKGlTRVIpXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVNFUlRcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiaVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUikgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0yLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjM6Y29uZmlnIElORklOSUJBTkRfUlRSU1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTQtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTYtXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9SVFJTX0NMSUVOVFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTgtXFx0dHJpc3RhdGUgXFxcIlJUUlMgY2xpZW50IG1vZHVsZVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTE3LVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIlJUUlMgc2VydmVyIG1vZHVsZVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfU1JQXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIFNDU0kgUkRNQSBQcm90b2NvbFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBUXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCBTQ1NJIFJETUEgUHJvdG9jb2wgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9TTVNDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZzoyMjpjb25maWcgU01DOTFYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJTTUMgOTFDOXgvOTFDMXh4eCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOTowOC40MDU4MTEwNzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1MjM5MDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byBTb2Z0d2FyZSBSRE1BKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgb2YgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChSRE1BKS4gVGhhdCBtYWtlcyBzZW5zZSDigJMgd2UncmUgZXhwbG9yaW5nIGFsdGVybmF0aXZlIHBhdGhzLCBsaWtlbHkgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBwb3J0YWJpbGl0eSwgb3IgbWF5YmUgZXZlbiBpbiBlbnZpcm9ubWVudHMgd2hlcmUgaGFyZHdhcmUgUkRNQSBpc24ndCBhdmFpbGFibGUgb3IgcHJhY3RpY2FsLiBOb3csIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoIGtub3duIG5hbWVzIGluIHRoZSBmaWVsZCwgc28gbGV0J3MgbWFrZSBzdXJlIHdlIGV4YW1pbmUgYFJETUFfUlhFYCB0b28uIEl0J3MgY3J1Y2lhbCB0byBjb3ZlciB0aGF0IGdyb3VuZCB0byBlbnN1cmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBJIHdhbnQgdG8gbGVhdmUgbm8gc3RvbmUgdW50dXJuZWQgaW4gdGhpcyBhbmFseXNpcywgYW5kIHRoYXQgaW5jbHVkZXMgYW55IHJlbGV2YW50IHNvZnR3YXJlIGFwcHJvYWNoZXMuIFRoaXMgd2lsbCBoZWxwIGVuc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyMzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOToxMS43NTgyMDUwNTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDgwNTA3MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJETUFfUlhFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZzoyOmNvbmZpZyBSRE1BX1JYRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MTMuNTY2MjYwNDA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyOTMyNzM1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBTb2NrZXQgTG9naWMgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBvZiB0aGlzIGNoYW5nZS4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYEZvY3VzU3ltYm9sc2Ag4oCTIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGFyZSBpbXBsZW1lbnRpbmcgdGhpcyBuZXcgZmVhdHVyZSByZWxhdGVkIHRvIFNNQyBzb2NrZXRzLiBMb29raW5nIHRocm91Z2ggdGhlIHByb3ZpZGVkIGxpc3QsIGl0J3MgY2xlYXI6XG5cbjEuICBgc21jX2Nvbm5fdW5oYXNoYDogVGhpcyBpcyBhICpuZXcqIGZ1bmN0aW9uLiBUaGF0J3MgYSBrZXkgaW5kaWNhdG9yIG9mIGZ1bmN0aW9uYWxpdHkgaW50cm9kdWN0aW9uLiBMb2NhdGVkIGluIGBuZXQvc21jL3NtY19jb3JlLmNgLlxuMi4gIGBzbWNfY29ubl9mcmVlYDogSXQncyBiZWVuIG1vZGlmaWVkIHRvICpjYWxsKiBgc21jX2Nvbm5fdW5oYXNoYCwgc28gdGhpcyBsaWtlbHkgaXMgaW50ZWdyYWwgdG8gdGhlIGNsZWFudXAuIEFsc28gaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuXG4zLiAgYF9fc21jX3JlbGVhc2VgOiBUaGlzIGZ1bmN0aW9uLCBsb2NhdGVkIGluIGBuZXQvc21jL2FmX3NtYy5jYCwgYWxzbyBjYWxscyBgc21jX2Nvbm5fdW5oYXNoYCwgaW1wbHlpbmcgaXQncyBwYXJ0IG9mIHRoZSByZWxlYXNlIHBhdGguXG40LiAgYHNtY19jb25uX2NyZWF0ZWA6IFRoaXMgbm93IGluaXRpYWxpemVzIGBjb25uLVx1MDAzZXVuaGFzaGVkYC4gVGhhdCdzIGFuIGluaXRpYWxpemF0aW9uLCBpbmRpY2F0aW5nIHRoYXQgYSBuZXcgY29ubmVjdGlvbiBpcyBiZWluZyBtYW5hZ2VkIGluIGEgbmV3IHdheS4gTG9jYXRlZCBpbiBgbmV0L3NtYy9zbWNfY29yZS5jYC5cbjUuICBgc21jX3VuaGFzaF9za2A6IFRoZSBhY3R1YWwgdW5kZXJseWluZyB1bmhhc2ggaW1wbGVtZW50YXRpb24uIEl0J3MgaW4gYG5ldC9zbWMvYWZfc21jLmNgLlxuNi4gIGBzbWNfcmVsZWFzZWA6IFRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBzb2NrZXQgcmVsZWFzZSBhbmQgaXMgaW4gYG5ldC9zbWMvYWZfc21jLmNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byB0cmlnZ2VyIHRoaXMgbG9naWMuIFRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uIGxpc3QgLSBgU01DYCwgYFNNQ19ESUFHYCwgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgSU5GSU5JQkFORGAgLSBzZWVtcyByZWFzb25hYmxlLiBUaGVzZSBjb3ZlciB0aGUgU01DIGFuZCBJbmZpbmliYW5kIHN1YnN5c3RlbXMsIHdoaWNoIG1ha2VzIHNlbnNlLlxuXG5Ob3cgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkga25vdyB0aGlzIGZlYXR1cmUgd2FycmFudHMgZnV6emluZywgc28gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHRydWUuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgYmUgY29uY2lzZSwgYW5kIGNsZWFybHkgYXJ0aWN1bGF0ZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgY29tcGxldGUgYXMgY29uZmlybWVkIGJ5IHRoZSBwcmV2aW91cyByZXZpZXcuIEZpbmFsbHksIEkndmUgZ290IG15IGBGb2N1c1N5bWJvbHNgIGxpc3QsIHdoaWNoIEkndmUgYWxyZWFkeSBzY3J1dGluaXplZC5cblxuQmVmb3JlIEkgY29tbWl0IHRvIGBzZXQtcmVzdWx0c2AsIEkgbmVlZCBhIGZpbmFsIHNhbml0eSBjaGVjay4gSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgZXhpc3QsIGFuZCB0aGF0IHRoZXkgYXJlIGFjdHVhbGx5IHNwZWNpZmljIHRvIFNNQy4gTG9va3MgZ29vZC4gVGhlc2UgYXJlIGFsbCAqdmVyeSogc3BlY2lmaWMgc29ja2V0IGZ1bmN0aW9ucy4gSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUzNCwiT3V0cHV0VG9rZW5zIjoxOTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MTguODU5NTM2NTQ4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NzY0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiU01DX0RJQUdcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfY29ubl91bmhhc2hcIixcbiAgICBcInNtY19jb25uX2ZyZWVcIixcbiAgICBcIl9fc21jX3JlbGVhc2VcIixcbiAgICBcInNtY19jb25uX2NyZWF0ZVwiLFxuICAgIFwic21jX3VuaGFzaF9za1wiLFxuICAgIFwic21jX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGhhc2ggbWFuYWdlbWVudCBhbmQgbGluayBncm91cCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgaW4gdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuIEl0IGludHJvZHVjZXMgc21jX2Nvbm5fdW5oYXNoKCkgd2l0aCBhIG5ldyBjb25uLVxcdTAwM2V1bmhhc2hlZCBmbGFnIHRvIGVuc3VyZSBub24tZmFsbGJhY2sgU01DIHNvY2tldHMgYXJlIHVuaGFzaGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgbGluayBncm91cC9saW5rIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIHdpdGggc29ja2V0IGRpYWdub3N0aWMgZHVtcHMuIFRoZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgbmV0d29ya2luZyBzb2NrZXQgYW5kIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBjb2RlIGFjY2Vzc2libGUgdmlhIHVzZXItc3BhY2Ugc29ja2V0IGFuZCBzb2NrX2RpYWcgaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIixcbiAgICBcIlNNQ19ESUFHXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2Nvbm5fdW5oYXNoXCIsXG4gICAgXCJzbWNfY29ubl9mcmVlXCIsXG4gICAgXCJfX3NtY19yZWxlYXNlXCIsXG4gICAgXCJzbWNfY29ubl9jcmVhdGVcIixcbiAgICBcInNtY191bmhhc2hfc2tcIixcbiAgICBcInNtY19yZWxlYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHNvY2tldCBoYXNoIG1hbmFnZW1lbnQgYW5kIGxpbmsgZ3JvdXAgZGVzdHJ1Y3Rpb24gbGlmZWN5Y2xlIGluIHRoZSBTTUMgcHJvdG9jb2wgZmFtaWx5LiBJdCBpbnRyb2R1Y2VzIHNtY19jb25uX3VuaGFzaCgpIHdpdGggYSBuZXcgY29ubi1cXHUwMDNldW5oYXNoZWQgZmxhZyB0byBlbnN1cmUgbm9uLWZhbGxiYWNrIFNNQyBzb2NrZXRzIGFyZSB1bmhhc2hlZCBleGFjdGx5IG9uY2UgYmVmb3JlIGxpbmsgZ3JvdXAvbGluayByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyB3aXRoIHNvY2tldCBkaWFnbm9zdGljIGR1bXBzLiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGFuZCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgY29kZSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIHNvY2tldCBhbmQgc29ja19kaWFnIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjE4LjkzNTIyMDE3N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4Njc0MjE4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOToxOC45MzU4MDQ3MTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODg2NjgzMTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBzb2NrZXQgdGVhcmRvd24gKHNtY19jb25uX2ZyZWUpIGFuZCBzb2NrZXQgZGlhZ25vc3RpY3MgKHNtY19kaWFnKSBieSB1bmhhc2hpbmcgdGhlIHNvY2tldCBlYXJsaWVyIGFuZCB0cmFja2luZyB0aGUgdW5oYXNoIHN0YXRlIHZpYSBhIG5ldyBgdW5oYXNoZWRgIGZsYWcgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuXFxuXFxuMS4gVGhlIG5ldyBgdW5oYXNoZWRgIGZpZWxkIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgc21jX3NvY2tgIHZpYSBgc2tfYWxsb2MoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkpIGFuZCBpcyBleHBsaWNpdGx5IHJlc2V0IHRvIDAgaW4gYHNtY19jb25uX2NyZWF0ZSgpYC5cXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxcbjMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgc3RydWN0dXJlcyAoc3VjaCBhcyBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBzdHJ1Y3R1cmVzKSBoYXZlIGhhZCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGludHJvZHVjZWQuXFxuNC4gVGhlIHJhY2UgY29uZGl0aW9uIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUCwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjg2NjliZjJiMDRmYjA5NzAxZmY1ZTRmYmUwYWZjZGMwNjAyMDIzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTA6MTg6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL2FmX3NtYy5jIGIvbmV0L3NtYy9hZl9zbWMuY1xuaW5kZXggZTlmOTNiM2FiNDM1Yi4uOGM3ODFhNGE0NDg1YiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvYWZfc21jLmNcbisrKyBiL25ldC9zbWMvYWZfc21jLmNcbkBAIC0zMTAsNyArMzEwLDE1IEBAIHN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiBcdFx0c21jX3Jlc3RvcmVfZmFsbGJhY2tfY2hhbmdlcyhzbWMpO1xuIFx0fVxuIFxuLVx0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spO1xuK1x0LyogRmFsbGJhY2sgc29ja2V0cyBuZXZlciBjYWxsIHNtY19jb25uX2ZyZWUoKSwgc28gdW5oYXNoIGRpcmVjdGx5LlxuK1x0ICogTm9uLWZhbGxiYWNrIHNvY2tldHMgdXNlIHNtY19jb25uX3VuaGFzaCgpIHNvIHRoYXQgdGhlIGNvbm4tXHUwMDNldW5oYXNoZWRcbitcdCAqIGZsYWcga2VlcHMgdGhlIHVuaGFzaCBleGFjdGx5IG9uY2UgZXZlbiB3aGVuIHNtY19jb25uX2ZyZWUoKSBhbHJlYWR5IHJhblxuK1x0ICogZmlyc3QgKGUuZy4gdmlhIHNtY19jb25uX2tpbGwoKSkuXG4rXHQgKi9cbitcdGlmIChzbWMtXHUwMDNldXNlX2ZhbGxiYWNrKVxuK1x0XHRzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzayk7XG4rXHRlbHNlXG4rXHRcdHNtY19jb25uX3VuaGFzaChcdTAwMjZzbWMtXHUwMDNlY29ubik7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gU01DX0NMT1NFRCkge1xuIFx0XHRpZiAoc21jLVx1MDAzZWNsY3NvY2spIHtcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaFxuaW5kZXggNDI3YjZkNjNiOTkzMS4uMDc1MzEyMjc4ODM1YyAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jLmhcbisrKyBiL25ldC9zbWMvc21jLmhcbkBAIC0yNzksNiArMjc5LDcgQEAgc3RydWN0IHNtY19jb25uZWN0aW9uIHtcbiBcdHU2NFx0XHRcdHBlZXJfdG9rZW47XHQvKiBTTUMtRCB0b2tlbiBvZiBwZWVyICovXG4gXHR1OFx0XHRcdGtpbGxlZDtcdFx0LyogYWJub3JtYWwgdGVybWluYXRpb24gKi9cbiBcdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuK1x0dThcdFx0XHR1bmhhc2hlZDtcdC8qIHJlbW92ZWQgZnJvbSBzb2NrIGhhc2ggKi9cbiBcdHU4XHRcdFx0b3V0X29mX3N5bmM7XHQvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi9cbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuY1xuaW5kZXggMDRhZWRkOTU3NTQzYS4uZTMwMjIyMWMzNWUzZiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuY1xuKysrIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5AQCAtMTI1MSw2ICsxMjUxLDIwIEBAIHN0YXRpYyB2b2lkIHNtY19idWZfdW51c2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuIFx0fVxuIH1cbiBcbisvKiB1bmhhc2ggdGhlIHNvY2tldCBvbmNlOyBvd25zIHRoZSBzaW5nbGUgdW5oYXNoIGZvciBhbGwgbm9uLWZhbGxiYWNrIHBhdGhzLlxuKyAqIEV2ZXJ5IGNhbGxlciBob2xkcyBsb2NrX3NvY2sgZm9yIHRoaXMgc29ja2V0LCBzbyBjb25uLVx1MDAzZXVuaGFzaGVkIGlzIHByb3RlY3RlZFxuKyAqIGJ5IHRoYXQgbG9jayBhbmQgbm8gc2VwYXJhdGUgc3luY2hyb25pc2F0aW9uIGlzIG5lZWRlZC5cbisgKi9cbit2b2lkIHNtY19jb25uX3VuaGFzaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4re1xuK1x0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbitcbitcdGlmICghY29ubi1cdTAwM2V1bmhhc2hlZCkge1xuK1x0XHRjb25uLVx1MDAzZXVuaGFzaGVkID0gMTtcbitcdFx0c21jLVx1MDAzZXNrLnNrX3Byb3QtXHUwMDNldW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4rXHR9XG4rfVxuK1xuIC8qIHJlbW92ZSBhIGZpbmlzaGVkIGNvbm5lY3Rpb24gZnJvbSBpdHMgbGluayBncm91cCAqL1xuIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuQEAgLTEyNjMsNiArMTI3NywxMSBAQCB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRjb25uLVx1MDAzZWZyZWVkID0gMTtcbitcdC8qIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgbGdyL2xuayByZWZzIHNvIHRoZSBkaWFnIHJlYWRlciwgd2hpY2hcbitcdCAqIGl0ZXJhdGVzIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCByZWFkX2xvY2ssIGNhbm5vdCBzZWUgYSBjb25uZWN0aW9uIHdob3NlXG4rXHQgKiBsZ3Igb3IgbG5rIGlzIGJlaW5nIGZyZWVkIGNvbmN1cnJlbnRseS5cbitcdCAqL1xuK1x0c21jX2Nvbm5fdW5oYXNoKGNvbm4pO1xuIFx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXG4gXHRcdC8qIENvbm5lY3Rpb24gaGFzIGFscmVhZHkgdW5yZWdpc3RlcmVkIGZyb21cbiBcdFx0ICogbGluayBncm91cC5cbkBAIC0yMDUzLDYgKzIwNzIsNyBAQCBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuIFx0aWYgKCFjb25uLVx1MDAzZWxnci1cdTAwM2Vpc19zbWNkKVxuIFx0XHRzbWNyX2xpbmtfaG9sZChjb25uLVx1MDAzZWxuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xuIFx0Y29ubi1cdTAwM2VmcmVlZCA9IDA7XG4rXHRjb25uLVx1MDAzZXVuaGFzaGVkID0gMDtcbiBcdGNvbm4tXHUwMDNlbG9jYWxfdHhfY3RybC5jb21tb24udHlwZSA9IFNNQ19DRENfTVNHX1RZUEU7XG4gXHRjb25uLVx1MDAzZWxvY2FsX3R4X2N0cmwubGVuID0gU01DX1dSX1RYX1NJWkU7XG4gXHRjb25uLVx1MDAzZXVyZ19zdGF0ZSA9IFNNQ19VUkdfUkVBRDtcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmggYi9uZXQvc21jL3NtY19jb3JlLmhcbmluZGV4IDVjMThmMDhhNGM4YTUuLmYyM2Q2MGFlZjBiNzkgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmhcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuaFxuQEAgLTU5NSw2ICs1OTUsNyBAQCB2b2lkIHNtY19zbmRidWZfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG4gdm9pZCBzbWNfcm1iX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIGludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbiBcbit2b2lkIHNtY19jb25uX3VuaGFzaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xuIGludCBzbWNfY29yZV9pbml0KHZvaWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MTguOTM1ODA2MzE3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNDE5Mjc3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBTb2NrZXQgVW5oYXNoaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgdGhlIHVuaGFzaGluZyBvZiBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHNvY2tldHMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIExldCdzIGJyZWFrIGRvd24gbXkgdW5kZXJzdGFuZGluZy4gRmlyc3QsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gY2VudGVyIGFyb3VuZCBhIG5ldyBmaWVsZCwgYHVuaGFzaGVkYCwgd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWVsZCBpcyB0byB0cmFjayB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdW5oYXNoZWQsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgcHJldmVudGluZyBkb3VibGUgdW5oYXNoaW5nLlxuXG5Mb29raW5nIGF0IGBfX3NtY19yZWxlYXNlYCwgdGhlIGxvZ2ljIGlzIG5vdyBjb25kaXRpb25hbCBiYXNlZCBvbiB0aGUgYHVzZV9mYWxsYmFja2AgZmxhZy4gSWYgaXQncyBzZXQsIHRoZSBzdGFuZGFyZCBzb2NrZXQgdW5oYXNoIGlzIHVzZWQsIGFuZCBpdCBtYWtlcyBzZW5zZSB0aGF0IGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzaylgIGlzIGNhbGxlZC4gQnV0IGlmIHdlICphcmVuJ3QqIHVzaW5nIHRoZSBmYWxsYmFjaywgdGhlIHBhdGggZm9yIHVuaGFzaGluZyBiZWNvbWVzIGBzbWNfY29ubl91bmhhc2goXHUwMDI2c21jLVx1MDAzZWNvbm4pYC5cblxuVGhlIGNydWNpYWwgcGFydCBpcyB0aGVuIGBzbWNfY29ubl91bmhhc2hgLiBJdCBjaGVja3MgYCFjb25uLVx1MDAzZXVuaGFzaGVkYC4gVGhpcyBpcyB0aGUgc2FmZWd1YXJkLCBlbnN1cmluZyB0aGF0IHRoZSBmdW5jdGlvbiBvbmx5IGV4ZWN1dGVzIG9uY2UuIEl0IHNldHMgYGNvbm4tXHUwMDNldW5oYXNoZWQgPSAxYCB0byBtYXJrIHRoZSBjb25uZWN0aW9uIGFzIHVuaGFzaGVkIGFuZCB0aGVuIHByb2NlZWRzIHRvIHVuaGFzaCB0aGUgdW5kZXJseWluZyBzb2NrZXQgdmlhIGBzbWMtXHUwMDNlc2suc2tfcHJvdC1cdTAwM2V1bmhhc2goXHUwMDI2c21jLVx1MDAzZXNrKWAuXG5cbkluIGBzbWNfY29ubl9mcmVlKClgLCBpdCBhcHBlYXJzIHRoYXQgYHNtY19jb25uX3VuaGFzaChjb25uKWAgaXMgY2FsbGVkICpiZWZvcmUqIHJlbGVhc2luZyB0aGUgbG9naWNhbCBncm91cCBhbmQgbGluayByZWZlcmVuY2VzLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXRhaWwgZm9yIGVuc3VyaW5nIGNsZWFudXAuIEZpbmFsbHksIGBzbWNfY29ubl9jcmVhdGUoKWAgaW5pdGlhbGl6ZXMgYGNvbm4tXHUwMDNldW5oYXNoZWQgPSAwYCwgYXMgZXhwZWN0ZWQuIFRoaXMgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgY2xlYW4sIGZpcnN0LXRpbWUgdW5oYXNoLlxuXG5UbyByZWluZm9yY2UgbXkgdW5kZXJzdGFuZGluZywgSSdsbCBkcmlsbCBkb3duIHRvIHNlZSB3aGVyZSBgY29ubmAgaXMgYWxsb2NhdGVkLiBJIHJlY2FsbCB0aGF0IGBjb25uYCBpcyBlbWJlZGRlZCBpbnNpZGUgdGhlIGBzdHJ1Y3Qgc21jX3NvY2tgLiBXaGVuIGFuIFNNQyBzb2NrZXQgaXMgYWxsb2NhdGVkLCB2aWEgZWl0aGVyIGBzbWNfc29ja19hbGxvY2Agb3IgYHNtY19jcmVhdGVgLCB0aGUgd2hvbGUgYHNtY19zb2NrYCBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBgY29ubmAsIGlzIGFsbG9jYXRlZCBhdCBvbmNlLlxuXG5UbyBkb3VibGUtY2hlY2sgdGhlIGFsbG9jYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBhbnl0aGluZyBJIG1pZ2h0IGJlIG1pc3NpbmcsIEknbGwgbGV2ZXJhZ2UgbXkgcHJlZmVycmVkIHRvb2xzIChncmVwcGVyIGFuZC9vciBteSBmaWxlIHJlYWRpbmcgdXRpbGl0aWVzKSBhbmQgcGlucG9pbnQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MjYuOTc3NzM3MTI2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzcxODg4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MzM0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfc29ja19vcHMgPSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMzNjAtXFxubmV0L3NtYy9hZl9zbWMuYzozMzYxOmludCBzbWNfY3JlYXRlX2NsY3NrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBpbnQgZmFtaWx5KVxcbm5ldC9zbWMvYWZfc21jLmMtMzM2Mi17XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMzODAtXFxubmV0L3NtYy9hZl9zbWMuYzozMzgxOnN0YXRpYyBpbnQgc21jX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG5uZXQvc21jL2FmX3NtYy5jLTMzODItXFx0XFx0ICAgICAgaW50IGtlcm4pXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTM0MDItXFxubmV0L3NtYy9hZl9zbWMuYzozNDAzOlxcdHJjID0gc21jX2NyZWF0ZV9jbGNzayhuZXQsIHNrLCBmYW1pbHkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMzQwNC1cXHRpZiAocmMpIHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MzQxMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgc21jX3NvY2tfZmFtaWx5X29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzQxNC1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbm5ldC9zbWMvYWZfc21jLmM6MzQxNTpcXHQuY3JlYXRlXFx0PSBzbWNfY3JlYXRlLFxcbm5ldC9zbWMvYWZfc21jLmMtMzQxNi19O1xcbi0tXFxubmV0L3NtYy9zbWMuaD03MT12b2lkIHNtY19za19pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBpbnQgcHJvdG9jb2wpO1xcbm5ldC9zbWMvc21jLmgtNzItLyogY2xjc29jayBpbml0aWFsaXphdGlvbiAqL1xcbm5ldC9zbWMvc21jLmg6NzM6aW50IHNtY19jcmVhdGVfY2xjc2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHkpO1xcbm5ldC9zbWMvc21jLmgtNzQtXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MTEzPXN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMTktXFx0LyogY3JlYXRlIGNsY3NvY2sgKi9cXG5uZXQvc21jL3NtY19pbmV0LmM6MTIwOlxcdHJldHVybiBzbWNfY3JlYXRlX2NsY3NrKG5ldCwgc2ssIHNrLVxcdTAwM2Vza19mYW1pbHkpO1xcbm5ldC9zbWMvc21jX2luZXQuYy0xMjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOToyNy4yMTQ5MzE3NTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY2ODk2MDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFNvY2tldCBBbGxvY2F0aW9uIGluIFNNQyBDcmVhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBteSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBjcnVjaWFsIHNvY2tldCBhbGxvY2F0aW9uIHBvaW50cyB3aXRoaW4gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgc2V0dXAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBgc21jX3NvY2tfYWxsb2NgIG9yLCBhbHRlcm5hdGl2ZWx5LCB0aGUgbW9yZSBnZW5lcmljIGBza19hbGxvY2AgZnVuY3Rpb25zIGFzIHRoZXkncmUgdXRpbGl6ZWQgd2l0aGluIGJvdGggYHNtY19jcmVhdGVgIGFuZCBgc21jX3NrX2luaXRgLiBNeSBpbnRlbnRpb24gaXMgdG8gaW1tZWRpYXRlbHkgc2VlIGhvdyB0aGUgc3lzdGVtIGFsbG9jYXRlcyB0aGUgKmFjdHVhbCogc29ja2V0IG9iamVjdCB0aGF0IHdpbGwgdW5kZXJwaW4gdGhlIFNNQyBjb21tdW5pY2F0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgZGlmZmVyaW5nIGFsbG9jYXRpb24gcGF0aHMgZGVwZW5kaW5nIG9uIGNvbnRleHQsIGFuZCBpZiBzbywgaG93IHRob3NlIHBhdGhzIG1heSBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgcmVzb3VyY2UgdXRpbGl6YXRpb24uIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZmxhZ3Mgb3IgcGFyYW1ldGVycyBwYXNzZWQgZHVyaW5nIHNvY2tldCBhbGxvY2F0aW9uIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGUgU01DIGRvbWFpbj8gQXJlIHdlIGFsbG9jYXRpbmcgYSBzdGFuZGFyZCBzb2NrZXQgdGhlbiBtb2RpZnlpbmcgaXQsIG9yIGlzIGEgZGVkaWNhdGVkIFNNQy1hd2FyZSBzb2NrZXQgdHlwZSBiZWluZyBicm91Z2h0IGludG8gZXhpc3RlbmNlPyBHZXR0aW5nIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFsbG9jYXRpb24gZmxvdyBpcyBnb2luZyB0byBiZSBmb3VuZGF0aW9uYWwgZm9yIGRpYWdub3NpbmcgYW55IGlzc3VlcyBsYXRlciBvbjsgZXNwZWNpYWxseSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVyaW5nIHNvY2tldCBsaWZldGltZSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MjkuODgzODk1MTQyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIxODM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9NDI5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc21jX3NvY2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy00MzUtXFx0cHJvdCA9IChwcm90b2NvbCA9PSBTTUNQUk9UT19TTUM2KSA/IFxcdTAwMjZzbWNfcHJvdG82IDogXFx1MDAyNnNtY19wcm90bztcXG5uZXQvc21jL2FmX3NtYy5jOjQzNjpcXHRzayA9IHNrX2FsbG9jKG5ldCwgUEZfU01DLCBHRlBfS0VSTkVMLCBwcm90LCAwKTtcXG5uZXQvc21jL2FmX3NtYy5jLTQzNy1cXHRpZiAoIXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOToyOS45MzAxMTg5ODFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM3OTQxNjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgc21jX3NvY2tfYWxsb2NgIGZ1bmN0aW9uIGluIGBuZXQvc21jL2FmX3NtYy5jYDpcblxuKipBbmFseXppbmcgc21jX3NvY2tfYWxsb2MgaW4gbmV0L3NtYy9hZl9zbWMuYyoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgb3BlbmluZyB1cCB0aGUgYHNtY19zb2NrX2FsbG9jYCBmdW5jdGlvbiBpbiBgbmV0L3NtYy9hZl9zbWMuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBTTUMgc29ja2V0cyBhcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgYW5kIGNyZWF0ZWQuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIHRoYXQgdGhpcyBpcyB0aGUgcHJpbWFyeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGZvciB0aGUgU01DIHNvY2tldCBzdHJ1Y3R1cmUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgc2V0cyB1cCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGFueSBkZWZhdWx0IHZhbHVlcyBpdCB1c2VzLCBhbmQgd2hhdCBraW5kIG9mIGluaXRpYWwgY2hlY2tzIGl0J3MgcGVyZm9ybWluZy4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCB3aGV0aGVyIGl0J3MgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGttYWxsb2NgIGFuZCB3aGV0aGVyIGFueSBzcGVjaWZpYyBmbGFncyBhcmUgYmVpbmcgYXBwbGllZC4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc29ja2V0J3MgaW50ZXJuYWwgc3RhdGUgdmFyaWFibGVzLCB0aGUgc2V0dGluZyBvZiB0aGUgcHJvdG9jb2wgZmFtaWx5LCBhbmQgcG90ZW50aWFsbHkgYW55IHJlZ2lzdHJhdGlvbiBvciBsaW5raW5nIGludG8gdGhlIG92ZXJhbGwgU01DIHN1YnN5c3RlbS4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nIOKAkyBob3cgaXQgcmVzcG9uZHMgdG8gYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBvdGhlciBwb3RlbnRpYWwgaXNzdWVzIGR1cmluZyB0aGUgc29ja2V0IHNldHVwIHByb2Nlc3MuIEFueSByZXNvdXJjZSBsaW1pdHMgYmVpbmcgY29uc2lkZXJlZD8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBhdCB0aGlzIHBvaW50PyBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLCBhbmQgaXQgZ2l2ZXMgYSBwcmV0dHkgZ29vZCBjbHVlIG9mIHRoZSBvdmVyYWxsIHBpY3R1cmUuIExldCdzIHNlZSBob3cgdGhleSBoYW5kbGUgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOTozMy4zMDk1Mzk0MjlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvYWZfc21jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdFxcdHNtY19jbG9zZV9pbml0KHNtYyk7XFxuIDQyNjpcXHRcXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlaGFzaChzayk7XFxuIDQyNzpcXHR9XFxuIDQyODpcXHRcXG4gNDI5OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqc21jX3NvY2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbiA0MzA6XFx0XFx0XFx0XFx0XFx0ICAgaW50IHByb3RvY29sKVxcbiA0MzE6XFx0e1xcbiA0MzI6XFx0XFx0c3RydWN0IHByb3RvICpwcm90O1xcbiA0MzM6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbiA0MzQ6XFx0XFxuIDQzNTpcXHRcXHRwcm90ID0gKHByb3RvY29sID09IFNNQ1BST1RPX1NNQzYpID8gXFx1MDAyNnNtY19wcm90bzYgOiBcXHUwMDI2c21jX3Byb3RvO1xcbiA0MzY6XFx0XFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX1NNQywgR0ZQX0tFUk5FTCwgcHJvdCwgMCk7XFxuIDQzNzpcXHRcXHRpZiAoIXNrKVxcbiA0Mzg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQzOTpcXHRcXG4gNDQwOlxcdFxcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsgLyogc2V0cyBza19yZWZjbnQgdG8gMSAqL1xcbiA0NDE6XFx0XFx0c21jX3NrX2luaXQobmV0LCBzaywgcHJvdG9jb2wpO1xcbiA0NDI6XFx0XFxuIDQ0MzpcXHRcXHRyZXR1cm4gc2s7XFxuIDQ0NDpcXHR9XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdGludCBzbWNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXFxuIDQ0NzpcXHRcXHQgICAgIGludCBhZGRyX2xlbilcXG4gNDQ4OlxcdHtcXG4gNDQ5OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjtcXG4gNDUwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiA0NTE6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWM7XFxuIDQ1MjpcXHRcXHRpbnQgcmM7XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdFxcdHNtYyA9IHNtY19zayhzayk7XFxuIDQ1NTpcXHRcXG4gNDU2OlxcdFxcdC8qIHJlcGxpY2F0ZSB0ZXN0cyBmcm9tIGluZXRfYmluZCgpLCB0byBiZSBzYWZlIHdydC4gZnV0dXJlIGNoYW5nZXMgKi9cXG4gNDU3OlxcdFxcdHJjID0gLUVJTlZBTDtcXG4gNDU4OlxcdFxcdGlmIChhZGRyX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKVxcbiA0NTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdHJjID0gLUVBRk5PU1VQUE9SVDtcXG4gNDYyOlxcdFxcdGlmIChhZGRyLVxcdTAwM2VzaW5fZmFtaWx5ICE9IEFGX0lORVQgXFx1MDAyNlxcdTAwMjZcXG4gNDYzOlxcdFxcdCAgICBhZGRyLVxcdTAwM2VzaW5fZmFtaWx5ICE9IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2XFxuIDQ2NDpcXHRcXHQgICAgYWRkci1cXHUwMDNlc2luX2ZhbWlseSAhPSBBRl9VTlNQRUMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjMzLjMwOTc1MDRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcwMjI2MzUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBTTUMgQ29ubmVjdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGBza19hbGxvY2AgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgemVyb2VkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHVzaW5nIGVpdGhlciBga21lbV9jYWNoZV96YWxsb2NgIG9yIGBremFsbG9jYC4gVGhhdCdzIGdvb2Q7IGl0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBBbmQgdGhlbiBJIHNlZSB0aGF0IGBzbWNfY29ubl9jcmVhdGVgIGV4cGxpY2l0bHkgc2V0cyBgY29ubi1cdTAwM2V1bmhhc2hlZCA9IDBgLiBUaGlzIG1ha2VzIG1lIHRoaW5rIHRoZXJlICpzaG91bGRuJ3QqIGJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgZmllbGQuXG5cbkJ1dCwgSSdtIGEgc3RpY2tsZXIgZm9yIGRldGFpbCwgYW5kIEkndmUgbGVhcm5lZCB0aGUgaGFyZCB3YXkgbm90IHRvIGFzc3VtZSBhbnl0aGluZy4gU28sIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSBjZXJ0YWluKi4gTGV0J3MgZGlnIGRlZXBlci4gSSBuZWVkIHRvIGNvbXByZWhlbnNpdmVseSBjaGVjayBmb3IgYW55IG90aGVyIGluc3RhbmNlcyB3aGVyZSBgc21jX2Nvbm5lY3Rpb25gIG9yLCBjcnVjaWFsbHksIHRoZSBgdW5oYXNoZWRgIGZpZWxkLCBpcyB1c2VkIHdpdGhpbiB0aGUgU01DIHN1YnN5c3RlbS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGlmIHRoZXJlJ3MgYW55IGNvZGUgcGF0aCB3aGVyZSBgdW5oYXNoZWRgIG1pZ2h0IGJlIHJlYWQgYmVmb3JlIGJlaW5nIGV4cGxpY2l0bHkgc2V0LCBkZXNwaXRlIHRoZSBpbml0aWFsaXphdGlvbiBpbiBgc21jX2Nvbm5fY3JlYXRlYC5cblxuSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgaW52ZXN0aWdhdGlvbiBvbiBmaWxlcyBpbiB0aGUgYG5ldC9zbWMvYCBkaXJlY3RvcnkgaXRzZWxmLCBwYXJ0aWN1bGFybHkgdGhlIGRpYWdub3N0aWMgcmVhZGVyLCBhbmQgYW55IG90aGVyIGZpbGVzIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEknbSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGFjY2VzcyBvciByZWx5IG9uIHRoZSBgdW5oYXNoZWRgIGZpZWxkJ3Mgc3RhdGUuIEkgbmVlZCB0byBiZSAxMDAlIGNvbmZpZGVudCB0aGVyZSdzIG5vIHN1YnRsZSwgbHVya2luZywgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTYxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MzcuMDEyMDE2NDIzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzg2NDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bmhhc2hlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9Mjg4PXN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzEzLVxcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cXG5uZXQvc21jL2FmX3NtYy5jOjMxNDpcXHQgKiBOb24tZmFsbGJhY2sgc29ja2V0cyB1c2Ugc21jX2Nvbm5fdW5oYXNoKCkgc28gdGhhdCB0aGUgY29ubi1cXHUwMDNldW5oYXNoZWRcXG5uZXQvc21jL2FmX3NtYy5jLTMxNS1cXHQgKiBmbGFnIGtlZXBzIHRoZSB1bmhhc2ggZXhhY3RseSBvbmNlIGV2ZW4gd2hlbiBzbWNfY29ubl9mcmVlKCkgYWxyZWFkeSByYW5cXG4tLVxcbm5ldC9zbWMvc21jLmg9MTk1PXN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XFxuLS1cXG5uZXQvc21jL3NtYy5oLTI4MS1cXHR1OFxcdFxcdFxcdGZyZWVkO1xcdFxcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xcbm5ldC9zbWMvc21jLmg6MjgyOlxcdHU4XFx0XFx0XFx0dW5oYXNoZWQ7XFx0LyogcmVtb3ZlZCBmcm9tIHNvY2sgaGFzaCAqL1xcbm5ldC9zbWMvc21jLmgtMjgzLVxcdHU4XFx0XFx0XFx0b3V0X29mX3N5bmM7XFx0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTIyND1zdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU0LS8qIHVuaGFzaCB0aGUgc29ja2V0IG9uY2U7IG93bnMgdGhlIHNpbmdsZSB1bmhhc2ggZm9yIGFsbCBub24tZmFsbGJhY2sgcGF0aHMuXFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNTU6ICogRXZlcnkgY2FsbGVyIGhvbGRzIGxvY2tfc29jayBmb3IgdGhpcyBzb2NrZXQsIHNvIGNvbm4tXFx1MDAzZXVuaGFzaGVkIGlzIHByb3RlY3RlZFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU2LSAqIGJ5IHRoYXQgbG9jayBhbmQgbm8gc2VwYXJhdGUgc3luY2hyb25pc2F0aW9uIGlzIG5lZWRlZC5cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjU4PXZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjYxLVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjYyOlxcdGlmICghY29ubi1cXHUwMDNldW5oYXNoZWQpIHtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTI2MzpcXHRcXHRjb25uLVxcdTAwM2V1bmhhc2hlZCA9IDE7XFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNjQtXFx0XFx0c21jLVxcdTAwM2Vzay5za19wcm90LVxcdTAwM2V1bmhhc2goXFx1MDAyNnNtYy1cXHUwMDNlc2spO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE5OTY9aW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc0LVxcdGNvbm4tXFx1MDAzZWZyZWVkID0gMDtcXG5uZXQvc21jL3NtY19jb3JlLmM6MjA3NTpcXHRjb25uLVxcdTAwM2V1bmhhc2hlZCA9IDA7XFxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzYtXFx0Y29ubi1cXHUwMDNlbG9jYWxfdHhfY3RybC5jb21tb24udHlwZSA9IFNNQ19DRENfTVNHX1RZUEU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjM3LjA2NTg4NTg3MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTAxMzM3NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGlubmVyIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIHRoZSBTTUMgRGlhZyBSZWFkZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyByYWNlIGNvbmRpdGlvbiB0aGlzIGlzIHRhcmdldGluZy4gVGhlIGBuZXQvc21jL3NtY19kaWFnLmNgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBzcGVjaWZpY2FsbHkgdGhlIGRpYWcgcmVhZGVyIGZ1bmN0aW9uYWxpdHkuIEkga25vdyB0aGF0IGFyZWEgd2VsbCwgYW5kIEkndmUgc2VlbiBzb21lIHRyaWNreSB0aHJlYWRpbmcgaXNzdWVzIGNyb3AgdXAgaW4gdGhlIHBhc3QgcmVsYXRlZCB0byBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGNvbGxlY3Rpb24uIE15IGludHVpdGlvbiBzdWdnZXN0cyB0aGF0IHRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUga2luZCBvZiBjb25jdXJyZW50IGFjY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGhvdyB0aGUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyByZWFkIGFuZCB3cml0dGVuLCBwZXJoYXBzIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb3IgdGVhcmRvd24sIG9yIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgdGhlcmUuIExldCdzIHNlZSB3aGF0IHRoZXkndmUgY2hhbmdlZCBhbmQgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMwNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjQyLjE2NzIyNTUzNFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyODM4NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlhZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfU01DKVxcdCs9IHNtYy5vXFxubmV0L3NtYy9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19TTUNfRElBRylcXHQrPSBzbWNfZGlhZy5vXFxubmV0L3NtYy9NYWtlZmlsZS01LXNtYy15IDo9IGFmX3NtYy5vIHNtY19wbmV0Lm8gc21jX2liLm8gc21jX2NsYy5vIHNtY19jb3JlLm8gc21jX3dyLm8gc21jX2xsYy5vXFxuLS1cXG5uZXQvc21jL3NtYy5oPTI4Nj1zdHJ1Y3Qgc21jX3NvY2sge1xcdFxcdFxcdFxcdC8qIHNtYyBzb2NrIGNvbnRhaW5lciAqL1xcbi0tXFxubmV0L3NtYy9zbWMuaC0zMDktXFx0aW50XFx0XFx0XFx0ZmFsbGJhY2tfcnNuO1xcdC8qIHJlYXNvbiBmb3IgZmFsbGJhY2sgKi9cXG5uZXQvc21jL3NtYy5oOjMxMDpcXHR1MzJcXHRcXHRcXHRwZWVyX2RpYWdub3NpczsgLyogZGVjbGluZSByZWFzb24gZnJvbSBwZWVyICovXFxubmV0L3NtYy9zbWMuaC0zMTEtXFx0YXRvbWljX3QgICAgICAgICAgICAgICAgcXVldWVkX3NtY19oczsgIC8qIHF1ZXVlZCBzbWMgaGFuZHNoYWtlcyAqL1xcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmM9Njg5PWludCBzbWNfY2xjX3dhaXRfbXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCB2b2lkICpidWYsIGludCBidWZsZW4sXFxuLS1cXG5uZXQvc21jL3NtY19jbGMuYy03ODktXFx0XFx0cmVhc29uX2NvZGUgPSBTTUNfQ0xDX0RFQ0xfUEVFUkRFQ0w7XFxubmV0L3NtYy9zbWNfY2xjLmM6NzkwOlxcdFxcdHNtYy1cXHUwMDNlcGVlcl9kaWFnbm9zaXMgPSBudG9obChkY2xjLVxcdTAwM2VwZWVyX2RpYWdub3Npcyk7XFxubmV0L3NtYy9zbWNfY2xjLmMtNzkxLVxcdFxcdGlmICgoZGNsYy1cXHUwMDNlaGRyLnR5cGV2MiBcXHUwMDI2IFNNQ19GSVJTVF9DT05UQUNUX01BU0spIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvc21jL3NtY19jbGMuYy04MDMtLyogc2VuZCBDTEMgREVDTElORSBtZXNzYWdlIGFjcm9zcyBpbnRlcm5hbCBUQ1Agc29ja2V0ICovXFxubmV0L3NtYy9zbWNfY2xjLmM6ODA0OmludCBzbWNfY2xjX3NlbmRfZGVjbGluZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgdTMyIHBlZXJfZGlhZ19pbmZvLCB1OCB2ZXJzaW9uKVxcbm5ldC9zbWMvc21jX2NsYy5jLTgwNS17XFxuLS1cXG5uZXQvc21jL3NtY19jbGMuYy04MTctXFx0ZGNsYy5vc190eXBlID0gdmVyc2lvbiA9PSBTTUNfVjEgPyAwIDogU01DX0NMQ19PU19MSU5VWDtcXG5uZXQvc21jL3NtY19jbGMuYzo4MTg6XFx0ZGNsYy5oZHIudHlwZXYyID0gKHBlZXJfZGlhZ19pbmZvID09IFNNQ19DTENfREVDTF9TWU5DRVJSKSA/XFxubmV0L3NtYy9zbWNfY2xjLmMtODE5LVxcdFxcdFxcdFxcdFxcdFxcdFNNQ19GSVJTVF9DT05UQUNUX01BU0sgOiAwO1xcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmMtODIzLVxcdFxcdCAgICAgICBzaXplb2YobG9jYWxfc3lzdGVtaWQpKTtcXG5uZXQvc21jL3NtY19jbGMuYzo4MjQ6XFx0ZGNsYy5wZWVyX2RpYWdub3NpcyA9IGh0b25sKHBlZXJfZGlhZ19pbmZvKTtcXG5uZXQvc21jL3NtY19jbGMuYy04MjUtXFx0aWYgKHZlcnNpb24gPT0gU01DX1YxKSB7XFxuLS1cXG5uZXQvc21jL3NtY19jbGMuaD0zMDI9c3RydWN0IHNtY19jbGNfbXNnX2RlY2xpbmUge1xcdC8qIGNsYyBkZWNsaW5lIG1lc3NhZ2UgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NsYy5oLTMwNC1cXHR1OCBpZF9mb3JfcGVlcltTTUNfU1lTVEVNSURfTEVOXTsgLyogc2VuZGVyIHBlZXJfaWQgKi9cXG5uZXQvc21jL3NtY19jbGMuaDozMDU6XFx0X19iZTMyIHBlZXJfZGlhZ25vc2lzO1xcdC8qIGRpYWdub3NpcyBpbmZvcm1hdGlvbiAqL1xcbm5ldC9zbWMvc21jX2NsYy5oLTMwNi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpXFxuLS1cXG5uZXQvc21jL3NtY19jbGMuaC0zMTYtXFxubmV0L3NtYy9zbWNfY2xjLmg6MzE3OiNkZWZpbmUgU01DX0RFQ0xfRElBR19DT1VOVF9WMlxcdDQgLyogbm8uIG9mIGFkZGl0aW9uYWwgcGVlciBkaWFnbm9zaXMgY29kZXMgKi9cXG5uZXQvc21jL3NtY19jbGMuaC0zMTgtXFxubmV0L3NtYy9zbWNfY2xjLmg9MzE5PXN0cnVjdCBzbWNfY2xjX21zZ19kZWNsaW5lX3YyIHtcXHQvKiBjbGMgZGVjbGluZSBtZXNzYWdlICovXFxuLS1cXG5uZXQvc21jL3NtY19jbGMuaC0zMjEtXFx0dTggaWRfZm9yX3BlZXJbU01DX1NZU1RFTUlEX0xFTl07IC8qIHNlbmRlciBwZWVyX2lkICovXFxubmV0L3NtYy9zbWNfY2xjLmg6MzIyOlxcdF9fYmUzMiBwZWVyX2RpYWdub3NpcztcXHQvKiBkaWFnbm9zaXMgaW5mb3JtYXRpb24gKi9cXG5uZXQvc21jL3NtY19jbGMuaC0zMjMtI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmgtMzMwLVxcdHU4IHJlc2VydmVkMlszXTtcXG5uZXQvc21jL3NtY19jbGMuaDozMzE6XFx0X19iZTMyIHBlZXJfZGlhZ25vc2lzX3YyW1NNQ19ERUNMX0RJQUdfQ09VTlRfVjJdO1xcbm5ldC9zbWMvc21jX2NsYy5oLTMzMi1cXHRzdHJ1Y3Qgc21jX2NsY19tc2dfdHJhaWwgdHJsOyAvKiBleWUgY2F0Y2hlciBcXFwiU01DRFxcXCIgb3IgXFxcIlNNQ1JcXFwiIEVCQ0RJQyAqL1xcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmg9NDQ3PWludCBzbWNfY2xjX3dhaXRfbXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCB2b2lkICpidWYsIGludCBidWZsZW4sXFxubmV0L3NtYy9zbWNfY2xjLmgtNDQ4LVxcdFxcdCAgICAgdTggZXhwZWN0ZWRfdHlwZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG5uZXQvc21jL3NtY19jbGMuaDo0NDk6aW50IHNtY19jbGNfc2VuZF9kZWNsaW5lKHN0cnVjdCBzbWNfc29jayAqc21jLCB1MzIgcGVlcl9kaWFnX2luZm8sIHU4IHZlcnNpb24pO1xcbm5ldC9zbWMvc21jX2NsYy5oLTQ1MC1pbnQgc21jX2NsY19zZW5kX3Byb3Bvc2FsKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjY5PXZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3OS1cXHRjb25uLVxcdTAwM2VmcmVlZCA9IDE7XFxubmV0L3NtYy9zbWNfY29yZS5jOjEyODA6XFx0LyogVW5oYXNoIGJlZm9yZSBkcm9wcGluZyBsZ3IvbG5rIHJlZnMgc28gdGhlIGRpYWcgcmVhZGVyLCB3aGljaFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjgxLVxcdCAqIGl0ZXJhdGVzIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCByZWFkX2xvY2ssIGNhbm5vdCBzZWUgYSBjb25uZWN0aW9uIHdob3NlXFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMTUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG5uZXQvc21jL3NtY19kaWFnLmM6MTY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvY2tfZGlhZy5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX2RpYWcuYzoxNzojaW5jbHVkZSBcXHUwMDNjbGludXgvaW5ldF9kaWFnLmhcXHUwMDNlXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbWNfZGlhZy5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjY6c3RydWN0IHNtY19kaWFnX2R1bXBfY3R4IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjctXFx0aW50IHBvc1syXTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yOS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MzA6c3RhdGljIHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqc21jX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTMxLXtcXG5uZXQvc21jL3NtY19kaWFnLmM6MzI6XFx0cmV0dXJuIChzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKiljYi1cXHUwMDNlY3R4O1xcbm5ldC9zbWMvc21jX2RpYWcuYy0zMy19XFxubmV0L3NtYy9zbWNfZGlhZy5jLTM0LVxcbm5ldC9zbWMvc21jX2RpYWcuYzozNTpzdGF0aWMgdm9pZCBzbWNfZGlhZ19tc2dfY29tbW9uX2ZpbGwoc3RydWN0IHNtY19kaWFnX21zZyAqciwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0zNi17XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMzktXFx0bWVtc2V0KHIsIDAsIHNpemVvZigqcikpO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo0MDpcXHRyLVxcdTAwM2VkaWFnX2ZhbWlseSA9IHNrLVxcdTAwM2Vza19mYW1pbHk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjQxOlxcdHNvY2tfZGlhZ19zYXZlX2Nvb2tpZShzaywgci1cXHUwMDNlaWQuaWRpYWdfY29va2llKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtNDItXFx0aWYgKCFzbWMtXFx1MDAzZWNsY3NvY2spXFxubmV0L3NtYy9zbWNfZGlhZy5jLTQzLVxcdFxcdHJldHVybjtcXG5uZXQvc21jL3NtY19kaWFnLmM6NDQ6XFx0ci1cXHUwMDNlaWQuaWRpYWdfc3BvcnQgPSBodG9ucyhzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19udW0pO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo0NTpcXHRyLVxcdTAwM2VpZC5pZGlhZ19kcG9ydCA9IHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX2Rwb3J0O1xcbm5ldC9zbWMvc21jX2RpYWcuYzo0NjpcXHRyLVxcdTAwM2VpZC5pZGlhZ19pZiA9IHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZjtcXG5uZXQvc21jL3NtY19kaWFnLmMtNDctXFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBTTUNQUk9UT19TTUMpIHtcXG5uZXQvc21jL3NtY19kaWFnLmM6NDg6XFx0XFx0ci1cXHUwMDNlaWQuaWRpYWdfc3JjWzBdID0gc21jLVxcdTAwM2VjbGNzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfcmN2X3NhZGRyO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo0OTpcXHRcXHRyLVxcdTAwM2VpZC5pZGlhZ19kc3RbMF0gPSBzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19kYWRkcjtcXG5uZXQvc21jL3NtY19kaWFnLmMtNTAtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTUxLVxcdH0gZWxzZSBpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sID09IFNNQ1BST1RPX1NNQzYpIHtcXG5uZXQvc21jL3NtY19kaWFnLmM6NTI6XFx0XFx0bWVtY3B5KFxcdTAwMjZyLVxcdTAwM2VpZC5pZGlhZ19zcmMsIFxcdTAwMjZzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrLVxcdTAwM2Vza192Nl9yY3Zfc2FkZHIsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTUzLVxcdFxcdCAgICAgICBzaXplb2Yoc21jLVxcdTAwM2VjbGNzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdjZfcmN2X3NhZGRyKSk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjU0OlxcdFxcdG1lbWNweShcXHUwMDI2ci1cXHUwMDNlaWQuaWRpYWdfZHN0LCBcXHUwMDI2c21jLVxcdTAwM2VjbGNzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdjZfZGFkZHIsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTU1LVxcdFxcdCAgICAgICBzaXplb2Yoc21jLVxcdTAwM2VjbGNzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdjZfZGFkZHIpKTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy01OS1cXG5uZXQvc21jL3NtY19kaWFnLmM6NjA6c3RhdGljIGludCBzbWNfZGlhZ19tc2dfYXR0cnNfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NtYy9zbWNfZGlhZy5jOjYxOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfZGlhZ19tc2cgKnIsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTYyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy02Ni1cXG5uZXQvc21jL3NtY19kaWFnLmM6Njc6XFx0ci1cXHUwMDNlZGlhZ191aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKHVzZXJfbnMsIHNrX3VpZChzaykpO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo2ODpcXHRyLVxcdTAwM2VkaWFnX2lub2RlID0gc29ja19pX2lubyhzayk7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTY5LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTcxLVxcbm5ldC9zbWMvc21jX2RpYWcuYzo3MjpzdGF0aWMgaW50IF9fc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTczLVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG5uZXQvc21jL3NtY19kaWFnLmM6NzQ6XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNtY19kaWFnX3JlcSAqcmVxLFxcbm5ldC9zbWMvc21jX2RpYWcuYy03NS1cXHRcXHRcXHQgICBzdHJ1Y3QgbmxhdHRyICpiYylcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy03Ny1cXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHNtY19zayhzayk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjc4OlxcdHN0cnVjdCBzbWNfZGlhZ19mYWxsYmFjayBmYWxsYmFjaztcXG5uZXQvc21jL3NtY19kaWFnLmMtNzktXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo4MDpcXHRzdHJ1Y3Qgc21jX2RpYWdfbXNnICpyO1xcbm5ldC9zbWMvc21jX2RpYWcuYy04MS1cXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy04OC1cXHRyID0gbmxtc2dfZGF0YShubGgpO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo4OTpcXHRzbWNfZGlhZ19tc2dfY29tbW9uX2ZpbGwociwgc2spO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo5MDpcXHRyLVxcdTAwM2VkaWFnX3N0YXRlID0gc2stXFx1MDAzZXNrX3N0YXRlO1xcbm5ldC9zbWMvc21jX2RpYWcuYy05MS1cXHRpZiAoc21jLVxcdTAwM2V1c2VfZmFsbGJhY2spXFxubmV0L3NtYy9zbWNfZGlhZy5jOjkyOlxcdFxcdHItXFx1MDAzZWRpYWdfbW9kZSA9IFNNQ19ESUFHX01PREVfRkFMTEJBQ0tfVENQO1xcbm5ldC9zbWMvc21jX2RpYWcuYy05My1cXHRlbHNlIGlmIChzbWNfY29ubl9sZ3JfdmFsaWQoXFx1MDAyNnNtYy1cXHUwMDNlY29ubikgXFx1MDAyNlxcdTAwMjYgc21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlaXNfc21jZClcXG5uZXQvc21jL3NtY19kaWFnLmM6OTQ6XFx0XFx0ci1cXHUwMDNlZGlhZ19tb2RlID0gU01DX0RJQUdfTU9ERV9TTUNEO1xcbm5ldC9zbWMvc21jX2RpYWcuYy05NS1cXHRlbHNlXFxubmV0L3NtYy9zbWNfZGlhZy5jOjk2OlxcdFxcdHItXFx1MDAzZWRpYWdfbW9kZSA9IFNNQ19ESUFHX01PREVfU01DUjtcXG5uZXQvc21jL3NtY19kaWFnLmMtOTctXFx0dXNlcl9ucyA9IHNrX3VzZXJfbnMoTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5zayk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjk4OlxcdGlmIChzbWNfZGlhZ19tc2dfYXR0cnNfZmlsbChzaywgc2tiLCByLCB1c2VyX25zKSlcXG5uZXQvc21jL3NtY19kaWFnLmMtOTktXFx0XFx0Z290byBlcnJvdXQ7XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMTAxLVxcdGZhbGxiYWNrLnJlYXNvbiA9IHNtYy1cXHUwMDNlZmFsbGJhY2tfcnNuO1xcbm5ldC9zbWMvc21jX2RpYWcuYzoxMDI6XFx0ZmFsbGJhY2sucGVlcl9kaWFnbm9zaXMgPSBzbWMtXFx1MDAzZXBlZXJfZGlhZ25vc2lzO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0xMDMtXFx0aWYgKG5sYV9wdXQoc2tiLCBTTUNfRElBR19GQUxMQkFDSywgc2l6ZW9mKGZhbGxiYWNrKSwgXFx1MDAyNmZhbGxiYWNrKSBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMTA1LVxcbm5ldC9zbWMvc21jX2RpYWcuYzoxMDY6XFx0aWYgKChyZXEtXFx1MDAzZWRpYWdfZXh0IFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgKFNNQ19ESUFHX0NPTk5JTkZPIC0gMSkpKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2RpYWcuYy0xMDctXFx0ICAgIHNtYy1cXHUwMDNlY29ubi5hbGVydF90b2tlbl9sb2NhbCkge1xcbm5ldC9zbWMvc21jX2RpYWcuYy0xMDgtXFx0XFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXFx1MDAyNnNtYy1cXHUwMDNlY29ubjtcXG5uZXQvc21jL3NtY19kaWFnLmM6MTA5OlxcdFxcdHN0cnVjdCBzbWNfZGlhZ19jb25uaW5mbyBjaW5mbyA9IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMTEwLVxcdFxcdFxcdC50b2tlbiA9IGNvbm4tXFx1MDAzZWFsZXJ0X3Rva2VuX2xvY2FsLFxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTE0Ni1cXHRpZiAoc21jX2Nvbm5fbGdyX3ZhbGlkKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pIFxcdTAwMjZcXHUwMDI2ICFzbWMtXFx1MDAzZWNvbm4ubGdyLVxcdTAwM2Vpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9zbWNfZGlhZy5jOjE0NzpcXHQgICAgKHJlcS1cXHUwMDNlZGlhZ19leHQgXFx1MDAyNiAoMSBcXHUwMDNjXFx1MDAzYyAoU01DX0RJQUdfTEdSSU5GTyAtIDEpKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc21jL3NtY19kaWFnLmMtMTQ4LVxcdCAgICAhbGlzdF9lbXB0eShcXHUwMDI2c21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlbGlzdCkpIHtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xNTAtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE1MTpcXHRcXHRzdHJ1Y3Qgc21jX2RpYWdfbGdyaW5mbyBsaW5mbyA9IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMTUyLVxcdFxcdFxcdC5yb2xlID0gc21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlcm9sZSxcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xNjUtXFx0aWYgKHNtY19jb25uX2xncl92YWxpZChcXHUwMDI2c21jLVxcdTAwM2Vjb25uKSBcXHUwMDI2XFx1MDAyNiBzbWMtXFx1MDAzZWNvbm4ubGdyLVxcdTAwM2Vpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9zbWNfZGlhZy5jOjE2NjpcXHQgICAgKHJlcS1cXHUwMDNlZGlhZ19leHQgXFx1MDAyNiAoMSBcXHUwMDNjXFx1MDAzYyAoU01DX0RJQUdfRE1CSU5GTyAtIDEpKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc21jL3NtY19kaWFnLmMtMTY3LVxcdCAgICAhbGlzdF9lbXB0eShcXHUwMDI2c21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlbGlzdCkgXFx1MDAyNlxcdTAwMjYgc21jLVxcdTAwM2Vjb25uLnJtYl9kZXNjKSB7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTE2OC1cXHRcXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcXHUwMDI2c21jLVxcdTAwM2Vjb25uO1xcbm5ldC9zbWMvc21jX2RpYWcuYzoxNjk6XFx0XFx0c3RydWN0IHNtY2RfZGlhZ19kbWJpbmZvIGRpbmZvO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0xNzAtXFx0XFx0c3RydWN0IHNtY2RfZGV2ICpzbWNkID0gY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkO1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTE5NS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MTk2OnN0YXRpYyBpbnQgc21jX2RpYWdfZHVtcF9wcm90byhzdHJ1Y3QgcHJvdG8gKnByb3QsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTE5Ny1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgcF90eXBlKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTgte1xcbm5ldC9zbWMvc21jX2RpYWcuYzoxOTk6XFx0c3RydWN0IHNtY19kaWFnX2R1bXBfY3R4ICpjYl9jdHggPSBzbWNfZHVtcF9jb250ZXh0KGNiKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjAwLVxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTIxNi1cXHRcXHRcXHRnb3RvIG5leHQ7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjIxNzpcXHRcXHRyYyA9IF9fc21jX2RpYWdfZHVtcChzaywgc2tiLCBjYiwgbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKSwgYmMpO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yMTgtXFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMjktXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIzMDpzdGF0aWMgaW50IHNtY19kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzEte1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTIzMy1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjM0OlxcdHJjID0gc21jX2RpYWdfZHVtcF9wcm90byhcXHUwMDI2c21jX3Byb3RvLCBza2IsIGNiLCBTTUNQUk9UT19TTUMpO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzUtXFx0aWYgKCFyYylcXG5uZXQvc21jL3NtY19kaWFnLmM6MjM2OlxcdFxcdHNtY19kaWFnX2R1bXBfcHJvdG8oXFx1MDAyNnNtY19wcm90bzYsIHNrYiwgY2IsIFNNQ1BST1RPX1NNQzYpO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzctXFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTIzOS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjQwOnN0YXRpYyBpbnQgc21jX2RpYWdfaGFuZGxlcl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqaClcXG5uZXQvc21jL3NtY19kaWFnLmMtMjQxLXtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNDctXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZHVtcF9jb250cm9sIGMgPSB7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjI0ODpcXHRcXHRcXHRcXHQuZHVtcCA9IHNtY19kaWFnX2R1bXAsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI0OS1cXHRcXHRcXHRcXHQubWluX2R1bXBfYWxsb2MgPSBTS0JfV0lUSF9PVkVSSEVBRCgzMjc2OCksXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI1MC1cXHRcXHRcXHR9O1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyNTE6XFx0XFx0XFx0cmV0dXJuIG5ldGxpbmtfZHVtcF9zdGFydChuZXQtXFx1MDAzZWRpYWdfbmxzaywgc2tiLCBoLCBcXHUwMDI2Yyk7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI1Mi1cXHRcXHR9XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjU2LVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNTc6c3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrX2RpYWdfaGFuZGxlciBzbWNfZGlhZ19oYW5kbGVyID0ge1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yNTgtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI1OS1cXHQuZmFtaWx5ID0gQUZfU01DLFxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjA6XFx0LmR1bXAgPSBzbWNfZGlhZ19oYW5kbGVyX2R1bXAsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI2MS19O1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjItXFxubmV0L3NtYy9zbWNfZGlhZy5jOjI2MzpzdGF0aWMgaW50IF9faW5pdCBzbWNfZGlhZ19pbml0KHZvaWQpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI2NC17XFxubmV0L3NtYy9zbWNfZGlhZy5jOjI2NTpcXHRyZXR1cm4gc29ja19kaWFnX3JlZ2lzdGVyKFxcdTAwMjZzbWNfZGlhZ19oYW5kbGVyKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjY2LX1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjY3LVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjg6c3RhdGljIHZvaWQgX19leGl0IHNtY19kaWFnX2V4aXQodm9pZClcXG5uZXQvc21jL3NtY19kaWFnLmMtMjY5LXtcXG5uZXQvc21jL3NtY19kaWFnLmM6MjcwOlxcdHNvY2tfZGlhZ191bnJlZ2lzdGVyKFxcdTAwMjZzbWNfZGlhZ19oYW5kbGVyKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjcxLX1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjcyLVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNzM6bW9kdWxlX2luaXQoc21jX2RpYWdfaW5pdCk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjI3NDptb2R1bGVfZXhpdChzbWNfZGlhZ19leGl0KTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjc1LU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tLVxcbm5ldC9zbWMvc21jX2liLmM9NDU4PWludCBzbWNfaWJfY3JlYXRlX3Byb3RlY3Rpb25fZG9tYWluKHN0cnVjdCBzbWNfbGluayAqbG5rKVxcbi0tXFxubmV0L3NtYy9zbWNfaWIuYy00NjgtXFxubmV0L3NtYy9zbWNfaWIuYzo0Njk6c3RhdGljIGJvb2wgc21jcl9kaWFnX2lzX2Rldl9jcml0aWNhbChzdHJ1Y3Qgc21jX2xncl9saXN0ICpzbWNfbGdyLFxcbm5ldC9zbWMvc21jX2liLmMtNDcwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldilcXG4tLVxcbm5ldC9zbWMvc21jX2liLmM9NTUyPXN0YXRpYyBpbnQgc21jX25sX2hhbmRsZV9zbWNyX2RldihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsXFxuLS1cXG5uZXQvc21jL3NtY19pYi5jLTU3MS1cXHRcXHRnb3RvIGVycm91dDtcXG5uZXQvc21jL3NtY19pYi5jOjU3MjpcXHRpc19jcml0ID0gc21jcl9kaWFnX2lzX2Rldl9jcml0aWNhbChcXHUwMDI2c21jX2xncl9saXN0LCBzbWNpYmRldik7XFxubmV0L3NtYy9zbWNfaWIuYy01NzMtXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBTTUNfTkxBX0RFVl9JU19DUklULCBpc19jcml0KSlcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYz0xMjM9c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvc21jL3NtY19pbmV0LmMtMTI0LXtcXG5uZXQvc21jL3NtY19pbmV0LmM6MTI1OlxcdC8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLVxcdTAwM2VjbGNzb2NrXFxubmV0L3NtYy9zbWNfaW5ldC5jLTEyNi1cXHQgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjQyLjIxODUxNTIwM1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTg0MDk1OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGFuZCBLTVNBTiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiwgbGlrZWx5IGEgVXNlLUFmdGVyLUZyZWUgb3IgYSBOVUxMIGRlcmVmZXJlbmNlLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgYHNtY19kaWFnYCBjb2RlIGl0ZXJhdGluZyB0aHJvdWdoIGhhc2hlZCBTTUMgc29ja2V0cyBhbmQgYWNjZXNzaW5nIHRoZSBgc21jLVx1MDAzZWNvbm4ubGdyYCBvciBgbG5rYCBwb2ludGVycyB3aGlsZSBgc21jX2Nvbm5fZnJlZSgpYCBpcyBwb3RlbnRpYWxseSB0ZWFyaW5nIHRoZW0gZG93biBjb25jdXJyZW50bHkuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBpbiBjb25jdXJyZW50IHN5c3RlbXMsIGFuZCBpdCdzIGdvb2QgdGhleSBhcmUgYWRkcmVzc2luZyB0aGlzLiBUaGUgc29sdXRpb24gb2YgdW5oYXNoaW5nIHRoZSBzb2NrZXQgKmJlZm9yZSogZnJlZWluZyB0aG9zZSBjcnVjaWFsIHJlZmVyZW5jZXMgaW4gYHNtY19jb25uX2ZyZWUoKWAgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gcHJldmVudCB0aGUgYWNjZXNzIHRvIHN0YWxlIG1lbW9yeS4gSW50cm9kdWNpbmcgdGhlIGBjb25uLVx1MDAzZXVuaGFzaGVkYCBmbGFnIGFuZCB1c2luZyBpdCB0byBwcmV2ZW50IGRvdWJsZS11bmhhc2hpbmcgKG9yIGVuc3VyaW5nIGl0IGhhcHBlbnMgb25seSBvbmNlKSBpcyBhIGNsZWFuIHdheSB0byBtYW5hZ2UgdGhlIHN0YXRlIGNoYW5nZS4gSSB3b3VsZCBleHBlY3QgdGhpcyB0byByZXNvbHZlIHRoZSBvcmlnaW5hbCBpc3N1ZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGFsd2F5cywgXCJEaWQgdGhpcyBmaXggaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzP1wiLiBTcGVjaWZpY2FsbHksIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgbm93PyBJJ20gc2VlaW5nIGEgbmV3IGZpZWxkLCBgdTggdW5oYXNoZWQ7YCwgYWRkZWQgdG8gdGhlIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gLiBIb3dldmVyLCB0aGUgbWVtb3J5IGZvciBgc3RydWN0IHNtY19zb2NrYCBpcyBhbGxvY2F0ZWQgdmlhIGBza19hbGxvY2Agd2hpY2ggdXNlcyBga21lbV9jYWNoZV96YWxsb2NgIG9yIGBremFsbG9jYCwgbWVhbmluZyBpdCdzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC4gRnVydGhlciwgYHNtY19jb25uX2NyZWF0ZWAgZXhwbGljaXRseSBpbml0aWFsaXplcyBgY29ubi1cdTAwM2V1bmhhc2hlZCA9IDA7YC4gVGhlIHVzZSBvZiBgc21jX2Nvbm5fdW5oYXNoYCBjaGVja3MgdGhpcyBmbGFnIGJlZm9yZSBvcGVyYXRpbmcuIFRoZXJlIGFyZW4ndCBhbnkgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSwgb3IgZXZlbiB1c2VkIGluIGFueSBicmFuY2hpbmcgbG9naWMuIEFuZCBJIHNlZSBubyBtb2RpZmljYXRpb25zIHRvIHN0cnVjdHMgY29waWVkIHRvIHVzZXJzcGFjZSAobm8gbmV3IHBhZGRpbmcsIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIHNlbnQgb3ZlciBuZXRsaW5rIG9yIGlvY3RsKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYnVmZmVyIGxlbmd0aHMgb3IgYm91bmQgY2hlY2tzLCBlaXRoZXIuIFRoZSBwYXRjaCBzZWVtcyB2ZXJ5IHdlbGwtY29udGFpbmVkIGFuZCBjYXJlZnVsLlxuXG5XaXRoIHRoaXMgaW4gbWluZCwgbGV0J3MgY29uc2lkZXIgS0FTQU4gdnMuIEtNU0FOLiBUaGUgb3JpZ2luYWwgYnVnIHdhcyBhIGNsYXNzaWMgVUFGL3JhY2UsIHdoaWNoIEtBU0FOIHdvdWxkIGJlIGdyZWF0IGF0IGNhdGNoaW5nLiBUaGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIHNob3VsZCBiZSBlbnRpcmVseSBzdWZmaWNpZW50IGZvciB2ZXJpZnlpbmcgdGhpcyBmaXggYW5kIGVuc3VyaW5nIHRoZXJlIGFyZSBubyBuZXcgdnVsbmVyYWJpbGl0aWVzLlxuXG5TbywgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIHByb3ZpZGUgY2xlYXIgcmVhc29uaW5nIGFib3V0IHRoZSBVQUYgbmF0dXJlIG9mIHRoZSBvcmlnaW5hbCBwcm9ibGVtIGFuZCB0aGUgbGFjayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4NywiT3V0cHV0VG9rZW5zIjoyMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6NDcuODAyNjE0MjM3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHNvY2tldCB0ZWFyZG93biAoc21jX2Nvbm5fZnJlZSkgYW5kIHNvY2tldCBkaWFnbm9zdGljcyAoc21jX2RpYWcpIGJ5IHVuaGFzaGluZyB0aGUgc29ja2V0IGVhcmxpZXIgYW5kIHRyYWNraW5nIHRoZSB1bmhhc2ggc3RhdGUgdmlhIGEgbmV3IGB1bmhhc2hlZGAgZmxhZyBpbiBgc3RydWN0IHNtY19jb25uZWN0aW9uYC5cXG5cXG4xLiBUaGUgbmV3IGB1bmhhc2hlZGAgZmllbGQgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBzbWNfc29ja2AgdmlhIGBza19hbGxvYygpYCAod2hpY2ggemVyb2VzIG1lbW9yeSkgYW5kIGlzIGV4cGxpY2l0bHkgcmVzZXQgdG8gMCBpbiBgc21jX2Nvbm5fY3JlYXRlKClgLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXFxuMy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBzdHJ1Y3R1cmVzIChzdWNoIGFzIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGlvY3RsIHN0cnVjdHVyZXMpIGhhdmUgaGFkIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgaW50cm9kdWNlZC5cXG40LiBUaGUgcmFjZSBjb25kaXRpb24gYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBmaXhlZCBieSB0aGlzIHBhdGNoIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi9MT0NLREVQLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHNvY2tldCB0ZWFyZG93biAoc21jX2Nvbm5fZnJlZSkgYW5kIHNvY2tldCBkaWFnbm9zdGljcyAoc21jX2RpYWcpIGJ5IHVuaGFzaGluZyB0aGUgc29ja2V0IGVhcmxpZXIgYW5kIHRyYWNraW5nIHRoZSB1bmhhc2ggc3RhdGUgdmlhIGEgbmV3IGB1bmhhc2hlZGAgZmxhZyBpbiBgc3RydWN0IHNtY19jb25uZWN0aW9uYC5cXG5cXG4xLiBUaGUgbmV3IGB1bmhhc2hlZGAgZmllbGQgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBzbWNfc29ja2AgdmlhIGBza19hbGxvYygpYCAod2hpY2ggemVyb2VzIG1lbW9yeSkgYW5kIGlzIGV4cGxpY2l0bHkgcmVzZXQgdG8gMCBpbiBgc21jX2Nvbm5fY3JlYXRlKClgLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXFxuMy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBzdHJ1Y3R1cmVzIChzdWNoIGFzIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGlvY3RsIHN0cnVjdHVyZXMpIGhhdmUgaGFkIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgaW50cm9kdWNlZC5cXG40LiBUaGUgcmFjZSBjb25kaXRpb24gYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBmaXhlZCBieSB0aGlzIHBhdGNoIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi9MT0NLREVQLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq4fbz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 09:54:57 +0000 UTC FinishedAt: 2026-09-08 10:19:49 +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": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "SMC_DIAG", "INFINIBAND", "DIBS", "DIBS_LO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "SMC_DIAG", "INFINIBAND", "DIBS", "DIBS_LO" ], "series_id": "4e9073e7-7741-4d22-8d71-d3d6abda715d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_conn_unhash", "smc_conn_free", "__smc_release", "smc_conn_create", "smc_unhash_sk", "smc_release" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtTTUNfRElBRyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uX3VuaGFzaCYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9mcmVlJiMzNDssCiAgICAmIzM0O19fc21jX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c21jX2Nvbm5fY3JlYXRlJiMzNDssCiAgICAmIzM0O3NtY191bmhhc2hfc2smIzM0OywKICAgICYjMzQ7c21jX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHNvY2tldCB0ZWFyZG93biAoc21jX2Nvbm5fZnJlZSkgYW5kIHNvY2tldCBkaWFnbm9zdGljcyAoc21jX2RpYWcpIGJ5IHVuaGFzaGluZyB0aGUgc29ja2V0IGVhcmxpZXIgYW5kIHRyYWNraW5nIHRoZSB1bmhhc2ggc3RhdGUgdmlhIGEgbmV3IGB1bmhhc2hlZGAgZmxhZyBpbiBgc3RydWN0IHNtY19jb25uZWN0aW9uYC5cblxuMS4gVGhlIG5ldyBgdW5oYXNoZWRgIGZpZWxkIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgc21jX3NvY2tgIHZpYSBgc2tfYWxsb2MoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkpIGFuZCBpcyBleHBsaWNpdGx5IHJlc2V0IHRvIDAgaW4gYHNtY19jb25uX2NyZWF0ZSgpYC5cbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXG4zLiBObyBrZXJuZWwtdG8tdXNlciBjb3B5IHN0cnVjdHVyZXMgKHN1Y2ggYXMgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgc3RydWN0dXJlcykgaGF2ZSBoYWQgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyBpbnRyb2R1Y2VkLlxuNC4gVGhlIHJhY2UgY29uZGl0aW9uIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGhhc2ggbWFuYWdlbWVudCBhbmQgbGluayBncm91cCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgaW4gdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuIEl0IGludHJvZHVjZXMgc21jX2Nvbm5fdW5oYXNoKCkgd2l0aCBhIG5ldyBjb25uLVx1MDAzZXVuaGFzaGVkIGZsYWcgdG8gZW5zdXJlIG5vbi1mYWxsYmFjayBTTUMgc29ja2V0cyBhcmUgdW5oYXNoZWQgZXhhY3RseSBvbmNlIGJlZm9yZSBsaW5rIGdyb3VwL2xpbmsgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBzb2NrZXQgZGlhZ25vc3RpYyBkdW1wcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBuZXR3b3JraW5nIHNvY2tldCBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNvZGUgYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBzb2NrZXQgYW5kIHNvY2tfZGlhZyBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjg2NjliZjJiMDRmYjA5NzAxZmY1ZTRmYmUwYWZjZGMwNjAyMDIzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTA6MTg6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9hZl9zbWMuYyBiL25ldC9zbWMvYWZfc21jLmNcbmluZGV4IGU5ZjkzYjNhYjQzNWIuLjhjNzgxYTRhNDQ4NWIgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL2FmX3NtYy5jXG5AQCAtMzEwLDcgJiM0MzszMTAsMTUgQEAgc3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxuIFx0XHRzbWNfcmVzdG9yZV9mYWxsYmFja19jaGFuZ2VzKHNtYyk7XG4gXHR9XG4gXG4tXHRzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzayk7XG4mIzQzO1x0LyogRmFsbGJhY2sgc29ja2V0cyBuZXZlciBjYWxsIHNtY19jb25uX2ZyZWUoKSwgc28gdW5oYXNoIGRpcmVjdGx5LlxuJiM0MztcdCAqIE5vbi1mYWxsYmFjayBzb2NrZXRzIHVzZSBzbWNfY29ubl91bmhhc2goKSBzbyB0aGF0IHRoZSBjb25uLVx1MDAzZXVuaGFzaGVkXG4mIzQzO1x0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXG4mIzQzO1x0ICogZmlyc3QgKGUuZy4gdmlhIHNtY19jb25uX2tpbGwoKSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNtYy1cdTAwM2V1c2VfZmFsbGJhY2spXG4mIzQzO1x0XHRzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzayk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0c21jX2Nvbm5fdW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbiBcbiBcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEKSB7XG4gXHRcdGlmIChzbWMtXHUwMDNlY2xjc29jaykge1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jLmggYi9uZXQvc21jL3NtYy5oXG5pbmRleCA0MjdiNmQ2M2I5OTMxLi4wNzUzMTIyNzg4MzVjIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWMuaFxuQEAgLTI3OSw2ICYjNDM7Mjc5LDcgQEAgc3RydWN0IHNtY19jb25uZWN0aW9uIHtcbiBcdHU2NFx0XHRcdHBlZXJfdG9rZW47XHQvKiBTTUMtRCB0b2tlbiBvZiBwZWVyICovXG4gXHR1OFx0XHRcdGtpbGxlZDtcdFx0LyogYWJub3JtYWwgdGVybWluYXRpb24gKi9cbiBcdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuJiM0MztcdHU4XHRcdFx0dW5oYXNoZWQ7XHQvKiByZW1vdmVkIGZyb20gc29jayBoYXNoICovXG4gXHR1OFx0XHRcdG91dF9vZl9zeW5jO1x0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IDA0YWVkZDk1NzU0M2EuLmUzMDIyMjFjMzVlM2YgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTEyNTEsNiAmIzQzOzEyNTEsMjAgQEAgc3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHR9XG4gfVxuIFxuJiM0MzsvKiB1bmhhc2ggdGhlIHNvY2tldCBvbmNlOyBvd25zIHRoZSBzaW5nbGUgdW5oYXNoIGZvciBhbGwgbm9uLWZhbGxiYWNrIHBhdGhzLlxuJiM0MzsgKiBFdmVyeSBjYWxsZXIgaG9sZHMgbG9ja19zb2NrIGZvciB0aGlzIHNvY2tldCwgc28gY29ubi1cdTAwM2V1bmhhc2hlZCBpcyBwcm90ZWN0ZWRcbiYjNDM7ICogYnkgdGhhdCBsb2NrIGFuZCBubyBzZXBhcmF0ZSBzeW5jaHJvbmlzYXRpb24gaXMgbmVlZGVkLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjb25uLVx1MDAzZXVuaGFzaGVkKSB7XG4mIzQzO1x0XHRjb25uLVx1MDAzZXVuaGFzaGVkID0gMTtcbiYjNDM7XHRcdHNtYy1cdTAwM2Vzay5za19wcm90LVx1MDAzZXVuaGFzaChcdTAwMjZzbWMtXHUwMDNlc2spO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuIHtcbkBAIC0xMjYzLDYgJiM0MzsxMjc3LDExIEBAIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4gXHRcdHJldHVybjtcbiBcbiBcdGNvbm4tXHUwMDNlZnJlZWQgPSAxO1xuJiM0MztcdC8qIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgbGdyL2xuayByZWZzIHNvIHRoZSBkaWFnIHJlYWRlciwgd2hpY2hcbiYjNDM7XHQgKiBpdGVyYXRlcyB1bmRlciB0aGUgc29ja2V0IGhhc2ggcmVhZF9sb2NrLCBjYW5ub3Qgc2VlIGEgY29ubmVjdGlvbiB3aG9zZVxuJiM0MztcdCAqIGxnciBvciBsbmsgaXMgYmVpbmcgZnJlZWQgY29uY3VycmVudGx5LlxuJiM0MztcdCAqL1xuJiM0MztcdHNtY19jb25uX3VuaGFzaChjb25uKTtcbiBcdGlmICghc21jX2Nvbm5fbGdyX3ZhbGlkKGNvbm4pKVxuIFx0XHQvKiBDb25uZWN0aW9uIGhhcyBhbHJlYWR5IHVucmVnaXN0ZXJlZCBmcm9tXG4gXHRcdCAqIGxpbmsgZ3JvdXAuXG5AQCAtMjA1Myw2ICYjNDM7MjA3Miw3IEBAIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4gXHRpZiAoIWNvbm4tXHUwMDNlbGdyLVx1MDAzZWlzX3NtY2QpXG4gXHRcdHNtY3JfbGlua19ob2xkKGNvbm4tXHUwMDNlbG5rKTsgLyogbGlua19wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXG4gXHRjb25uLVx1MDAzZWZyZWVkID0gMDtcbiYjNDM7XHRjb25uLVx1MDAzZXVuaGFzaGVkID0gMDtcbiBcdGNvbm4tXHUwMDNlbG9jYWxfdHhfY3RybC5jb21tb24udHlwZSA9IFNNQ19DRENfTVNHX1RZUEU7XG4gXHRjb25uLVx1MDAzZWxvY2FsX3R4X2N0cmwubGVuID0gU01DX1dSX1RYX1NJWkU7XG4gXHRjb25uLVx1MDAzZXVyZ19zdGF0ZSA9IFNNQ19VUkdfUkVBRDtcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmggYi9uZXQvc21jL3NtY19jb3JlLmhcbmluZGV4IDVjMThmMDhhNGM4YTUuLmYyM2Q2MGFlZjBiNzkgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX2NvcmUuaFxuQEAgLTU5NSw2ICYjNDM7NTk1LDcgQEAgdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgc21jX3JtYl9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiBpbnQgc21jX3ZsYW5fYnlfdGNwc2soc3RydWN0IHNvY2tldCAqY2xjc29jaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XG4gXG4mIzQzO3ZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG4gdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG4gaW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XG4gaW50IHNtY19jb3JlX2luaXQodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1NNQ19ESUFHJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtESUJTX0xPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2Nvbm5fdW5oYXNoJiMzNDssCiAgICAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAgICYjMzQ7X19zbWNfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7LAogICAgJiMzNDtzbWNfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGhhc2ggbWFuYWdlbWVudCBhbmQgbGluayBncm91cCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgaW4gdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuIEl0IGludHJvZHVjZXMgc21jX2Nvbm5fdW5oYXNoKCkgd2l0aCBhIG5ldyBjb25uLVx1MDAzZXVuaGFzaGVkIGZsYWcgdG8gZW5zdXJlIG5vbi1mYWxsYmFjayBTTUMgc29ja2V0cyBhcmUgdW5oYXNoZWQgZXhhY3RseSBvbmNlIGJlZm9yZSBsaW5rIGdyb3VwL2xpbmsgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBzb2NrZXQgZGlhZ25vc3RpYyBkdW1wcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBuZXR3b3JraW5nIHNvY2tldCBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNvZGUgYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBzb2NrZXQgYW5kIHNvY2tfZGlhZyBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjg2NjliZjJiMDRmYjA5NzAxZmY1ZTRmYmUwYWZjZGMwNjAyMDIzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTA6MTg6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc21jL2FmX3NtYy5jIGIvbmV0L3NtYy9hZl9zbWMuYwppbmRleCBlOWY5M2IzYWI0MzViLi44Yzc4MWE0YTQ0ODViIDEwMDY0NAotLS0gYS9uZXQvc21jL2FmX3NtYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvYWZfc21jLmMKQEAgLTMxMCw3ICYjNDM7MzEwLDE1IEBAIHN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYykKIAkJc21jX3Jlc3RvcmVfZmFsbGJhY2tfY2hhbmdlcyhzbWMpOwogCX0KIAotCXNrLSZndDtza19wcm90LSZndDt1bmhhc2goc2spOwomIzQzOwkvKiBGYWxsYmFjayBzb2NrZXRzIG5ldmVyIGNhbGwgc21jX2Nvbm5fZnJlZSgpLCBzbyB1bmhhc2ggZGlyZWN0bHkuCiYjNDM7CSAqIE5vbi1mYWxsYmFjayBzb2NrZXRzIHVzZSBzbWNfY29ubl91bmhhc2goKSBzbyB0aGF0IHRoZSBjb25uLSZndDt1bmhhc2hlZAomIzQzOwkgKiBmbGFnIGtlZXBzIHRoZSB1bmhhc2ggZXhhY3RseSBvbmNlIGV2ZW4gd2hlbiBzbWNfY29ubl9mcmVlKCkgYWxyZWFkeSByYW4KJiM0MzsJICogZmlyc3QgKGUuZy4gdmlhIHNtY19jb25uX2tpbGwoKSkuCiYjNDM7CSAqLwomIzQzOwlpZiAoc21jLSZndDt1c2VfZmFsbGJhY2spCiYjNDM7CQlzay0mZ3Q7c2tfcHJvdC0mZ3Q7dW5oYXNoKHNrKTsKJiM0MzsJZWxzZQomIzQzOwkJc21jX2Nvbm5fdW5oYXNoKCZhbXA7c21jLSZndDtjb25uKTsKIAogCWlmIChzay0mZ3Q7c2tfc3RhdGUgPT0gU01DX0NMT1NFRCkgewogCQlpZiAoc21jLSZndDtjbGNzb2NrKSB7CmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaAppbmRleCA0MjdiNmQ2M2I5OTMxLi4wNzUzMTIyNzg4MzVjIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtYy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jLmgKQEAgLTI3OSw2ICYjNDM7Mjc5LDcgQEAgc3RydWN0IHNtY19jb25uZWN0aW9uIHsKIAl1NjQJCQlwZWVyX3Rva2VuOwkvKiBTTUMtRCB0b2tlbiBvZiBwZWVyICovCiAJdTgJCQlraWxsZWQ7CQkvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqLwogCXU4CQkJZnJlZWQ7CQkvKiBub3JtYWwgdGVybWluYXRpb24gKi8KJiM0MzsJdTgJCQl1bmhhc2hlZDsJLyogcmVtb3ZlZCBmcm9tIHNvY2sgaGFzaCAqLwogCXU4CQkJb3V0X29mX3N5bmM7CS8qIG91dCBvZiBzeW5jIHdpdGggcGVlciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jCmluZGV4IDA0YWVkZDk1NzU0M2EuLmUzMDIyMjFjMzVlM2YgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmMKQEAgLTEyNTEsNiAmIzQzOzEyNTEsMjAgQEAgc3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sCiAJfQogfQogCiYjNDM7LyogdW5oYXNoIHRoZSBzb2NrZXQgb25jZTsgb3ducyB0aGUgc2luZ2xlIHVuaGFzaCBmb3IgYWxsIG5vbi1mYWxsYmFjayBwYXRocy4KJiM0MzsgKiBFdmVyeSBjYWxsZXIgaG9sZHMgbG9ja19zb2NrIGZvciB0aGlzIHNvY2tldCwgc28gY29ubi0mZ3Q7dW5oYXNoZWQgaXMgcHJvdGVjdGVkCiYjNDM7ICogYnkgdGhhdCBsb2NrIGFuZCBubyBzZXBhcmF0ZSBzeW5jaHJvbmlzYXRpb24gaXMgbmVlZGVkLgomIzQzOyAqLwomIzQzO3ZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7CiYjNDM7CiYjNDM7CWlmICghY29ubi0mZ3Q7dW5oYXNoZWQpIHsKJiM0MzsJCWNvbm4tJmd0O3VuaGFzaGVkID0gMTsKJiM0MzsJCXNtYy0mZ3Q7c2suc2tfcHJvdC0mZ3Q7dW5oYXNoKCZhbXA7c21jLSZndDtzayk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi8KIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pCiB7CkBAIC0xMjYzLDYgJiM0MzsxMjc3LDExIEBAIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pCiAJCXJldHVybjsKIAogCWNvbm4tJmd0O2ZyZWVkID0gMTsKJiM0MzsJLyogVW5oYXNoIGJlZm9yZSBkcm9wcGluZyBsZ3IvbG5rIHJlZnMgc28gdGhlIGRpYWcgcmVhZGVyLCB3aGljaAomIzQzOwkgKiBpdGVyYXRlcyB1bmRlciB0aGUgc29ja2V0IGhhc2ggcmVhZF9sb2NrLCBjYW5ub3Qgc2VlIGEgY29ubmVjdGlvbiB3aG9zZQomIzQzOwkgKiBsZ3Igb3IgbG5rIGlzIGJlaW5nIGZyZWVkIGNvbmN1cnJlbnRseS4KJiM0MzsJICovCiYjNDM7CXNtY19jb25uX3VuaGFzaChjb25uKTsKIAlpZiAoIXNtY19jb25uX2xncl92YWxpZChjb25uKSkKIAkJLyogQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZnJvbQogCQkgKiBsaW5rIGdyb3VwLgpAQCAtMjA1Myw2ICYjNDM7MjA3Miw3IEBAIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpCiAJaWYgKCFjb25uLSZndDtsZ3ItJmd0O2lzX3NtY2QpCiAJCXNtY3JfbGlua19ob2xkKGNvbm4tJmd0O2xuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqLwogCWNvbm4tJmd0O2ZyZWVkID0gMDsKJiM0MzsJY29ubi0mZ3Q7dW5oYXNoZWQgPSAwOwogCWNvbm4tJmd0O2xvY2FsX3R4X2N0cmwuY29tbW9uLnR5cGUgPSBTTUNfQ0RDX01TR19UWVBFOwogCWNvbm4tJmd0O2xvY2FsX3R4X2N0cmwubGVuID0gU01DX1dSX1RYX1NJWkU7CiAJY29ubi0mZ3Q7dXJnX3N0YXRlID0gU01DX1VSR19SRUFEOwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5oIGIvbmV0L3NtYy9zbWNfY29yZS5oCmluZGV4IDVjMThmMDhhNGM4YTUuLmYyM2Q2MGFlZjBiNzkgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmgKQEAgLTU5NSw2ICYjNDM7NTk1LDcgQEAgdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pOwogdm9pZCBzbWNfcm1iX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pOwogaW50IHNtY192bGFuX2J5X3RjcHNrKHN0cnVjdCBzb2NrZXQgKmNsY3NvY2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpOwogCiYjNDM7dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTsKIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pOwogaW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7CiBpbnQgc21jX2NvcmVfaW5pdCh2b2lkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5NwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCYjMzk7cyBmdXp6LXdvcnRoeS4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIFNNQyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgYGFmX3NtYy5jYCwgYHNtYy5oYCwgYW5kIGBzbWNfY29yZS5jYCBmaWxlcy4gVGhhdCYjMzk7cyBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zLCBBRl9TTUMgc29ja2V0IGZhbWlseS4gR29vZCwgSSYjMzk7bSBmYW1pbGlhciB3aXRoIHRoYXQuIE5vdywgd2hhdCYjMzk7cyBjaGFuZ2VkPwoKRXNzZW50aWFsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBjb25kaXRpb25hbCBgdW5oYXNoYCBiYXNlZCBvbiBgc21jLSZndDt1c2VfZmFsbGJhY2tgIGluIGBfX3NtY19yZWxlYXNlYC4gSWYgd2UmIzM5O3JlIHVzaW5nIGZhbGxiYWNrIG1vZGUsIGl0IGdvZXMgdGhyb3VnaCB0aGUgdXN1YWwgYHNrX3Byb3QtJmd0O3VuaGFzaGAsIG90aGVyd2lzZSBpdCBjYWxscyBgc21jX2Nvbm5fdW5oYXNoYC4gIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYSBgdW5oYXNoZWRgIGZsYWcgdG8gdGhlIGBzbWNfY29ubmVjdGlvbmAgc3RydWN0LCBhbmQgYSBuZXcgYHNtY19jb25uX3VuaGFzaGAgZnVuY3Rpb24uICBJdCYjMzk7cyBpbml0aWFsaXplZCBpbiBgc21jX2Nvbm5fY3JlYXRlYCBhbmQgY2FsbGVkIGR1cmluZyBgc21jX2Nvbm5fZnJlZWAuIEludGVyZXN0aW5nLgoKTm93LCBmb3IgZnV6emluZywgSSBuZWVkIHRvIGtub3cgaG93IHJlYWNoYWJsZSB0aGlzIGNvZGUgaXMuIFNNQyBzb2NrZXRzIGNhbiBiZSBjcmVhdGVkIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIHN0YW5kYXJkIGBzb2NrZXQoQUZfU01DLCAuLi4pYCBjYWxscywgb3IgdmlhIHRoZSBgQUZfSU5FVGAvYEFGX0lORVQ2YCBwYXRod2F5cyBhcyB3ZWxsLiBUaGF04oCZcyBnb29kIOKAkyB3ZSBoYXZlIGNvbnRyb2wgZnJvbSB1c2VyIHNwYWNlLiAgQW5kLCB0aGVyZSYjMzk7cyBldmVuIGxvb3BiYWNrLCBmYWxsYmFjaywgb3IgZW11bGF0ZWQgU01DIGRldmljZXMgd2hpY2ggd2lkZW5zIHRoZSBhdHRhY2sgc3VyZmFjZSBldmVuIGZ1cnRoZXIgKFNNQy1EIGxvb3BiYWNrLCBJU00sIFNNQy1SIHZpYSBzb2Z0LVJvQ0UsIHJ4ZSwgZXRjLiwgYW5kIGZhbGxiYWNrIFRDUCkuICBTeXprYWxsZXIgaXMgYWxyZWFkeSBmdXp6aW5nIGBBRl9TTUNgLCB3aGljaCBpcyBhIHBvc2l0aXZlIHNpZ24uCgpOZXh0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgdG8gc2VlIHdoYXQgY29uZmlncyBhcmUgaW52b2x2ZWQsIGRlcGVuZGVuY2llcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyB0aGF0IGNvdWxkIGluY3JlYXNlIHRoZSBhdHRhY2sgc3VyZmFjZSwgb3IgbWFrZSBmdXp6aW5nIHRoaXMgbW9yZSBwcm9kdWN0aXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byByZWFjaCB0aGUgY29kZSBjaGFuZ2UgaW4gZGlmZmVyZW50IGNvbnRleHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlOgoKKipEaXZpbmcgaW50byB0aGUgU01DIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gU3lzdGVtIE1hbmFnZW1lbnQgQ29udHJvbCAoU01DKSBuZXR3b3JraW5nLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGtub2JzIHRoZSB1c2VyIGhhcyB0byB0dW5lLCBob3cgZGVwZW5kZW5jaWVzIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBkZWZhdWx0cyBhcmUgcHJvdmlkZWQuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIHRoZSBoaWVyYXJjaHkg4oCTIGlzIGl0IGEgdG9wLWxldmVsIGZlYXR1cmUsIG9yIGlzIGl0IG5lc3RlZCB1bmRlciBzb21lIGJyb2FkZXIgbmV0d29ya2luZyBvciBoYXJkd2FyZSBjb250ZXh0PyBUaGUgZGVwZW5kZW5jaWVzIGFyZSBnb2luZyB0byBiZSBrZXk7IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGFyZSByZXF1aXJlZCBvciBpbmNvbXBhdGlibGUuIEkmIzM5O20gYWxzbyBzY2FubmluZyBmb3IgYW55IHBvdGVudGlhbCB3YXJuaW5ncyBvciBjb21tZW50YXJ5IHdpdGhpbiB0aGUgZmlsZS4gSXQmIzM5O3MgbGlrZWx5IGdvaW5nIHRvIGluY2x1ZGUgb3B0aW9ucyBmb3IgZW5hYmxpbmcgdGhlIFNNQyBwcm90b2NvbCwgcG9zc2libHkgc3BlY2lmeWluZyB2YXJpYW50cyBsaWtlIFNNQy1SIG9yIFNNQy1ELCBhbmQgcGVyaGFwcyBvcHRpb25zIHRvIGNvbmZpZ3VyZSBidWZmZXIgc2l6ZXMsIGNvbm5lY3Rpb24gbGltaXRzLCBhbmQgb3RoZXIgcGVyZm9ybWFuY2UvdHVuaW5nIHBhcmFtZXRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYHNlbGVjdGAgYW5kIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBsb2dpYy4gVGhpcyBpcyBteSBjaGFuY2UgdG8gYXNzZXNzIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlc2lnbiwgYW5kIGhvdyBmbGV4aWJsZSB0aGUgY29kZSBpcy4gSSBhbSBleHBlY3Rpbmcgc29tZSBzb2xpZCBkb2N1bWVudGF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgaG9wZSB0byBjb21lIG91dCB3aXRoIGEgc291bmQgZ3Jhc3Agb2YgdGhlIG9wdGlvbnMgYW5kIHRoZWlyIHJhbWlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU01DXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFNNQy1SIHByb3ZpZGVzIGEgXCYjMzQ7c29ja2V0cyBvdmVyIFJETUFcJiMzNDsgc29sdXRpb24gbWFraW5nIHVzZSBvZlxuICAgNzpcdFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcbiAgIDg6XHRcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cbiAgIDk6XHRcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xuICAxMDpcdFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFNNQ19ESUFHXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBTTUNcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcbiAgMTk6XHRcdCAgc21jc3MuXG4gIDIwOlx0XG4gIDIxOlx0XHQgIGlmIHVuc3VyZSwgc2F5IFkuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxuICAyNDpcdFx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbiAgMjY6XHRcdGRlZmF1bHQgeVxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBTTUNfSFNfQ1RSTF9CUEYgZW5hYmxlcyBzdXBwb3J0IHRvIHJlZ2lzdGVyIGdlbmVyaWMgZUJQRiBob29rIGZvciBTTUNcbiAgMjk6XHRcdCAgaGFuZHNoYWtlIGZsb3csIHdoaWNoIG9mZmVyIG11Y2ggZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yXG4gIDMwOlx0XHQgIG9mIHRoZSBTTUMgcHJvdG9jb2wgc3RhY2sgY29tcGFyZWQgdG8gYSBjb21wbGV0ZSBrZXJuZWwtYmFzZWQgYXBwcm9hY2guIFNlbGVjdFxuICAzMTpcdFx0ICB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBmaWx0cmluZyB0aGUgaGFuZHNoYWtlIHByb2Nlc3MgdmlhIGVCUEYgcHJvZ3JhbXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk5MgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nICYjMzQ7RElCUyYjMzQ7IC0gQ29uZmlndXJhdGlvbiBvciBUeXBvPyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gVGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyAmIzM0O0RJQlMmIzM0OyB0aGluZyBpcyBldmVuIGEgcmVhbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IganVzdCBhIHNpbXBsZSB0eXBvIHRoYXQmIzM5O3Mgc2xpcHBlZCB0aHJvdWdoLiBJJiMzOTt2ZSBnb3QgYSBwcmV0dHkgZ29vZCBub3NlIGZvciB0aGVzZSB0aGluZ3MsIHNvIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpdHMgdmFsaWRpdHkuIE15IGd1dCB0ZWxscyBtZSBJIHNob3VsZCAqaW1tZWRpYXRlbHkqIHJlYWNoIGZvciB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCYjMzk7cyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2Ugb2YgdHJ1dGggaW4gdGhpcyBkb21haW4uIEkgbmVlZCB0byBjb25kdWN0IGEgdGhvcm91Z2ggc2VhcmNoIGZvciAmIzM0O0RJQlMmIzM0OyB3aXRoaW4gdGhlbS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBkZWZpbmVkIHNvbWV3aGVyZS4gSWYgaXQgKmlzKiBhIHZhbGlkIG9wdGlvbiwgdGhhdCB0ZWxscyBtZSBhIGxvdCBhYm91dCB0aGUgY29udGV4dCBhbmQgdGhlIHByb2JsZW0gSSYjMzk7bSBkZWFsaW5nIHdpdGguIElmIGl0ICppc24mIzM5O3QqLCB3ZWxsLCB0aGVuIEkga25vdyBleGFjdGx5IHdoZXJlIHRvIGJlZ2luIG15IHRyb3VibGVzaG9vdGluZyBieSBsb29raW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGFyZWEgZm9yIG90aGVyIHRoaW5ncy4gVGhhdCB3b3VsZCBhbHNvIHRlbGwgbWUgd2hlcmUgdGhlIHR5cG8gaXMgbW9zdCBsaWtlbHkgbG9jYXRlZCwgd2hpY2ggd291bGQgYmUgcXVpdGUgdXNlZnVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgS2NvbmZpZyByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBESUJTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzOTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLY29uZmlnIERpdmUgZm9yIERJQlMgb3IgU01DIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gRElCUyBvciBTTUMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9uIGxvZ2ljIGxpdmVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBicm9hZGVyIEtjb25maWcgbGFuZHNjYXBlIGZvciBtZW50aW9ucyBvZiBESUJTIG9yIFNNQyBpbiBvdGhlciBicmFuY2hlcyBvciBmaWxlcy4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGF0LCBhIHF1aWNrIGNoZWNrIG9uIGxpbmUgNCBvZiBgbmV0L3NtYy9LY29uZmlnYCBpbiBnaXQgc2VlbXMgbGlrZSBhIHNvbGlkIGluaXRpYWwgbW92ZTsgaXQgY291bGQgcXVpY2tseSBnaXZlIHNvbWUgaW5pdGlhbCBjbHVlcy4gTm93LCBhZnRlciB0aGF0LCBJIHRoaW5rIEkmIzM5O2xsIHplcm8gaW4gb24gdGhlIGBuZXQvc21jL0tjb25maWdgIGZpbGUgYWdhaW4gYW5kIGNoZWNrIHNwZWNpZmljYWxseSB3aGF0IHRoaXMgbW9kdWxlIGRlcGVuZHMgb24uIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIHdoeSB0aGV5IG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gYSBnaXZlbiBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTTUNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgU01DLVIgcHJvdmlkZXMgYSBcJiMzNDtzb2NrZXRzIG92ZXIgUkRNQVwmIzM0OyBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXG4gICA3Olx0XHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxuICAgODpcdFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxuICAgOTpcdFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXG4gIDEwOlx0XHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIGBuZXQvc21jL01ha2VmaWxlYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgYG5ldC9zbWMvTWFrZWZpbGVgLiBHaXZlbiB0aGlzIGxvY2F0aW9uLCBJIGltbWVkaWF0ZWx5IGV4cGVjdCB0byBmaW5kIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgc3BlY2lmaWMgdG8gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgcHJvdG9jb2wgc3RhY2suIEkgYW50aWNpcGF0ZSBkaXJlY3RpdmVzIGZvciBjb21waWxpbmcgdGhlIFNNQy1zcGVjaWZpYyBzb3VyY2UgZmlsZXMsIGxpbmtpbmcgdGhlbSwgYW5kIHBvdGVudGlhbGx5IGluY29ycG9yYXRpbmcgYW55IG5lY2Vzc2FyeSBsaWJyYXJpZXMgb3IgaGVhZGVyIGZpbGVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBmbGFncyByZWxhdGVkIHRvIGNvbXBpbGVyIG9wdGltaXphdGlvbiBmb3IgcGVyZm9ybWFuY2UsIHNwZWNpZmljIHRhcmdldCBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlIGluY2x1c2lvbiBvZiBhbnkgU01DLXJlbGF0ZWQga2VybmVsIG1vZHVsZXMuIEkmIzM5O2xsIGFsc28gYmUgbWVudGFsbHkgbWFwcGluZyB0aGlzIE1ha2VmaWxlIGFnYWluc3QgdGhlIG92ZXJhbGwgYnVpbGQgc3lzdGVtIHN0cnVjdHVyZTsgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIGhvdyB0aGVzZSBTTUMgY29tcG9uZW50cyBhcmUgaW50ZWdyYXRlZC4gSSYjMzk7bGwgc3RhcnQgYnkgcXVpY2tseSBzY2FubmluZyB0aGUgc3RydWN0dXJlLCBsb29raW5nIGZvciBjb21tb24gcGF0dGVybnMgYW5kIGltcG9ydGFudCB2YXJpYWJsZSBkZWZpbml0aW9ucy4gRnJvbSB0aGVyZSBJJiMzOTtsbCBkcmlsbCBkb3duIHRvIHRoZSBtb3JlIGludHJpY2F0ZSBkZXBlbmRlbmNpZXMgYW5kIHJ1bGVzIGFzIG5lZWRlZC4gVGhpcyB1c3VhbGx5IGhlbHBzIG1lIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjcml0aWNhbCBhbmQgd2hhdCYjMzk7cyBsZXNzIHNvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG4gICAzOlx0b2JqLSQoQ09ORklHX1NNQylcdCYjNDM7PSBzbWMub1xuICAgNDpcdG9iai0kKENPTkZJR19TTUNfRElBRylcdCYjNDM7PSBzbWNfZGlhZy5vXG4gICA1Olx0c21jLXkgOj0gYWZfc21jLm8gc21jX3BuZXQubyBzbWNfaWIubyBzbWNfY2xjLm8gc21jX2NvcmUubyBzbWNfd3IubyBzbWNfbGxjLm9cbiAgIDY6XHRzbWMteSAmIzQzOz0gc21jX2NkYy5vIHNtY190eC5vIHNtY19yeC5vIHNtY19jbG9zZS5vIHNtY19pc20ubyBzbWNfbmV0bGluay5vIHNtY19zdGF0cy5vXG4gICA3Olx0c21jLXkgJiM0Mzs9IHNtY190cmFjZXBvaW50Lm8gc21jX2luZXQub1xuICAgODpcdHNtYy0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzbWNfc3lzY3RsLm9cbiAgIDk6XHRzbWMtJChDT05GSUdfU01DX0hTX0NUUkxfQlBGKSAmIzQzOz0gc21jX2hzX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBESUJTIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIERJQlMgbW9kdWxlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9kaWJzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIGRlZmluZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCBjcml0aWNhbGx5LCBsaXN0IGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGxvZ2ljIHRoZXJlLCB0aGluZ3MgbGlrZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB0aGF0IHdpbGwgcmV2ZWFsIHdoaWNoIG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgbXVzdCBiZSBlbmFibGVkIGZvciBESUJTIHRvIGV2ZW4gYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgaW50ZWdyYXRpb24gd29yay4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgRElCU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7RGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlZmF1bHQgblxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgKERJQlMpIGlzIGEgY29tbXVuaWNhdGlvbiBtZXRob2QgdGhhdFxuICAgNzpcdFx0ICB1c2VzIGNvbW1vbiBwaHlzaWNhbCAoaW50ZXJuYWwpIG1lbW9yeSBmb3Igc3luY2hyb25vdXMgZGlyZWN0IGFjY2Vzc1xuICAgODpcdFx0ICBpbnRvIGEgcmVtb3RlIGJ1ZmZlci5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cbiAgMTE6XHRcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxuICAxMjpcdFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgRElCU19MT1xuICAxNTpcdFx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gRElCU1xuICAxNzpcdFx0ZGVmYXVsdCBuXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcbiAgMjA6XHRcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIFBhdGNoIGZvciBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgYW55IGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHksIG9yIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBvcHRpb25zLiBUaGUgYFNNQ19ESUFHYCBtZW50aW9uIGNhdWdodCBteSBleWUuIFRoZSBjb21tZW50IGluIHRoZSBwYXRjaCBpcyBwcmV0dHkgZXhwbGljaXQ6IGl0IHNlZW1zIGxpa2UgdGhlIHVuaGFzaGluZyBvZiBjb25uZWN0aW9ucyBiZWZvcmUgcmVsZWFzaW5nIHJlc291cmNlcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBkaWFnbm9zdGljIHJlYWRlciBhbmQgdGhlIHNvY2tldCBoYXNoIHJlYWQgbG9jay4gVGhpcyBzdWdnZXN0cyBgU01DX0RJQUdgIGlzIGRlZmluaXRlbHkgYSBrZXkgZmFjdG9yIGhlcmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgc21jX2Nvbm5fdW5oYXNoYCwgYHNtY19jb25uX2ZyZWVgLCBgc21jX2Nvbm5fY3JlYXRlYCwgYW5kIGBfX3NtY19yZWxlYXNlYCBhcmUgYWxsIGFmZmVjdGVkLiBOb3csIEkgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBzbWNfY29ubl91bmhhc2hgLCBgc21jX2Nvbm5fZnJlZWAsIGBfX3NtY19yZWxlYXNlYCwgYW5kIGBzbWNfcmVsZWFzZWAsIGFuZCB0aGVpciBzdXJyb3VuZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgaW1wYWN0IHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIHRoZSBkaWFnbm9zdGljIHJlYWRlci4gVGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMgY3JpdGljYWwgdG8gYSBjb21wbGV0ZSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfY29ubl9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMTItXG5uZXQvc21jL2FmX3NtYy5jOjMxMzpcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cbm5ldC9zbWMvYWZfc21jLmMtMzE0LVx0ICogTm9uLWZhbGxiYWNrIHNvY2tldHMgdXNlIHNtY19jb25uX3VuaGFzaCgpIHNvIHRoYXQgdGhlIGNvbm4tXHUwMDNldW5oYXNoZWRcbm5ldC9zbWMvYWZfc21jLmM6MzE1Olx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXG5uZXQvc21jL2FmX3NtYy5jLTMxNi1cdCAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLlxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzI5LVx0XHRpZiAoIXNtYy1cdTAwM2V1c2VfZmFsbGJhY2spXG5uZXQvc21jL2FmX3NtYy5jOjMzMDpcdFx0XHRzbWNfY29ubl9mcmVlKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbm5ldC9zbWMvYWZfc21jLmMtMzMxLVx0fVxuLS1cbm5ldC9zbWMvYWZfc21jLmM9MTAxNj1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IGxvY2FsX2ZpcnN0KVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTAyNC1cbm5ldC9zbWMvYWZfc21jLmM6MTAyNTpcdHNtY19jb25uX2ZyZWUoY29ubik7XG5uZXQvc21jL2FmX3NtYy5jLTEwMjYtXHRpZiAobG9jYWxfZmlyc3QgXHUwMDI2XHUwMDI2IGxncl92YWxpZClcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jPTEyOD12b2lkIHNtY19jbG9zZV9hY3RpdmVfYWJvcnQoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTYtXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTU3Olx0XHRzbWNfY29ubl9mcmVlKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTU4LVx0XHRyZWxlYXNlX2NsY3NvY2sgPSB0cnVlO1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTY3LVx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFNNQ19DTE9TRUQ7XG5uZXQvc21jL3NtY19jbG9zZS5jOjE2ODpcdFx0c21jX2Nvbm5fZnJlZShcdTAwMjZzbWMtXHUwMDNlY29ubik7XG5uZXQvc21jL3NtY19jbG9zZS5jLTE2OS1cdFx0cmVsZWFzZV9jbGNzb2NrID0gdHJ1ZTtcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jPTM1Nj1zdGF0aWMgdm9pZCBzbWNfY2xvc2VfcGFzc2l2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jLTQzNS1cdFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIXNrLVx1MDAzZXNrX3NvY2tldCkpIHtcbm5ldC9zbWMvc21jX2Nsb3NlLmM6NDM2Olx0XHRcdHNtY19jb25uX2ZyZWUoY29ubik7XG5uZXQvc21jL3NtY19jbG9zZS5jLTQzNy1cdFx0XHRpZiAoc21jLVx1MDAzZWNsY3NvY2spXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTA5MC1cdGF0b21pY19pbmMoXHUwMDI2Y29ubi1cdTAwM2VsbmstXHUwMDNlY29ubl9jbnQpO1xubmV0L3NtYy9zbWNfY29yZS5jOjEwOTE6XHQvKiBsaW5rX3B1dCBpbiBzbWNfY29ubl9mcmVlKCkgKi9cbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkyLVx0c21jcl9saW5rX2hvbGQoY29ubi1cdTAwM2VsbmspO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xMjU4PXZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTI2OC0vKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cbm5ldC9zbWMvc21jX2NvcmUuYzoxMjY5OnZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3MC17XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE5OTY9aW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3MC1cdH1cbm5ldC9zbWMvc21jX2NvcmUuYzoyMDcxOlx0c21jX2xncl9ob2xkKGNvbm4tXHUwMDNlbGdyKTsgLyogbGdyX3B1dCBpbiBzbWNfY29ubl9mcmVlKCkgKi9cbm5ldC9zbWMvc21jX2NvcmUuYy0yMDcyLVx0aWYgKCFjb25uLVx1MDAzZWxnci1cdTAwM2Vpc19zbWNkKVxubmV0L3NtYy9zbWNfY29yZS5jOjIwNzM6XHRcdHNtY3JfbGlua19ob2xkKGNvbm4tXHUwMDNlbG5rKTsgLyogbGlua19wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3NC1cdGNvbm4tXHUwMDNlZnJlZWQgPSAwO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaD01OTg9dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuaDo1OTk6dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG5uZXQvc21jL3NtY19jb3JlLmgtNjAwLWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgbmV0L3NtYy9zbWNfZGlhZy5jYCBmb3IgQ29ubmVjdGlvbiBEaWFnbm9zdGljcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgY29ubmVjdGlvbiBkaWFnbm9zdGljcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU3lzdGVtIE1hbmFnZW1lbnQgQ29udHJvbGxlciAoU01DKSBjb250ZXh0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgYG5ldC9zbWMvc21jX2RpYWcuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtICpyZWFkcyogY29ubmVjdGlvbiBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGRldGFpbHMgYWJvdXQgc29ja2V0cy4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGZpbGUgaXMgd2hlcmUgdGhlIGxvd2VyLWxldmVsIGRldGFpbHMgb2YgZ2F0aGVyaW5nIHRoZXNlIGNvbm5lY3Rpb24gc3RhdGlzdGljcyB3b3VsZCByZXNpZGUuIEkgZXhwZWN0IHRvIGZpbmQgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGxpa2UgY29ubmVjdGlvbiBzdGF0ZSwgc29ja2V0IGFkZHJlc3NlcywgZXJyb3IgY291bnRzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IG1ldHJpY3MgZm9yIGRlYnVnZ2luZyBhbmQgdHJvdWJsZXNob290aW5nIFNNQy1yZWxhdGVkIGNvbm5lY3Rpb25zLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBtZXRob2RzIGFuZCBkYXRhIHN0cnVjdHVyZXMgZW1wbG95ZWQgdG8gYWNjZXNzIGFuZCBpbnRlcnByZXQgdGhpcyBjb25uZWN0aW9uIGRhdGEgd2l0aGluIHRoZSBTTUMgZnJhbWV3b3JrLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gaXMga2V5IHRvIG15IG92ZXJhbGwgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5oYXNofHJlYWRfbG9ja3xzbWNfZGlhZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19TTUMpXHQmIzQzOz0gc21jLm9cbm5ldC9zbWMvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfU01DX0RJQUcpXHQmIzQzOz0gc21jX2RpYWcub1xubmV0L3NtYy9NYWtlZmlsZS01LXNtYy15IDo9IGFmX3NtYy5vIHNtY19wbmV0Lm8gc21jX2liLm8gc21jX2NsYy5vIHNtY19jb3JlLm8gc21jX3dyLm8gc21jX2xsYy5vXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xMjI9c3RhdGljIHN0cnVjdCBzb2NrICpzbWNfdGNwX3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTI1LVx0XHRcdFx0XHQgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbm5ldC9zbWMvYWZfc21jLmM6MTI2Olx0XHRcdFx0XHQgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcV91bmhhc2gsXG5uZXQvc21jL2FmX3NtYy5jLTEyNy1cdFx0XHRcdFx0ICBib29sICpvd25fcmVxLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTMzLVxubmV0L3NtYy9hZl9zbWMuYzoxMzQ6XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL2FmX3NtYy5jLTEzNS1cdHNtYyA9IHNtY19jbGNzb2NrX3VzZXJfZGF0YV9yY3Uoc2spO1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTUyLVx0LyogcGFzc3Rocm91Z2ggdG8gb3JpZ2luYWwgc3luIHJlY3Ygc29jayBmY3QgKi9cbm5ldC9zbWMvYWZfc21jLmM6MTUzOlx0Y2hpbGQgPSBzbWMtXHUwMDNlb3JpX2FmX29wcy1cdTAwM2VzeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LCByZXFfdW5oYXNoLFxubmV0L3NtYy9hZl9zbWMuYy0xNTQtXHRcdFx0XHRcdCAgICAgICBvd25fcmVxLCBvcHRfY2hpbGRfaW5pdCk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xOTk9aW50IHNtY19oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTIxMy1cbm5ldC9zbWMvYWZfc21jLmM6MjE0OnZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvc21jL2FmX3NtYy5jLTIxNS17XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yMzg9c3RydWN0IHByb3RvIHNtY19wcm90byA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI0Mi1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL2FmX3NtYy5jOjI0MzpcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9hZl9zbWMuYy0yNDQtXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTI1MT1zdHJ1Y3QgcHJvdG8gc21jX3Byb3RvNiA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI1NS1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL2FmX3NtYy5jOjI1NjpcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9hZl9zbWMuYy0yNTctXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMTItXG5uZXQvc21jL2FmX3NtYy5jOjMxMzpcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cbm5ldC9zbWMvYWZfc21jLmM6MzE0Olx0ICogTm9uLWZhbGxiYWNrIHNvY2tldHMgdXNlIHNtY19jb25uX3VuaGFzaCgpIHNvIHRoYXQgdGhlIGNvbm4tXHUwMDNldW5oYXNoZWRcbm5ldC9zbWMvYWZfc21jLmM6MzE1Olx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXG5uZXQvc21jL2FmX3NtYy5jLTMxNi1cdCAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLlxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzE4LVx0aWYgKHNtYy1cdTAwM2V1c2VfZmFsbGJhY2spXG5uZXQvc21jL2FmX3NtYy5jOjMxOTpcdFx0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spO1xubmV0L3NtYy9hZl9zbWMuYy0zMjAtXHRlbHNlXG5uZXQvc21jL2FmX3NtYy5jOjMyMTpcdFx0c21jX2Nvbm5fdW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbm5ldC9zbWMvYWZfc21jLmMtMzIyLVxuLS1cbm5ldC9zbWMvYWZfc21jLmM9ODUwPXN0YXRpYyB2b2lkIHNtY19mYmFja19mb3J3YXJkX3dha2V1cChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNvY2sgKmNsY3NrLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtODU3LVx0XHRcdFx0ICBzbWNfZmJhY2tfbWFya193b2tlbik7XG5uZXQvc21jL2FmX3NtYy5jOjg1ODpcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9zbWMvYWZfc21jLmMtODU5LVx0d3EgPSByY3VfZGVyZWZlcmVuY2UoY2xjc2stXHUwMDNlc2tfd3EpO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9ODcyPXN0YXRpYyB2b2lkIHNtY19mYmFja19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKmNsY3NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtODc1LVxubmV0L3NtYy9hZl9zbWMuYzo4NzY6XHRyZWFkX2xvY2tfYmgoXHUwMDI2Y2xjc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5uZXQvc21jL2FmX3NtYy5jLTg3Ny1cdHNtYyA9IHNtY19jbGNzb2NrX3VzZXJfZGF0YShjbGNzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz04ODQ9c3RhdGljIHZvaWQgc21jX2ZiYWNrX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKmNsY3NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtODg3LVxubmV0L3NtYy9hZl9zbWMuYzo4ODg6XHRyZWFkX2xvY2tfYmgoXHUwMDI2Y2xjc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5uZXQvc21jL2FmX3NtYy5jLTg4OS1cdHNtYyA9IHNtY19jbGNzb2NrX3VzZXJfZGF0YShjbGNzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz04OTY9c3RhdGljIHZvaWQgc21jX2ZiYWNrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpjbGNzaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTg5OS1cbm5ldC9zbWMvYWZfc21jLmM6OTAwOlx0cmVhZF9sb2NrX2JoKFx1MDAyNmNsY3NrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xubmV0L3NtYy9hZl9zbWMuYy05MDEtXHRzbWMgPSBzbWNfY2xjc29ja191c2VyX2RhdGEoY2xjc2spO1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9OTA4PXN0YXRpYyB2b2lkIHNtY19mYmFja19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKmNsY3NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtOTExLVxubmV0L3NtYy9hZl9zbWMuYzo5MTI6XHRyZWFkX2xvY2tfYmgoXHUwMDI2Y2xjc2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG5uZXQvc21jL2FmX3NtYy5jLTkxMy1cdHNtYyA9IHNtY19jbGNzb2NrX3VzZXJfZGF0YShjbGNzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0xNzQ1PXN0YXRpYyBpbnQgc21jX2NsY3NvY2tfYWNjZXB0KHN0cnVjdCBzbWNfc29jayAqbHNtYywgc3RydWN0IHNtY19zb2NrICoqbmV3X3NtYylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE3NzAtXHRpZiAocmMgXHUwMDNjIDAgfHwgbHNrLVx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQpIHtcbm5ldC9zbWMvYWZfc21jLmM6MTc3MTpcdFx0bmV3X3NrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKG5ld19zayk7XG5uZXQvc21jL2FmX3NtYy5jLTE3NzItXHRcdGlmIChuZXdfY2xjc29jaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTE4MzI9c3RydWN0IHNvY2sgKnNtY19hY2NlcHRfZGVxdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTg0Mi1cdFx0aWYgKG5ld19zay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEKSB7XG5uZXQvc21jL2FmX3NtYy5jOjE4NDM6XHRcdFx0bmV3X3NrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKG5ld19zayk7XG5uZXQvc21jL2FmX3NtYy5jLTE4NDQtXHRcdFx0aWYgKGlzay1cdTAwM2VjbGNzb2NrKSB7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yNjM4PXN0YXRpYyB2b2lkIHNtY19jbGNzb2NrX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKmxpc3Rlbl9jbGNzb2NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjY0MS1cbm5ldC9zbWMvYWZfc21jLmM6MjY0MjpcdHJlYWRfbG9ja19iaChcdTAwMjZsaXN0ZW5fY2xjc29jay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbm5ldC9zbWMvYWZfc21jLmMtMjY0My1cdGxzbWMgPSBzbWNfY2xjc29ja191c2VyX2RhdGEobGlzdGVuX2NsY3NvY2spO1xuLS1cbm5ldC9zbWMvc21jLmg9NDA9aW50IHNtY19oYXNoX3NrKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvc21jL3NtYy5oOjQxOnZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3NtYy9zbWMuaC00Mi12b2lkIHNtY19yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzayk7XG4tLVxubmV0L3NtYy9zbWMuaD0xOTU9c3RydWN0IHNtY19jb25uZWN0aW9uIHtcbi0tXG5uZXQvc21jL3NtYy5oLTI4MS1cdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xubmV0L3NtYy9zbWMuaDoyODI6XHR1OFx0XHRcdHVuaGFzaGVkO1x0LyogcmVtb3ZlZCBmcm9tIHNvY2sgaGFzaCAqL1xubmV0L3NtYy9zbWMuaC0yODMtXHR1OFx0XHRcdG91dF9vZl9zeW5jO1x0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9NDY5PXN0YXRpYyB2b2lkIHNtY19jZGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG4tLVxubmV0L3NtYy9zbWNfY2RjLmMtNDgzLVx0bGdyID0gc21jX2dldF9sZ3IobGluayk7XG5uZXQvc21jL3NtY19jZGMuYzo0ODQ6XHRyZWFkX2xvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xubmV0L3NtYy9zbWNfY2RjLmMtNDg1LVx0Y29ubiA9IHNtY19sZ3JfZmluZF9jb25uKG50b2hsKGNkYy1cdTAwM2V0b2tlbiksIGxncik7XG4tLVxubmV0L3NtYy9zbWNfY2xjLmM9MTE4PWludCBzbWNfY2xjX3VlaWRfY291bnQodm9pZClcbi0tXG5uZXQvc21jL3NtY19jbGMuYy0xMjEtXG5uZXQvc21jL3NtY19jbGMuYzoxMjI6XHRyZWFkX2xvY2soXHUwMDI2c21jX2NsY19laWRfdGFibGUubG9jayk7XG5uZXQvc21jL3NtY19jbGMuYy0xMjMtXHRjb3VudCA9IHNtY19jbGNfZWlkX3RhYmxlLnVlaWRfY250O1xuLS1cbm5ldC9zbWMvc21jX2NsYy5jPTIwNj1zdGF0aWMgaW50IF9zbWNfbmxfdWVpZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tLVxubmV0L3NtYy9zbWNfY2xjLmMtMjExLVxubmV0L3NtYy9zbWNfY2xjLmM6MjEyOlx0cmVhZF9sb2NrKFx1MDAyNnNtY19jbGNfZWlkX3RhYmxlLmxvY2spO1xubmV0L3NtYy9zbWNfY2xjLmMtMjEzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShsc3RfdWVpZCwgXHUwMDI2c21jX2NsY19laWRfdGFibGUubGlzdCwgbGlzdCkge1xuLS1cbm5ldC9zbWMvc21jX2NsYy5jPTIzOD1pbnQgc21jX25sX2R1bXBfc2VpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L3NtYy9zbWNfY2xjLmMtMjYxLVx0XHRnb3RvIGVycjtcbm5ldC9zbWMvc21jX2NsYy5jOjI2MjpcdHJlYWRfbG9jayhcdTAwMjZzbWNfY2xjX2VpZF90YWJsZS5sb2NrKTtcbm5ldC9zbWMvc21jX2NsYy5jLTI2My1cdHNlaWRfZW5hYmxlZCA9IHNtY19jbGNfZWlkX3RhYmxlLnNlaWRfZW5hYmxlZDtcbi0tXG5uZXQvc21jL3NtY19jbGMuYz0zMTY9Ym9vbCBzbWNfY2xjX21hdGNoX2VpZCh1OCAqbmVnb3RpYXRlZF9laWQsXG4tLVxubmV0L3NtYy9zbWNfY2xjLmMtMzIzLVx0bmVnb3RpYXRlZF9laWRbMF0gPSAwO1xubmV0L3NtYy9zbWNfY2xjLmM6MzI0Olx0cmVhZF9sb2NrKFx1MDAyNnNtY19jbGNfZWlkX3RhYmxlLmxvY2spO1xubmV0L3NtYy9zbWNfY2xjLmMtMzI1LVx0aWYgKHBlZXJfZWlkIFx1MDAyNlx1MDAyNiBsb2NhbF9laWQgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3NtYy9zbWNfY2xjLmM9NTYzPXN0YXRpYyBpbnQgc21jX2NsY19wcmZ4X3NldChzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLFxuLS1cbm5ldC9zbWMvc21jX2NsYy5jLTU4MC1cbm5ldC9zbWMvc21jX2NsYy5jOjU4MTpcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9zbWMvc21jX2NsYy5jLTU4Mi1cbi0tXG5uZXQvc21jL3NtY19jbGMuYz02NTc9aW50IHNtY19jbGNfcHJmeF9tYXRjaChzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLFxuLS1cbm5ldC9zbWMvc21jX2NsYy5jLTY2My1cbm5ldC9zbWMvc21jX2NsYy5jOjY2NDpcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9zbWMvc21jX2NsYy5jLTY2NS1cbi0tXG5uZXQvc21jL3NtY19jbGMuYz04NDY9aW50IHNtY19jbGNfc2VuZF9wcm9wb3NhbChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL3NtY19jbGMuYy05NDItXHRcdHYyX2V4dC1cdTAwM2VmZWF0dXJlX21hc2sgPSBodG9ucyhTTUNfRkVBVFVSRV9NQVNLKTtcbm5ldC9zbWMvc21jX2NsYy5jOjk0MzpcdFx0cmVhZF9sb2NrKFx1MDAyNnNtY19jbGNfZWlkX3RhYmxlLmxvY2spO1xubmV0L3NtYy9zbWNfY2xjLmMtOTQ0LVx0XHR2Ml9leHQtXHUwMDNlaGRyLmVpZF9jbnQgPSBzbWNfY2xjX2VpZF90YWJsZS51ZWlkX2NudDtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9NzE0PXN0YXRpYyB2b2lkIHNtY19sZ3JfZnJlZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtNzI3LVx0fVxubmV0L3NtYy9zbWNfY29yZS5jOjcyODpcdHJlYWRfbG9ja19iaChcdTAwMjZsZ3ItXHUwMDNlY29ubnNfbG9jayk7XG5uZXQvc21jL3NtY19jb3JlLmMtNzI5LVx0Y29ubnMgPSBSQl9FTVBUWV9ST09UKFx1MDAyNmxnci1cdTAwM2Vjb25uc19hbGwpO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xMDk1PXN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTEyMy1hZ2Fpbjpcbm5ldC9zbWMvc21jX2NvcmUuYzoxMTI0Olx0cmVhZF9sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xMTI1LVx0Zm9yIChub2RlID0gcmJfZmlyc3QoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2FsbCk7IG5vZGU7IG5vZGUgPSByYl9uZXh0KG5vZGUpKSB7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEyMjQ9c3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTMtXG5uZXQvc21jL3NtY19jb3JlLmM6MTI1NDovKiB1bmhhc2ggdGhlIHNvY2tldCBvbmNlOyBvd25zIHRoZSBzaW5nbGUgdW5oYXNoIGZvciBhbGwgbm9uLWZhbGxiYWNrIHBhdGhzLlxubmV0L3NtYy9zbWNfY29yZS5jOjEyNTU6ICogRXZlcnkgY2FsbGVyIGhvbGRzIGxvY2tfc29jayBmb3IgdGhpcyBzb2NrZXQsIHNvIGNvbm4tXHUwMDNldW5oYXNoZWQgaXMgcHJvdGVjdGVkXG5uZXQvc21jL3NtY19jb3JlLmMtMTI1Ni0gKiBieSB0aGF0IGxvY2sgYW5kIG5vIHNlcGFyYXRlIHN5bmNocm9uaXNhdGlvbiBpcyBuZWVkZWQuXG5uZXQvc21jL3NtY19jb3JlLmMtMTI1Ny0gKi9cbm5ldC9zbWMvc21jX2NvcmUuYzoxMjU4OnZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU5LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTI2MS1cbm5ldC9zbWMvc21jX2NvcmUuYzoxMjYyOlx0aWYgKCFjb25uLVx1MDAzZXVuaGFzaGVkKSB7XG5uZXQvc21jL3NtY19jb3JlLmM6MTI2MzpcdFx0Y29ubi1cdTAwM2V1bmhhc2hlZCA9IDE7XG5uZXQvc21jL3NtY19jb3JlLmM6MTI2NDpcdFx0c21jLVx1MDAzZXNrLnNrX3Byb3QtXHUwMDNldW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTI2NS1cdH1cbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTI2OT12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjgwLVx0LyogVW5oYXNoIGJlZm9yZSBkcm9wcGluZyBsZ3IvbG5rIHJlZnMgc28gdGhlIGRpYWcgcmVhZGVyLCB3aGljaFxubmV0L3NtYy9zbWNfY29yZS5jOjEyODE6XHQgKiBpdGVyYXRlcyB1bmRlciB0aGUgc29ja2V0IGhhc2ggcmVhZF9sb2NrLCBjYW5ub3Qgc2VlIGEgY29ubmVjdGlvbiB3aG9zZVxubmV0L3NtYy9zbWNfY29yZS5jLTEyODItXHQgKiBsZ3Igb3IgbG5rIGlzIGJlaW5nIGZyZWVkIGNvbmN1cnJlbnRseS5cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjgzLVx0ICovXG5uZXQvc21jL3NtY19jb3JlLmM6MTI4NDpcdHNtY19jb25uX3VuaGFzaChjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjg1LVx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE1Nzk9c3RhdGljIHZvaWQgX19zbWNfbGdyX3Rlcm1pbmF0ZShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgYm9vbCBzb2Z0KVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xNTkxLVx0Lyoga2lsbCByZW1haW5pbmcgbGluayBncm91cCBjb25uZWN0aW9ucyAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjE1OTI6XHRyZWFkX2xvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xubmV0L3NtYy9zbWNfY29yZS5jLTE1OTMtXHRub2RlID0gcmJfZmlyc3QoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2FsbCk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE2MDItXHRcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7IC8qIHNvY2tfaG9sZCBhYm92ZSAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjE2MDM6XHRcdHJlYWRfbG9ja19iaChcdTAwMjZsZ3ItXHUwMDNlY29ubnNfbG9jayk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTYwNC1cdFx0bm9kZSA9IHJiX2ZpcnN0KFx1MDAyNmxnci1cdTAwM2Vjb25uc19hbGwpO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xOTE4PWludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xOTI2LVxubmV0L3NtYy9zbWNfY29yZS5jOjE5Mjc6XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTkyOC1cbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTk5Nj1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc0LVx0Y29ubi1cdTAwM2VmcmVlZCA9IDA7XG5uZXQvc21jL3NtY19jb3JlLmM6MjA3NTpcdGNvbm4tXHUwMDNldW5oYXNoZWQgPSAwO1xubmV0L3NtYy9zbWNfY29yZS5jLTIwNzYtXHRjb25uLVx1MDAzZWxvY2FsX3R4X2N0cmwuY29tbW9uLnR5cGUgPSBTTUNfQ0RDX01TR19UWVBFO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaD01OTY9aW50IHNtY192bGFuX2J5X3RjcHNrKHN0cnVjdCBzb2NrZXQgKmNsY3NvY2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xubmV0L3NtYy9zbWNfY29yZS5oLTU5Ny1cbm5ldC9zbWMvc21jX2NvcmUuaDo1OTg6dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbm5ldC9zbWMvc21jX2NvcmUuaC01OTktdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZXRfZGlhZy5oXHUwMDNlXG5uZXQvc21jL3NtY19kaWFnLmM6MTg6I2luY2x1ZGUgXHUwMDNjbGludXgvc21jX2RpYWcuaFx1MDAzZVxubmV0L3NtYy9zbWNfZGlhZy5jLTE5LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjUtXG5uZXQvc21jL3NtY19kaWFnLmM6MjY6c3RydWN0IHNtY19kaWFnX2R1bXBfY3R4IHtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNy1cdGludCBwb3NbMl07XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTI5LVxubmV0L3NtYy9zbWNfZGlhZy5jOjMwOnN0YXRpYyBzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKnNtY19kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L3NtYy9zbWNfZGlhZy5jLTMxLXtcbm5ldC9zbWMvc21jX2RpYWcuYzozMjpcdHJldHVybiAoc3RydWN0IHNtY19kaWFnX2R1bXBfY3R4ICopY2ItXHUwMDNlY3R4O1xubmV0L3NtYy9zbWNfZGlhZy5jLTMzLX1cbm5ldC9zbWMvc21jX2RpYWcuYy0zNC1cbm5ldC9zbWMvc21jX2RpYWcuYzozNTpzdGF0aWMgdm9pZCBzbWNfZGlhZ19tc2dfY29tbW9uX2ZpbGwoc3RydWN0IHNtY19kaWFnX21zZyAqciwgc3RydWN0IHNvY2sgKnNrKVxubmV0L3NtYy9zbWNfZGlhZy5jLTM2LXtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtNTktXG5uZXQvc21jL3NtY19kaWFnLmM6NjA6c3RhdGljIGludCBzbWNfZGlhZ19tc2dfYXR0cnNfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc21jL3NtY19kaWFnLmM6NjE6XHRcdFx0XHQgICBzdHJ1Y3Qgc21jX2RpYWdfbXNnICpyLFxubmV0L3NtYy9zbWNfZGlhZy5jLTYyLVx0XHRcdFx0ICAgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy03MS1cbm5ldC9zbWMvc21jX2RpYWcuYzo3MjpzdGF0aWMgaW50IF9fc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc21jL3NtY19kaWFnLmMtNzMtXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxubmV0L3NtYy9zbWNfZGlhZy5jOjc0Olx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzbWNfZGlhZ19yZXEgKnJlcSxcbm5ldC9zbWMvc21jX2RpYWcuYy03NS1cdFx0XHQgICBzdHJ1Y3QgbmxhdHRyICpiYylcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtNzctXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHNtY19zayhzayk7XG5uZXQvc21jL3NtY19kaWFnLmM6Nzg6XHRzdHJ1Y3Qgc21jX2RpYWdfZmFsbGJhY2sgZmFsbGJhY2s7XG5uZXQvc21jL3NtY19kaWFnLmMtNzktXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XG5uZXQvc21jL3NtY19kaWFnLmM6ODA6XHRzdHJ1Y3Qgc21jX2RpYWdfbXNnICpyO1xubmV0L3NtYy9zbWNfZGlhZy5jLTgxLVx0c3RydWN0IG5sbXNnaGRyICpubGg7XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTg4LVx0ciA9IG5sbXNnX2RhdGEobmxoKTtcbm5ldC9zbWMvc21jX2RpYWcuYzo4OTpcdHNtY19kaWFnX21zZ19jb21tb25fZmlsbChyLCBzayk7XG5uZXQvc21jL3NtY19kaWFnLmMtOTAtXHRyLVx1MDAzZWRpYWdfc3RhdGUgPSBzay1cdTAwM2Vza19zdGF0ZTtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtOTctXHR1c2VyX25zID0gc2tfdXNlcl9ucyhORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikuc2spO1xubmV0L3NtYy9zbWNfZGlhZy5jOjk4Olx0aWYgKHNtY19kaWFnX21zZ19hdHRyc19maWxsKHNrLCBza2IsIHIsIHVzZXJfbnMpKVxubmV0L3NtYy9zbWNfZGlhZy5jLTk5LVx0XHRnb3RvIGVycm91dDtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTA4LVx0XHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcdTAwMjZzbWMtXHUwMDNlY29ubjtcbm5ldC9zbWMvc21jX2RpYWcuYzoxMDk6XHRcdHN0cnVjdCBzbWNfZGlhZ19jb25uaW5mbyBjaW5mbyA9IHtcbm5ldC9zbWMvc21jX2RpYWcuYy0xMTAtXHRcdFx0LnRva2VuID0gY29ubi1cdTAwM2VhbGVydF90b2tlbl9sb2NhbCxcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTUwLVxubmV0L3NtYy9zbWNfZGlhZy5jOjE1MTpcdFx0c3RydWN0IHNtY19kaWFnX2xncmluZm8gbGluZm8gPSB7XG5uZXQvc21jL3NtY19kaWFnLmMtMTUyLVx0XHRcdC5yb2xlID0gc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXJvbGUsXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTE5NS1cbm5ldC9zbWMvc21jX2RpYWcuYzoxOTY6c3RhdGljIGludCBzbWNfZGlhZ19kdW1wX3Byb3RvKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTctXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IHBfdHlwZSlcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTgte1xubmV0L3NtYy9zbWNfZGlhZy5jOjE5OTpcdHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqY2JfY3R4ID0gc21jX2R1bXBfY29udGV4dChjYik7XG5uZXQvc21jL3NtY19kaWFnLmMtMjAwLVx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjA2LVxubmV0L3NtYy9zbWNfZGlhZy5jOjIwNzpcdHJlYWRfbG9jayhcdTAwMjZwcm90LVx1MDAzZWguc21jX2hhc2gtXHUwMDNlbG9jayk7XG5uZXQvc21jL3NtY19kaWFnLmMtMjA4LVx0aGVhZCA9IFx1MDAyNnByb3QtXHUwMDNlaC5zbWNfaGFzaC1cdTAwM2VodDtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjE2LVx0XHRcdGdvdG8gbmV4dDtcbm5ldC9zbWMvc21jX2RpYWcuYzoyMTc6XHRcdHJjID0gX19zbWNfZGlhZ19kdW1wKHNrLCBza2IsIGNiLCBubG1zZ19kYXRhKGNiLVx1MDAzZW5saCksIGJjKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yMTgtXHRcdGlmIChyYyBcdTAwM2MgMClcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjI5LVxubmV0L3NtYy9zbWNfZGlhZy5jOjIzMDpzdGF0aWMgaW50IHNtY19kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L3NtYy9zbWNfZGlhZy5jLTIzMS17XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTIzMy1cbm5ldC9zbWMvc21jX2RpYWcuYzoyMzQ6XHRyYyA9IHNtY19kaWFnX2R1bXBfcHJvdG8oXHUwMDI2c21jX3Byb3RvLCBza2IsIGNiLCBTTUNQUk9UT19TTUMpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTIzNS1cdGlmICghcmMpXG5uZXQvc21jL3NtY19kaWFnLmM6MjM2Olx0XHRzbWNfZGlhZ19kdW1wX3Byb3RvKFx1MDAyNnNtY19wcm90bzYsIHNrYiwgY2IsIFNNQ1BST1RPX1NNQzYpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTIzNy1cdHJldHVybiBza2ItXHUwMDNlbGVuO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yMzktXG5uZXQvc21jL3NtY19kaWFnLmM6MjQwOnN0YXRpYyBpbnQgc21jX2RpYWdfaGFuZGxlcl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqaClcbm5ldC9zbWMvc21jX2RpYWcuYy0yNDEte1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yNDctXHRcdFx0c3RydWN0IG5ldGxpbmtfZHVtcF9jb250cm9sIGMgPSB7XG5uZXQvc21jL3NtY19kaWFnLmM6MjQ4Olx0XHRcdFx0LmR1bXAgPSBzbWNfZGlhZ19kdW1wLFxubmV0L3NtYy9zbWNfZGlhZy5jLTI0OS1cdFx0XHRcdC5taW5fZHVtcF9hbGxvYyA9IFNLQl9XSVRIX09WRVJIRUFEKDMyNzY4KSxcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjU2LVxubmV0L3NtYy9zbWNfZGlhZy5jOjI1NzpzdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19oYW5kbGVyIHNtY19kaWFnX2hhbmRsZXIgPSB7XG5uZXQvc21jL3NtY19kaWFnLmMtMjU4LVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5uZXQvc21jL3NtY19kaWFnLmMtMjU5LVx0LmZhbWlseSA9IEFGX1NNQyxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjA6XHQuZHVtcCA9IHNtY19kaWFnX2hhbmRsZXJfZHVtcCxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjEtfTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjItXG5uZXQvc21jL3NtY19kaWFnLmM6MjYzOnN0YXRpYyBpbnQgX19pbml0IHNtY19kaWFnX2luaXQodm9pZClcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjQte1xubmV0L3NtYy9zbWNfZGlhZy5jOjI2NTpcdHJldHVybiBzb2NrX2RpYWdfcmVnaXN0ZXIoXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XG5uZXQvc21jL3NtY19kaWFnLmMtMjY2LX1cbm5ldC9zbWMvc21jX2RpYWcuYy0yNjctXG5uZXQvc21jL3NtY19kaWFnLmM6MjY4OnN0YXRpYyB2b2lkIF9fZXhpdCBzbWNfZGlhZ19leGl0KHZvaWQpXG5uZXQvc21jL3NtY19kaWFnLmMtMjY5LXtcbm5ldC9zbWMvc21jX2RpYWcuYzoyNzA6XHRzb2NrX2RpYWdfdW5yZWdpc3RlcihcdTAwMjZzbWNfZGlhZ19oYW5kbGVyKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNzEtfVxubmV0L3NtYy9zbWNfZGlhZy5jLTI3Mi1cbm5ldC9zbWMvc21jX2RpYWcuYzoyNzM6bW9kdWxlX2luaXQoc21jX2RpYWdfaW5pdCk7XG5uZXQvc21jL3NtY19kaWFnLmM6Mjc0Om1vZHVsZV9leGl0KHNtY19kaWFnX2V4aXQpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTI3NS1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuLS1cbm5ldC9zbWMvc21jX2hzX2JwZi5oLTIwLSAqXG5uZXQvc21jL3NtY19oc19icGYuaDoyMTogKiBOb3RlOiBDYWxsZXIgTVVTVCBlbnN1cmUgaXQmIzM5O3Mgd2FzIGludm9rZWQgdW5kZXIgcmN1X3JlYWRfbG9jay5cbm5ldC9zbWMvc21jX2hzX2JwZi5oLTIyLSAqL1xuLS1cbm5ldC9zbWMvc21jX2liLmM9Mjc0PWludCBzbWNfaWJfZGV0ZXJtaW5lX2dpZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGlicG9ydCxcbi0tXG5uZXQvc21jL3NtY19pYi5jLTI4Ni1cbm5ldC9zbWMvc21jX2liLmM6Mjg3Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL3NtY19pYi5jLTI4OC1cdFx0bmRldiA9IHJkbWFfcmVhZF9naWRfYXR0cl9uZGV2X3JjdShhdHRyKTtcbi0tXG5uZXQvc21jL3NtY19pYi5jPTMwNz1zdGF0aWMgYm9vbCBzbWNfaWJfY2hlY2tfbGlua19naWQodTggZ2lkW1NNQ19HSURfU0laRV0sIGJvb2wgc21jcnYyLFxuLS1cbm5ldC9zbWMvc21jX2liLmMtMzE4LVxubmV0L3NtYy9zbWNfaWIuYzozMTk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9zbWMvc21jX2liLmMtMzIwLVx0XHRpZiAoKCFzbWNydjIgXHUwMDI2XHUwMDI2IGF0dHItXHUwMDNlZ2lkX3R5cGUgPT0gSUJfR0lEX1RZUEVfUk9DRSkgfHxcbi0tXG5uZXQvc21jL3NtY19pbmV0LmM9MjM9c3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy0yOC1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL3NtY19pbmV0LmM6Mjk6XHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbm5ldC9zbWMvc21jX2luZXQuYy0zMC1cdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz03MD1zdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0Nl9wcm90ID0ge1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy03NS1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL3NtY19pbmV0LmM6NzY6XHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbm5ldC9zbWMvc21jX2luZXQuYy03Ny1cdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz0xMjM9c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9zbWMvc21jX2luZXQuYy0xMjQte1xubmV0L3NtYy9zbWNfaW5ldC5jOjEyNTpcdC8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLVx1MDAzZWNsY3NvY2tcbm5ldC9zbWMvc21jX2luZXQuYy0xMjYtXHQgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzXG5uZXQvc21jL3NtY19pbmV0LmM6MTI3Olx0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXG5uZXQvc21jL3NtY19pbmV0LmMtMTI4LVx0ICogc28gbm8gZHVtcCBjYW4gb2JzZXJ2ZSB0aGUgY2xjc29jayBiZWluZyByZWxlYXNlZDsgdGhlIHNlY29uZFxubmV0L3NtYy9zbWNfaW5ldC5jOjEyOTpcdCAqIHVuaGFzaCBpcyBhIG5vLW9wLlxubmV0L3NtYy9zbWNfaW5ldC5jLTEzMC1cdCAqL1xubmV0L3NtYy9zbWNfaW5ldC5jOjEzMTpcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKTtcbm5ldC9zbWMvc21jX2luZXQuYy0xMzItXHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xuLS1cbm5ldC9zbWMvc21jX3BuZXQuYz03MzE9Ym9vbCBzbWNfcG5ldF9pc19uZGV2X3BuZXRpZChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpwbmV0aWQpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTczNi1cbm5ldC9zbWMvc21jX3BuZXQuYzo3Mzc6XHRyZWFkX2xvY2soXHUwMDI2c24tXHUwMDNlcG5ldGlkc19uZGV2LmxvY2spO1xubmV0L3NtYy9zbWNfcG5ldC5jLTczOC1cdGxpc3RfZm9yX2VhY2hfZW50cnkocGUsIFx1MDAyNnNuLVx1MDAzZXBuZXRpZHNfbmRldi5saXN0LCBsaXN0KSB7XG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTExMzI9dm9pZCBzbWNfcG5ldF9maW5kX3JvY2VfcmVzb3VyY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuLS1cbm5ldC9zbWMvc21jX3BuZXQuYy0xMTM2LVxubmV0L3NtYy9zbWNfcG5ldC5jOjExMzc6XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL3NtY19wbmV0LmMtMTEzOC1cdGRzdCA9IF9fc2tfZHN0X2dldChzayk7XG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jPTExNDk9dm9pZCBzbWNfcG5ldF9maW5kX2lzbV9yZXNvdXJjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXG4tLVxubmV0L3NtYy9zbWNfcG5ldC5jLTExNTUtXG5uZXQvc21jL3NtY19wbmV0LmM6MTE1NjpcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTU3LVx0ZHN0ID0gX19za19kc3RfZ2V0KHNrKTtcbi0tXG5uZXQvc21jL3NtY19yeC5jPTMyPXN0YXRpYyB2b2lkIHNtY19yeF93YWtlX3VwKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL3NtY19yeC5jLTM5LVx0LyogY2FsbGVkIGFscmVhZHkgaW4gc21jX2xpc3Rlbl93b3JrKCkgKi9cbm5ldC9zbWMvc21jX3J4LmM6NDA6XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL3NtY19yeC5jLTQxLVx0d3EgPSByY3VfZGVyZWZlcmVuY2Uoc2stXHUwMDNlc2tfd3EpO1xuLS1cbm5ldC9zbWMvc21jX3N5c2N0bC5jPTM4PXN0YXRpYyBpbnQgc21jX25ldF9yZXBsYWNlX3NtY19oc19jdHJsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5uZXQvc21jL3NtY19zeXNjdGwuYy00MS1cbm5ldC9zbWMvc21jX3N5c2N0bC5jOjQyOlx0cmN1X3JlYWRfbG9jaygpO1xubmV0L3NtYy9zbWNfc3lzY3RsLmMtNDMtXHQvKiBudWxsIG9yIGVtcHR5IG5hbWUgYXNrIHRvIGNsZWFyIGN1cnJlbnQgY3RybCAqL1xuLS1cbm5ldC9zbWMvc21jX3N5c2N0bC5jPTcwPXN0YXRpYyBpbnQgcHJvY19zbWNfaHNfY3RybChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbi0tXG5uZXQvc21jL3NtY19zeXNjdGwuYy04MS1cbm5ldC9zbWMvc21jX3N5c2N0bC5jOjgyOlx0cmN1X3JlYWRfbG9jaygpO1xubmV0L3NtYy9zbWNfc3lzY3RsLmMtODMtXHRjdHJsID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2VzbWMuaHNfY3RybCk7XG4tLVxubmV0L3NtYy9zbWNfc3lzY3RsLmM9MjE0PWludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9zbWMvc21jX3N5c2N0bC5jLTIyMy1cbm5ldC9zbWMvc21jX3N5c2N0bC5jOjIyNDpcdFx0cmN1X3JlYWRfbG9jaygpO1xubmV0L3NtYy9zbWNfc3lzY3RsLmMtMjI1LVx0XHRjdHJsID0gcmN1X2RlcmVmZXJlbmNlKGluaXRfbmV0LnNtYy5oc19jdHJsKTtcbi0tXG5uZXQvc21jL3NtY190eC5jPTQxPXN0YXRpYyB2b2lkIHNtY190eF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3NtYy9zbWNfdHguYy01MS1cdFx0Y2xlYXJfYml0KFNPQ0tfTk9TUEFDRSwgXHUwMDI2c29jay1cdTAwM2VmbGFncyk7XG5uZXQvc21jL3NtY190eC5jOjUyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvc21jL3NtY190eC5jLTUzLVx0XHR3cSA9IHJjdV9kZXJlZmVyZW5jZShzay1cdTAwM2Vza193cSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDc5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBTTUMgVW5oYXNoIEZ1bmN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBzbWNfdW5oYXNoX3NrYCBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdG8gYG5ldC9zbWMvYWZfc21jLmNgLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgU01DLXJlbGF0ZWQgY29kZSwgc28gaXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHNvY2tldHMgYXJlIHVuaGFzaGVkIGFuZCBtYW5hZ2VkIHdpdGhpbiB0aGUgU01DIGZyYW1ld29yay4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGl0JiMzOTtzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCBJIG5lZWQgdG8gZGlzc2VjdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHRhc2suIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTk6XHRpbnQgc21jX2hhc2hfc2soc3RydWN0IHNvY2sgKnNrKVxuIDIwMDpcdHtcbiAyMDE6XHRcdHN0cnVjdCBzbWNfaGFzaGluZm8gKmggPSBzay1cdTAwM2Vza19wcm90LVx1MDAzZWguc21jX2hhc2g7XG4gMjAyOlx0XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcbiAyMDM6XHRcbiAyMDQ6XHRcdGhlYWQgPSBcdTAwMjZoLVx1MDAzZWh0O1xuIDIwNTpcdFxuIDIwNjpcdFx0d3JpdGVfbG9ja19iaChcdTAwMjZoLVx1MDAzZWxvY2spO1xuIDIwNzpcdFx0c2tfYWRkX25vZGUoc2ssIGhlYWQpO1xuIDIwODpcdFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmgtXHUwMDNlbG9jayk7XG4gMjA5Olx0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4gMjEwOlx0XG4gMjExOlx0XHRyZXR1cm4gMDtcbiAyMTI6XHR9XG4gMjEzOlx0XG4gMjE0Olx0dm9pZCBzbWNfdW5oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcbiAyMTU6XHR7XG4gMjE2Olx0XHRzdHJ1Y3Qgc21jX2hhc2hpbmZvICpoID0gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VoLnNtY19oYXNoO1xuIDIxNzpcdFxuIDIxODpcdFx0d3JpdGVfbG9ja19iaChcdTAwMjZoLVx1MDAzZWxvY2spO1xuIDIxOTpcdFx0aWYgKHNrX2RlbF9ub2RlX2luaXQoc2spKVxuIDIyMDpcdFx0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgLTEpO1xuIDIyMTpcdFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmgtXHUwMDNlbG9jayk7XG4gMjIyOlx0fVxuIDIyMzpcdFxuIDIyNDpcdC8qIFRoaXMgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHVzZXIgcmVhbGx5IHJlbGVhc2Ugc29ja19sb2NrLiBTbyBkbyB0aGVcbiAyMjU6XHQgKiB3b3JrIHdoaWNoIHdlIGRpZG4mIzM5O3QgZG8gYmVjYXVzZSBvZiB1c2VyIGhvbGQgdGhlIHNvY2tfbG9jayBpbiB0aGVcbiAyMjY6XHQgKiBCSCBjb250ZXh0XG4gMjI3Olx0ICovXG4gMjI4Olx0dm9pZCBzbWNfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gMjI5Olx0e1xuIDIzMDpcdFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBzbWNfc2soc2spO1xuIDIzMTpcdFxuIDIzMjpcdFx0aWYgKHNtYy1cdTAwM2Vjb25uLnR4X2luX3JlbGVhc2Vfc29jaykge1xuIDIzMzpcdFx0XHRzbWNfdHhfcGVuZGluZyhcdTAwMjZzbWMtXHUwMDNlY29ubik7XG4gMjM0Olx0XHRcdHNtYy1cdTAwM2Vjb25uLnR4X2luX3JlbGVhc2Vfc29jayA9IGZhbHNlO1xuIDIzNTpcdFx0fVxuIDIzNjpcdH1cbiAyMzc6XHRcbiAyMzg6XHRzdHJ1Y3QgcHJvdG8gc21jX3Byb3RvID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFNNQyBSZWxlYXNlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZSBgX19zbWNfcmVsZWFzZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvZGUgYmxvY2sgc3Bhbm5pbmcgcm91Z2hseSBsaW5lcyAyODggdGhyb3VnaCAzNDAuIFRoaXMgcmFuZ2UgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhbmQgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSBtb3N0IHVzZWZ1bCBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgbWFuaXB1bGF0aW9uIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBzZWdtZW50IHRvIGZ1bGx5IGdyYXNwIHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIGJlaGF2aW9yLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBTTUMgcmVsZWFzZSBwcm9jZXNzLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHN0YXJ0LiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg4Olx0c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxuIDI4OTpcdHtcbiAyOTA6XHRcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNtYy1cdTAwM2VzaztcbiAyOTE6XHRcdGludCByYyA9IDA7XG4gMjkyOlx0XG4gMjkzOlx0XHRpZiAoIXNtYy1cdTAwM2V1c2VfZmFsbGJhY2spIHtcbiAyOTQ6XHRcdFx0cmMgPSBzbWNfY2xvc2VfYWN0aXZlKHNtYyk7XG4gMjk1Olx0XHRcdHNtY19zb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuIDI5NjpcdFx0XHRzay1cdTAwM2Vza19zaHV0ZG93biB8PSBTSFVURE9XTl9NQVNLO1xuIDI5NzpcdFx0fSBlbHNlIHtcbiAyOTg6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFNNQ19DTE9TRUQpIHtcbiAyOTk6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gU01DX0xJU1RFTiBcdTAwMjZcdTAwMjZcbiAzMDA6XHRcdFx0XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gU01DX0lOSVQpXG4gMzAxOlx0XHRcdFx0XHRzb2NrX3B1dChzayk7IC8qIHBhc3NpdmUgY2xvc2luZyAqL1xuIDMwMjpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfTElTVEVOKSB7XG4gMzAzOlx0XHRcdFx0XHQvKiB3YWtlIHVwIGNsY3NvY2sgYWNjZXB0ICovXG4gMzA0Olx0XHRcdFx0XHRyYyA9IGtlcm5lbF9zb2NrX3NodXRkb3duKHNtYy1cdTAwM2VjbGNzb2NrLFxuIDMwNTpcdFx0XHRcdFx0XHRcdFx0ICBTSFVUX1JEV1IpO1xuIDMwNjpcdFx0XHRcdH1cbiAzMDc6XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFNNQ19DTE9TRUQ7XG4gMzA4Olx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbiAzMDk6XHRcdFx0fVxuIDMxMDpcdFx0XHRzbWNfcmVzdG9yZV9mYWxsYmFja19jaGFuZ2VzKHNtYyk7XG4gMzExOlx0XHR9XG4gMzEyOlx0XG4gMzEzOlx0XHQvKiBGYWxsYmFjayBzb2NrZXRzIG5ldmVyIGNhbGwgc21jX2Nvbm5fZnJlZSgpLCBzbyB1bmhhc2ggZGlyZWN0bHkuXG4gMzE0Olx0XHQgKiBOb24tZmFsbGJhY2sgc29ja2V0cyB1c2Ugc21jX2Nvbm5fdW5oYXNoKCkgc28gdGhhdCB0aGUgY29ubi1cdTAwM2V1bmhhc2hlZFxuIDMxNTpcdFx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXG4gMzE2Olx0XHQgKiBmaXJzdCAoZS5nLiB2aWEgc21jX2Nvbm5fa2lsbCgpKS5cbiAzMTc6XHRcdCAqL1xuIDMxODpcdFx0aWYgKHNtYy1cdTAwM2V1c2VfZmFsbGJhY2spXG4gMzE5Olx0XHRcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKTtcbiAzMjA6XHRcdGVsc2VcbiAzMjE6XHRcdFx0c21jX2Nvbm5fdW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vjb25uKTtcbiAzMjI6XHRcbiAzMjM6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEKSB7XG4gMzI0Olx0XHRcdGlmIChzbWMtXHUwMDNlY2xjc29jaykge1xuIDMyNTpcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gMzI2Olx0XHRcdFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWMpO1xuIDMyNzpcdFx0XHRcdGxvY2tfc29jayhzayk7XG4gMzI4Olx0XHRcdH1cbiAzMjk6XHRcdFx0aWYgKCFzbWMtXHUwMDNldXNlX2ZhbGxiYWNrKVxuIDMzMDpcdFx0XHRcdHNtY19jb25uX2ZyZWUoXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xuIDMzMTpcdFx0fVxuIDMzMjpcdFxuIDMzMzpcdFx0cmV0dXJuIHJjO1xuIDMzNDpcdH1cbiAzMzU6XHRcbiAzMzY6XHRpbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiAzMzc6XHR7XG4gMzM4Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIDMzOTpcdFx0c3RydWN0IHNtY19zb2NrICpzbWM7XG4gMzQwOlx0XHRpbnQgb2xkX3N0YXRlLCByYyA9IDA7XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAoIXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBgc21jX2Nvbm5fZnJlZWAgZnVuY3Rpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgc21jX2Nvbm5fZnJlZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgYHNtY19jb25uX2ZyZWVgLiBXZSYjMzk7cmUgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AsIHdoaWNoIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgbG9naWMgb2YgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucyBvdmVyIFJETUEuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24mIzM5O3MgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhbiBTTUMgY29ubmVjdGlvbiDigJMgcHJldHR5IHN0YW5kYXJkIHN0dWZmLiBJIGV4cGVjdCBpdCYjMzk7bGwgaGFuZGxlIHRoaW5ncyBsaWtlIGNsZWFuaW5nIHVwIG1lbW9yeSBidWZmZXJzLCBjbG9zaW5nIHNvY2tldHMsIGFuZCBwb3RlbnRpYWxseSBub3RpZnlpbmcgdGhlIHJlbW90ZSBwZWVyIGFib3V0IHRoZSBjb25uZWN0aW9uIHRlcm1pbmF0aW9uLiBHaXZlbiB0aGUgbmF0dXJlIG9mIFNNQywgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhlcmUgd2lsbCBiZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZCwgcHJvYmFibHkgc3BpbmxvY2tzIG9yIG11dGV4ZXMsIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdGhlIHRlYXJkb3duIHByb2Nlc3MuIFRoZSBjaGFsbGVuZ2Ugd2l0aCBTTUMgaXMgYWx3YXlzIG1hbmFnaW5nIHNoYXJlZCBtZW1vcnkgc2FmZWx5LCBzbyBJJiMzOTttIGtlZW4gdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoYXQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGFzc2VzcyB0aGUgZ2VuZXJhbCByb2J1c3RuZXNzIG9mIHRoZSBjbGVhbnVwIHByb2NlZHVyZS4gSSBhbHNvIHdvbmRlciBhYm91dCBpdHMgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBTTUMgY29tcG9uZW50czsgYXJlIHRoZXJlIGNhbGxiYWNrcyBvciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG1vZHVsZT8gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjU1Olx0ICogRXZlcnkgY2FsbGVyIGhvbGRzIGxvY2tfc29jayBmb3IgdGhpcyBzb2NrZXQsIHNvIGNvbm4tXHUwMDNldW5oYXNoZWQgaXMgcHJvdGVjdGVkXG4xMjU2Olx0ICogYnkgdGhhdCBsb2NrIGFuZCBubyBzZXBhcmF0ZSBzeW5jaHJvbmlzYXRpb24gaXMgbmVlZGVkLlxuMTI1NzpcdCAqL1xuMTI1ODpcdHZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbjEyNTk6XHR7XG4xMjYwOlx0XHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xuMTI2MTpcdFxuMTI2MjpcdFx0aWYgKCFjb25uLVx1MDAzZXVuaGFzaGVkKSB7XG4xMjYzOlx0XHRcdGNvbm4tXHUwMDNldW5oYXNoZWQgPSAxO1xuMTI2NDpcdFx0XHRzbWMtXHUwMDNlc2suc2tfcHJvdC1cdTAwM2V1bmhhc2goXHUwMDI2c21jLVx1MDAzZXNrKTtcbjEyNjU6XHRcdH1cbjEyNjY6XHR9XG4xMjY3Olx0XG4xMjY4Olx0LyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovXG4xMjY5Olx0dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbjEyNzA6XHR7XG4xMjcxOlx0XHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGNvbm4tXHUwMDNlbGdyO1xuMTI3MjpcdFxuMTI3MzpcdFx0aWYgKCFsZ3IgfHwgY29ubi1cdTAwM2VmcmVlZClcbjEyNzQ6XHRcdFx0LyogQ29ubmVjdGlvbiBoYXMgbmV2ZXIgYmVlbiByZWdpc3RlcmVkIGluIGFcbjEyNzU6XHRcdFx0ICogbGluayBncm91cCwgb3IgaGFzIGFscmVhZHkgYmVlbiBmcmVlZC5cbjEyNzY6XHRcdFx0ICovXG4xMjc3Olx0XHRcdHJldHVybjtcbjEyNzg6XHRcbjEyNzk6XHRcdGNvbm4tXHUwMDNlZnJlZWQgPSAxO1xuMTI4MDpcdFx0LyogVW5oYXNoIGJlZm9yZSBkcm9wcGluZyBsZ3IvbG5rIHJlZnMgc28gdGhlIGRpYWcgcmVhZGVyLCB3aGljaFxuMTI4MTpcdFx0ICogaXRlcmF0ZXMgdW5kZXIgdGhlIHNvY2tldCBoYXNoIHJlYWRfbG9jaywgY2Fubm90IHNlZSBhIGNvbm5lY3Rpb24gd2hvc2VcbjEyODI6XHRcdCAqIGxnciBvciBsbmsgaXMgYmVpbmcgZnJlZWQgY29uY3VycmVudGx5LlxuMTI4MzpcdFx0ICovXG4xMjg0Olx0XHRzbWNfY29ubl91bmhhc2goY29ubik7XG4xMjg1Olx0XHRpZiAoIXNtY19jb25uX2xncl92YWxpZChjb25uKSlcbjEyODY6XHRcdFx0LyogQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZnJvbVxuMTI4NzpcdFx0XHQgKiBsaW5rIGdyb3VwLlxuMTI4ODpcdFx0XHQgKi9cbjEyODk6XHRcdFx0Z290byBsZ3JfcHV0O1xuMTI5MDpcdFxuMTI5MTpcdFx0aWYgKGxnci1cdTAwM2Vpc19zbWNkKSB7XG4xMjkyOlx0XHRcdHNtY19pc21fdW5zZXRfY29ubihjb25uKTtcbjEyOTM6XHRcdFx0dGFza2xldF9raWxsKFx1MDAyNmNvbm4tXHUwMDNlcnhfdHNrbGV0KTtcbjEyOTQ6XHRcdFx0aWYgKHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KGxnci1cdTAwM2VzbWNkKSlcbjEyOTU6XHRcdFx0XHRzbWNkX2J1Zl9kZXRhY2goY29ubik7XG4xMjk2Olx0XHR9IGVsc2Uge1xuMTI5NzpcdFx0XHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcbjEyOTg6XHRcdFx0aWYgKGN1cnJlbnRfd29yaygpICE9IFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yaylcbjEyOTk6XHRcdFx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmNvbm4tXHUwMDNlYWJvcnRfd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTk1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgR2FtZSBQbGFuOiBTTUMgUHJvdG9jb2wqKgoKQWxyaWdodCwgdGhpcyBsb29rcyBwcm9taXNpbmcsIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGBuZXQvc21jL2AgY29kZSBpcyByaXBlIGZvciBhIGdvb2QsIGhhcmQgZnV6emluZyBzZXNzaW9uLiBUaGUgU01DIHByb3RvY29sIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBpcyBpbiBteSBzaWdodHMuIEhlcmUmIzM5O3Mgd2h5OgoKRmlyc3QsIGl04oCZcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4gSSBjYW4gbGV2ZXJhZ2Ugc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMg4oCTIGBzb2NrZXQoQUZfU01DLCAuLi4pYCwgYGNvbm5lY3RgLCBgbGlzdGVuYCwgYGFjY2VwdGAsIGBjbG9zZWAg4oCTIHRoZSB3aG9sZSBzaGViYW5nLiBBbmQgZG9uJiMzOTt0IGZvcmdldCB0aGUgc29ja2V0IG1vbml0b3JpbmcgbmV0bGluayByZXF1ZXN0cyAoU01DX0RJQUcpLCB0aGF0JiMzOTtzIGFuIGF0dGFjayB2ZWN0b3IgSSBjYW4gcGxheSB3aXRoLgoKU2Vjb25kLCB0aGUgY29kZSB0b3VjaGVzIGNydWNpYWwgYXJlYXM6IGl04oCZcyBtb2RpZnlpbmcgdGhlIHNvY2tldCB1bmhhc2hpbmcgbGlmZWN5Y2xlLCBkZWFsaW5nIHdpdGggc3luY2hyb25pemF0aW9uLCBhbmQgbWFuYWdpbmcgdGhlIHN0YXRlIGZsYWdzIHdpdGhpbiB0aGUgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAg4oCTIHNwZWNpZmljYWxseSBgY29ubi0mZ3Q7dW5oYXNoZWRgLiBgc21jX2Nvbm5fdW5oYXNoYCBnZXRzIGNhbGxlZCBkdXJpbmcgYHNtY19jb25uX2ZyZWVgIGFuZCBgX19zbWNfcmVsZWFzZWAsIHdoaWNoIGlzIHdoZXJlIG15IGludGVyZXN0IHBlYWtzISBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGZpeCBvciBsaWZlY3ljbGUgbWFuYWdlbWVudCBpc3N1ZSBmb3IgdGhlIHNvY2tldCBoYXNoIHRhYmxlIGFuZCBkaWFnbm9zdGljIHJlYWRlci4gQ29uY3VycmVudCBjYWxscyB0byBgY2xvc2VgLCBgcmVsZWFzZWAsIGBhYm9ydGAsIGFuZCBgc29ja19kaWFnYCB3aWxsIGJlIHRoZSBrZXkgdG8gdW5sb2NraW5nIGFueSBoaWRkZW4gdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdDoKCjEuICBgU01DYCAod2hpY2gsIGZyb20gbG9va2luZyBhdCBgbmV0L3NtYy9LY29uZmlnYCwgZGVwZW5kcyBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYCkgaXMgZW5hYmxlZC4KMi4gIGBTTUNfRElBR2AgaXMgZW5hYmxlZC4KMy4gIGBJTkVUYCAoZXNzZW50aWFsIGZvciBuZXR3b3JraW5nLCBvZiBjb3Vyc2UpCjQuICBgSU5GSU5JQkFORGAgKHJlcXVpcmVkIGZvciBoYXJkd2FyZSBzdXBwb3J0KQo1LiAgYERJQlNgIChEaXJlY3QgSW50ZXJmYWNlIGJldHdlZW4gQnVzIGFuZCBTb2NrZXQpCjYuICBBbmQgc2luY2UgSSBsaWtlIHRvIGNvdmVyIGFsbCB0aGUgYmFzZXMsIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGF0IGBESUJTX0xPYCBpcyBlbmFibGVkIHRvbywganVzdCBpbiBjYXNlLCBpdOKAmXMgdGhlIHNvZnR3YXJlIGxvb3BiYWNrIG9wdGlvbi4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgU01DLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudDsgSSBkb27igJl0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgZnV6emluZy4gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DfGNvbmZpZyBJTkZJTklCQU5EfGNvbmZpZyBESUJTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc9MTQ2PWNvbmZpZyBJMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0hcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnLTE1MC1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc6MTUxOmNvbmZpZyBTTUNfVUNPREVfUEFUQ0hcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtTTUMgcmVsb2NhdGlvbiBwYXRjaFwmIzM0O1xuLS1cbmRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyOm1lbnVjb25maWcgSU5GSU5JQkFORFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE2PWlmIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCB1c2Vyc3BhY2UgTUFEIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yNy1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTM5LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDEtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDMtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0NDpjb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MTpjb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtSRE1BL0NNXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjgxOmNvbmZpZyBJTkZJTklCQU5EX1ZJUlRfRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cdGRlZl9ib29sICFISUdITUVNXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm5nX3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTkdfUkVcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV4dCBnZW5lcmF0aW9uIFJvQ0UgSENBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5YVF9SRVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gTmV0eHRyZW1lIEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9FRkFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7QW1hem9uIEVsYXN0aWMgRmFicmljIEFkYXB0ZXIgKEVGQSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0VSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QWxpYmFiYSBFbGFzdGljIFJETUEgQWRhcHRlciAoRVJETUEpIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSE5TX0hJUDA4XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0hpc2lsaWNvbiBIaXAwOCBGYW1pbHkgUm9DRSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWctMy1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnOjQ6Y29uZmlnIElORklOSUJBTkRfSU9OSUNcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtBTUQgUGVuc2FuZG8gRFNDIFJETUEvUm9DRSBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9NVEhDQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01lbGxhbm94IEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctOS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjEwOmNvbmZpZyBJTkZJTklCQU5EX01USENBX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0VtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9RRURSXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtRTG9naWMgUm9DRSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9VU05JQ1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZlcmJzIHN1cHBvcnQgZm9yIENpc2NvIFZJQ1wmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdm13X3B2cmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcmRtYXZ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9SRE1BVlRcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7UkRNQSB2ZXJicyB0cmFuc3BvcnQgbGlicmFyeVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTExLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTMtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI3OmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMjgtXHRib29sIFwmIzM0O0lQLW92ZXItSW5maW5pQmFuZCBkZWJ1Z2dpbmdcJiMzNDsgaWYgRVhQRVJUXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTQxLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjQyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEFcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kIGRhdGEgcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7aVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0lTRVJUXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O2lTQ1NJIEV4dGVuc2lvbnMgZm9yIFJETUEgKGlTRVIpIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjM6Y29uZmlnIElORklOSUJBTkRfUlRSU1xuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfUlRSU19DTElFTlRcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtSVFJTIGNsaWVudCBtb2R1bGVcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xNy1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O1JUUlMgc2VydmVyIG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfU1JQVFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfU01TQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnOjIyOmNvbmZpZyBTTUM5MVhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyA5MUM5eC85MUMxeHh4IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMTMtXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0yMi1cbm5ldC9zbWMvS2NvbmZpZzoyMzpjb25maWcgU01DX0hTX0NUUkxfQlBGXG5uZXQvc21jL0tjb25maWctMjQtXHRib29sIFwmIzM0O0dlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyMzYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIFNvZnR3YXJlIFJETUEqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29mdHdhcmUgaW1wbGVtZW50YXRpb25zIG9mIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoUkRNQSkuIFRoYXQgbWFrZXMgc2Vuc2Ug4oCTIHdlJiMzOTtyZSBleHBsb3JpbmcgYWx0ZXJuYXRpdmUgcGF0aHMsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIHBvcnRhYmlsaXR5LCBvciBtYXliZSBldmVuIGluIGVudmlyb25tZW50cyB3aGVyZSBoYXJkd2FyZSBSRE1BIGlzbiYjMzk7dCBhdmFpbGFibGUgb3IgcHJhY3RpY2FsLiBOb3csIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoIGtub3duIG5hbWVzIGluIHRoZSBmaWVsZCwgc28gbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBleGFtaW5lIGBSRE1BX1JYRWAgdG9vLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGNvdmVyIHRoYXQgZ3JvdW5kIHRvIGVuc3VyZSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIEkgd2FudCB0byBsZWF2ZSBubyBzdG9uZSB1bnR1cm5lZCBpbiB0aGlzIGFuYWx5c2lzLCBhbmQgdGhhdCBpbmNsdWRlcyBhbnkgcmVsZXZhbnQgc29mdHdhcmUgYXBwcm9hY2hlcy4gVGhpcyB3aWxsIGhlbHAgZW5zdXJlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkRNQV9SWEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWc6Mjpjb25maWcgUkRNQV9SWEVcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U29mdHdhcmUgUkRNQSBvdmVyIEV0aGVybmV0IChSb0NFKSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MzQKCQkJCQkJCW91dHB1dDogMTk5CgkJCQkJCQl0aG91Z2h0czogNTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgU29ja2V0IExvZ2ljIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBvZiB0aGlzIGNoYW5nZS4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYEZvY3VzU3ltYm9sc2Ag4oCTIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGFyZSBpbXBsZW1lbnRpbmcgdGhpcyBuZXcgZmVhdHVyZSByZWxhdGVkIHRvIFNNQyBzb2NrZXRzLiBMb29raW5nIHRocm91Z2ggdGhlIHByb3ZpZGVkIGxpc3QsIGl0JiMzOTtzIGNsZWFyOgoKMS4gIGBzbWNfY29ubl91bmhhc2hgOiBUaGlzIGlzIGEgKm5ldyogZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBrZXkgaW5kaWNhdG9yIG9mIGZ1bmN0aW9uYWxpdHkgaW50cm9kdWN0aW9uLiBMb2NhdGVkIGluIGBuZXQvc21jL3NtY19jb3JlLmNgLgoyLiAgYHNtY19jb25uX2ZyZWVgOiBJdCYjMzk7cyBiZWVuIG1vZGlmaWVkIHRvICpjYWxsKiBgc21jX2Nvbm5fdW5oYXNoYCwgc28gdGhpcyBsaWtlbHkgaXMgaW50ZWdyYWwgdG8gdGhlIGNsZWFudXAuIEFsc28gaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuCjMuICBgX19zbWNfcmVsZWFzZWA6IFRoaXMgZnVuY3Rpb24sIGxvY2F0ZWQgaW4gYG5ldC9zbWMvYWZfc21jLmNgLCBhbHNvIGNhbGxzIGBzbWNfY29ubl91bmhhc2hgLCBpbXBseWluZyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSByZWxlYXNlIHBhdGguCjQuICBgc21jX2Nvbm5fY3JlYXRlYDogVGhpcyBub3cgaW5pdGlhbGl6ZXMgYGNvbm4tJmd0O3VuaGFzaGVkYC4gVGhhdCYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiwgaW5kaWNhdGluZyB0aGF0IGEgbmV3IGNvbm5lY3Rpb24gaXMgYmVpbmcgbWFuYWdlZCBpbiBhIG5ldyB3YXkuIExvY2F0ZWQgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuCjUuICBgc21jX3VuaGFzaF9za2A6IFRoZSBhY3R1YWwgdW5kZXJseWluZyB1bmhhc2ggaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGluIGBuZXQvc21jL2FmX3NtYy5jYC4KNi4gIGBzbWNfcmVsZWFzZWA6IFRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBzb2NrZXQgcmVsZWFzZSBhbmQgaXMgaW4gYG5ldC9zbWMvYWZfc21jLmNgLgoKTmV4dCwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gdHJpZ2dlciB0aGlzIGxvZ2ljLiBUaGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbiBsaXN0IC0gYFNNQ2AsIGBTTUNfRElBR2AsIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYElORklOSUJBTkRgIC0gc2VlbXMgcmVhc29uYWJsZS4gVGhlc2UgY292ZXIgdGhlIFNNQyBhbmQgSW5maW5pYmFuZCBzdWJzeXN0ZW1zLCB3aGljaCBtYWtlcyBzZW5zZS4KCk5vdyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSBrbm93IHRoaXMgZmVhdHVyZSB3YXJyYW50cyBmdXp6aW5nLCBzbyBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZSBjb25jaXNlLCBhbmQgY2xlYXJseSBhcnRpY3VsYXRlIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjb21wbGV0ZSBhcyBjb25maXJtZWQgYnkgdGhlIHByZXZpb3VzIHJldmlldy4gRmluYWxseSwgSSYjMzk7dmUgZ290IG15IGBGb2N1c1N5bWJvbHNgIGxpc3QsIHdoaWNoIEkmIzM5O3ZlIGFscmVhZHkgc2NydXRpbml6ZWQuCgpCZWZvcmUgSSBjb21taXQgdG8gYHNldC1yZXN1bHRzYCwgSSBuZWVkIGEgZmluYWwgc2FuaXR5IGNoZWNrLiBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgZXhpc3QsIGFuZCB0aGF0IHRoZXkgYXJlIGFjdHVhbGx5IHNwZWNpZmljIHRvIFNNQy4gTG9va3MgZ29vZC4gVGhlc2UgYXJlIGFsbCAqdmVyeSogc3BlY2lmaWMgc29ja2V0IGZ1bmN0aW9ucy4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtTTUNfRElBRyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19jb25uX3VuaGFzaCYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9mcmVlJiMzNDssCiAgICAmIzM0O19fc21jX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c21jX2Nvbm5fY3JlYXRlJiMzNDssCiAgICAmIzM0O3NtY191bmhhc2hfc2smIzM0OywKICAgICYjMzQ7c21jX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIHNvY2tldCBoYXNoIG1hbmFnZW1lbnQgYW5kIGxpbmsgZ3JvdXAgZGVzdHJ1Y3Rpb24gbGlmZWN5Y2xlIGluIHRoZSBTTUMgcHJvdG9jb2wgZmFtaWx5LiBJdCBpbnRyb2R1Y2VzIHNtY19jb25uX3VuaGFzaCgpIHdpdGggYSBuZXcgY29ubi1cdTAwM2V1bmhhc2hlZCBmbGFnIHRvIGVuc3VyZSBub24tZmFsbGJhY2sgU01DIHNvY2tldHMgYXJlIHVuaGFzaGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgbGluayBncm91cC9saW5rIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIHdpdGggc29ja2V0IGRpYWdub3N0aWMgZHVtcHMuIFRoZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgbmV0d29ya2luZyBzb2NrZXQgYW5kIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBjb2RlIGFjY2Vzc2libGUgdmlhIHVzZXItc3BhY2Ugc29ja2V0IGFuZCBzb2NrX2RpYWcgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1NNQ19ESUFHJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7LAogICAgJiMzNDtESUJTX0xPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2Nvbm5fdW5oYXNoJiMzNDssCiAgICAmIzM0O3NtY19jb25uX2ZyZWUmIzM0OywKICAgICYjMzQ7X19zbWNfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzbWNfY29ubl9jcmVhdGUmIzM0OywKICAgICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7LAogICAgJiMzNDtzbWNfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGhhc2ggbWFuYWdlbWVudCBhbmQgbGluayBncm91cCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgaW4gdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuIEl0IGludHJvZHVjZXMgc21jX2Nvbm5fdW5oYXNoKCkgd2l0aCBhIG5ldyBjb25uLVx1MDAzZXVuaGFzaGVkIGZsYWcgdG8gZW5zdXJlIG5vbi1mYWxsYmFjayBTTUMgc29ja2V0cyBhcmUgdW5oYXNoZWQgZXhhY3RseSBvbmNlIGJlZm9yZSBsaW5rIGdyb3VwL2xpbmsgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBzb2NrZXQgZGlhZ25vc3RpYyBkdW1wcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBuZXR3b3JraW5nIHNvY2tldCBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNvZGUgYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBzb2NrZXQgYW5kIHNvY2tfZGlhZyBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBzb2NrZXQgdGVhcmRvd24gKHNtY19jb25uX2ZyZWUpIGFuZCBzb2NrZXQgZGlhZ25vc3RpY3MgKHNtY19kaWFnKSBieSB1bmhhc2hpbmcgdGhlIHNvY2tldCBlYXJsaWVyIGFuZCB0cmFja2luZyB0aGUgdW5oYXNoIHN0YXRlIHZpYSBhIG5ldyBgdW5oYXNoZWRgIGZsYWcgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuXG5cbjEuIFRoZSBuZXcgYHVuaGFzaGVkYCBmaWVsZCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IHNtY19zb2NrYCB2aWEgYHNrX2FsbG9jKClgICh3aGljaCB6ZXJvZXMgbWVtb3J5KSBhbmQgaXMgZXhwbGljaXRseSByZXNldCB0byAwIGluIGBzbWNfY29ubl9jcmVhdGUoKWAuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxuMy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBzdHJ1Y3R1cmVzIChzdWNoIGFzIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGlvY3RsIHN0cnVjdHVyZXMpIGhhdmUgaGFkIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgaW50cm9kdWNlZC5cbjQuIFRoZSByYWNlIGNvbmRpdGlvbiBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOL0xPQ0tERVAsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4NjY5YmYyYjA0ZmIwOTcwMWZmNWU0ZmJlMGFmY2RjMDYwMjAyM2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDEwOjE4OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9hZl9zbWMuYyBiL25ldC9zbWMvYWZfc21jLmMKaW5kZXggZTlmOTNiM2FiNDM1Yi4uOGM3ODFhNGE0NDg1YiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9hZl9zbWMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL2FmX3NtYy5jCkBAIC0zMTAsNyAmIzQzOzMxMCwxNSBAQCBzdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpCiAJCXNtY19yZXN0b3JlX2ZhbGxiYWNrX2NoYW5nZXMoc21jKTsKIAl9CiAKLQlzay0mZ3Q7c2tfcHJvdC0mZ3Q7dW5oYXNoKHNrKTsKJiM0MzsJLyogRmFsbGJhY2sgc29ja2V0cyBuZXZlciBjYWxsIHNtY19jb25uX2ZyZWUoKSwgc28gdW5oYXNoIGRpcmVjdGx5LgomIzQzOwkgKiBOb24tZmFsbGJhY2sgc29ja2V0cyB1c2Ugc21jX2Nvbm5fdW5oYXNoKCkgc28gdGhhdCB0aGUgY29ubi0mZ3Q7dW5oYXNoZWQKJiM0MzsJICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuCiYjNDM7CSAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNtYy0mZ3Q7dXNlX2ZhbGxiYWNrKQomIzQzOwkJc2stJmd0O3NrX3Byb3QtJmd0O3VuaGFzaChzayk7CiYjNDM7CWVsc2UKJiM0MzsJCXNtY19jb25uX3VuaGFzaCgmYW1wO3NtYy0mZ3Q7Y29ubik7CiAKIAlpZiAoc2stJmd0O3NrX3N0YXRlID09IFNNQ19DTE9TRUQpIHsKIAkJaWYgKHNtYy0mZ3Q7Y2xjc29jaykgewpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWMuaCBiL25ldC9zbWMvc21jLmgKaW5kZXggNDI3YjZkNjNiOTkzMS4uMDc1MzEyMjc4ODM1YyAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWMuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtYy5oCkBAIC0yNzksNiAmIzQzOzI3OSw3IEBAIHN0cnVjdCBzbWNfY29ubmVjdGlvbiB7CiAJdTY0CQkJcGVlcl90b2tlbjsJLyogU01DLUQgdG9rZW4gb2YgcGVlciAqLwogCXU4CQkJa2lsbGVkOwkJLyogYWJub3JtYWwgdGVybWluYXRpb24gKi8KIAl1OAkJCWZyZWVkOwkJLyogbm9ybWFsIHRlcm1pbmF0aW9uICovCiYjNDM7CXU4CQkJdW5oYXNoZWQ7CS8qIHJlbW92ZWQgZnJvbSBzb2NrIGhhc2ggKi8KIAl1OAkJCW91dF9vZl9zeW5jOwkvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi8KIH07CiAKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuYwppbmRleCAwNGFlZGQ5NTc1NDNhLi5lMzAyMjIxYzM1ZTNmIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY29yZS5jCkBAIC0xMjUxLDYgJiM0MzsxMjUxLDIwIEBAIHN0YXRpYyB2b2lkIHNtY19idWZfdW51c2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLAogCX0KIH0KIAomIzQzOy8qIHVuaGFzaCB0aGUgc29ja2V0IG9uY2U7IG93bnMgdGhlIHNpbmdsZSB1bmhhc2ggZm9yIGFsbCBub24tZmFsbGJhY2sgcGF0aHMuCiYjNDM7ICogRXZlcnkgY2FsbGVyIGhvbGRzIGxvY2tfc29jayBmb3IgdGhpcyBzb2NrZXQsIHNvIGNvbm4tJmd0O3VuaGFzaGVkIGlzIHByb3RlY3RlZAomIzQzOyAqIGJ5IHRoYXQgbG9jayBhbmQgbm8gc2VwYXJhdGUgc3luY2hyb25pc2F0aW9uIGlzIG5lZWRlZC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHNtY19jb25uX3VuaGFzaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pOwomIzQzOwomIzQzOwlpZiAoIWNvbm4tJmd0O3VuaGFzaGVkKSB7CiYjNDM7CQljb25uLSZndDt1bmhhc2hlZCA9IDE7CiYjNDM7CQlzbWMtJmd0O3NrLnNrX3Byb3QtJmd0O3VuaGFzaCgmYW1wO3NtYy0mZ3Q7c2spOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogcmVtb3ZlIGEgZmluaXNoZWQgY29ubmVjdGlvbiBmcm9tIGl0cyBsaW5rIGdyb3VwICovCiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKQogewpAQCAtMTI2Myw2ICYjNDM7MTI3NywxMSBAQCB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKQogCQlyZXR1cm47CiAKIAljb25uLSZndDtmcmVlZCA9IDE7CiYjNDM7CS8qIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgbGdyL2xuayByZWZzIHNvIHRoZSBkaWFnIHJlYWRlciwgd2hpY2gKJiM0MzsJICogaXRlcmF0ZXMgdW5kZXIgdGhlIHNvY2tldCBoYXNoIHJlYWRfbG9jaywgY2Fubm90IHNlZSBhIGNvbm5lY3Rpb24gd2hvc2UKJiM0MzsJICogbGdyIG9yIGxuayBpcyBiZWluZyBmcmVlZCBjb25jdXJyZW50bHkuCiYjNDM7CSAqLwomIzQzOwlzbWNfY29ubl91bmhhc2goY29ubik7CiAJaWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpCiAJCS8qIENvbm5lY3Rpb24gaGFzIGFscmVhZHkgdW5yZWdpc3RlcmVkIGZyb20KIAkJICogbGluayBncm91cC4KQEAgLTIwNTMsNiAmIzQzOzIwNzIsNyBAQCBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKQogCWlmICghY29ubi0mZ3Q7bGdyLSZndDtpc19zbWNkKQogCQlzbWNyX2xpbmtfaG9sZChjb25uLSZndDtsbmspOyAvKiBsaW5rX3B1dCBpbiBzbWNfY29ubl9mcmVlKCkgKi8KIAljb25uLSZndDtmcmVlZCA9IDA7CiYjNDM7CWNvbm4tJmd0O3VuaGFzaGVkID0gMDsKIAljb25uLSZndDtsb2NhbF90eF9jdHJsLmNvbW1vbi50eXBlID0gU01DX0NEQ19NU0dfVFlQRTsKIAljb25uLSZndDtsb2NhbF90eF9jdHJsLmxlbiA9IFNNQ19XUl9UWF9TSVpFOwogCWNvbm4tJmd0O3VyZ19zdGF0ZSA9IFNNQ19VUkdfUkVBRDsKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuaCBiL25ldC9zbWMvc21jX2NvcmUuaAppbmRleCA1YzE4ZjA4YTRjOGE1Li5mMjNkNjBhZWYwYjc5IDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY29yZS5oCkBAIC01OTUsNiAmIzQzOzU5NSw3IEBAIHZvaWQgc21jX3NuZGJ1Zl9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTsKIHZvaWQgc21jX3JtYl9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTsKIGludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTsKIAomIzQzO3ZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7CiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTsKIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpOwogaW50IHNtY19jb3JlX2luaXQodm9pZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgU29ja2V0IFVuaGFzaGluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBoYW5kbGluZyB0aGUgdW5oYXNoaW5nIG9mIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgc29ja2V0cyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gTGV0JiMzOTtzIGJyZWFrIGRvd24gbXkgdW5kZXJzdGFuZGluZy4gRmlyc3QsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gY2VudGVyIGFyb3VuZCBhIG5ldyBmaWVsZCwgYHVuaGFzaGVkYCwgd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWVsZCBpcyB0byB0cmFjayB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdW5oYXNoZWQsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgcHJldmVudGluZyBkb3VibGUgdW5oYXNoaW5nLgoKTG9va2luZyBhdCBgX19zbWNfcmVsZWFzZWAsIHRoZSBsb2dpYyBpcyBub3cgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhlIGB1c2VfZmFsbGJhY2tgIGZsYWcuIElmIGl0JiMzOTtzIHNldCwgdGhlIHN0YW5kYXJkIHNvY2tldCB1bmhhc2ggaXMgdXNlZCwgYW5kIGl0IG1ha2VzIHNlbnNlIHRoYXQgYHNrLSZndDtza19wcm90LSZndDt1bmhhc2goc2spYCBpcyBjYWxsZWQuIEJ1dCBpZiB3ZSAqYXJlbiYjMzk7dCogdXNpbmcgdGhlIGZhbGxiYWNrLCB0aGUgcGF0aCBmb3IgdW5oYXNoaW5nIGJlY29tZXMgYHNtY19jb25uX3VuaGFzaCgmYW1wO3NtYy0mZ3Q7Y29ubilgLgoKVGhlIGNydWNpYWwgcGFydCBpcyB0aGVuIGBzbWNfY29ubl91bmhhc2hgLiBJdCBjaGVja3MgYCFjb25uLSZndDt1bmhhc2hlZGAuIFRoaXMgaXMgdGhlIHNhZmVndWFyZCwgZW5zdXJpbmcgdGhhdCB0aGUgZnVuY3Rpb24gb25seSBleGVjdXRlcyBvbmNlLiBJdCBzZXRzIGBjb25uLSZndDt1bmhhc2hlZCA9IDFgIHRvIG1hcmsgdGhlIGNvbm5lY3Rpb24gYXMgdW5oYXNoZWQgYW5kIHRoZW4gcHJvY2VlZHMgdG8gdW5oYXNoIHRoZSB1bmRlcmx5aW5nIHNvY2tldCB2aWEgYHNtYy0mZ3Q7c2suc2tfcHJvdC0mZ3Q7dW5oYXNoKCZhbXA7c21jLSZndDtzaylgLgoKSW4gYHNtY19jb25uX2ZyZWUoKWAsIGl0IGFwcGVhcnMgdGhhdCBgc21jX2Nvbm5fdW5oYXNoKGNvbm4pYCBpcyBjYWxsZWQgKmJlZm9yZSogcmVsZWFzaW5nIHRoZSBsb2dpY2FsIGdyb3VwIGFuZCBsaW5rIHJlZmVyZW5jZXMuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCBmb3IgZW5zdXJpbmcgY2xlYW51cC4gRmluYWxseSwgYHNtY19jb25uX2NyZWF0ZSgpYCBpbml0aWFsaXplcyBgY29ubi0mZ3Q7dW5oYXNoZWQgPSAwYCwgYXMgZXhwZWN0ZWQuIFRoaXMgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgY2xlYW4sIGZpcnN0LXRpbWUgdW5oYXNoLgoKVG8gcmVpbmZvcmNlIG15IHVuZGVyc3RhbmRpbmcsIEkmIzM5O2xsIGRyaWxsIGRvd24gdG8gc2VlIHdoZXJlIGBjb25uYCBpcyBhbGxvY2F0ZWQuIEkgcmVjYWxsIHRoYXQgYGNvbm5gIGlzIGVtYmVkZGVkIGluc2lkZSB0aGUgYHN0cnVjdCBzbWNfc29ja2AuIFdoZW4gYW4gU01DIHNvY2tldCBpcyBhbGxvY2F0ZWQsIHZpYSBlaXRoZXIgYHNtY19zb2NrX2FsbG9jYCBvciBgc21jX2NyZWF0ZWAsIHRoZSB3aG9sZSBgc21jX3NvY2tgIHN0cnVjdHVyZSwgaW5jbHVkaW5nIGBjb25uYCwgaXMgYWxsb2NhdGVkIGF0IG9uY2UuCgpUbyBkb3VibGUtY2hlY2sgdGhlIGFsbG9jYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBhbnl0aGluZyBJIG1pZ2h0IGJlIG1pc3NpbmcsIEkmIzM5O2xsIGxldmVyYWdlIG15IHByZWZlcnJlZCB0b29scyAoZ3JlcHBlciBhbmQvb3IgbXkgZmlsZSByZWFkaW5nIHV0aWxpdGllcykgYW5kIHBpbnBvaW50IHRoZSBtZW1vcnkgYWxsb2NhdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgd2hvbGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0zMzQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMzNjAtXG5uZXQvc21jL2FmX3NtYy5jOjMzNjE6aW50IHNtY19jcmVhdGVfY2xjc2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHkpXG5uZXQvc21jL2FmX3NtYy5jLTMzNjIte1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzM4MC1cbm5ldC9zbWMvYWZfc21jLmM6MzM4MTpzdGF0aWMgaW50IHNtY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG5uZXQvc21jL2FmX3NtYy5jLTMzODItXHRcdCAgICAgIGludCBrZXJuKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzQwMi1cbm5ldC9zbWMvYWZfc21jLmM6MzQwMzpcdHJjID0gc21jX2NyZWF0ZV9jbGNzayhuZXQsIHNrLCBmYW1pbHkpO1xubmV0L3NtYy9hZl9zbWMuYy0zNDA0LVx0aWYgKHJjKSB7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zNDEyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBzbWNfc29ja19mYW1pbHlfb3BzID0ge1xuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzQxNC1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbm5ldC9zbWMvYWZfc21jLmM6MzQxNTpcdC5jcmVhdGVcdD0gc21jX2NyZWF0ZSxcbm5ldC9zbWMvYWZfc21jLmMtMzQxNi19O1xuLS1cbm5ldC9zbWMvc21jLmg9NzE9dm9pZCBzbWNfc2tfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgaW50IHByb3RvY29sKTtcbm5ldC9zbWMvc21jLmgtNzItLyogY2xjc29jayBpbml0aWFsaXphdGlvbiAqL1xubmV0L3NtYy9zbWMuaDo3MzppbnQgc21jX2NyZWF0ZV9jbGNzayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgaW50IGZhbWlseSk7XG5uZXQvc21jL3NtYy5oLTc0LVxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz0xMTM9c3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9zbWMvc21jX2luZXQuYy0xMTktXHQvKiBjcmVhdGUgY2xjc29jayAqL1xubmV0L3NtYy9zbWNfaW5ldC5jOjEyMDpcdHJldHVybiBzbWNfY3JlYXRlX2NsY3NrKG5ldCwgc2ssIHNrLVx1MDAzZXNrX2ZhbWlseSk7XG5uZXQvc21jL3NtY19pbmV0LmMtMTIxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBTb2NrZXQgQWxsb2NhdGlvbiBpbiBTTUMgQ3JlYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIG15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGNydWNpYWwgc29ja2V0IGFsbG9jYXRpb24gcG9pbnRzIHdpdGhpbiB0aGUgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucyAoU01DKSBzZXR1cC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGBzbWNfc29ja19hbGxvY2Agb3IsIGFsdGVybmF0aXZlbHksIHRoZSBtb3JlIGdlbmVyaWMgYHNrX2FsbG9jYCBmdW5jdGlvbnMgYXMgdGhleSYjMzk7cmUgdXRpbGl6ZWQgd2l0aGluIGJvdGggYHNtY19jcmVhdGVgIGFuZCBgc21jX3NrX2luaXRgLiBNeSBpbnRlbnRpb24gaXMgdG8gaW1tZWRpYXRlbHkgc2VlIGhvdyB0aGUgc3lzdGVtIGFsbG9jYXRlcyB0aGUgKmFjdHVhbCogc29ja2V0IG9iamVjdCB0aGF0IHdpbGwgdW5kZXJwaW4gdGhlIFNNQyBjb21tdW5pY2F0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgZGlmZmVyaW5nIGFsbG9jYXRpb24gcGF0aHMgZGVwZW5kaW5nIG9uIGNvbnRleHQsIGFuZCBpZiBzbywgaG93IHRob3NlIHBhdGhzIG1heSBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgcmVzb3VyY2UgdXRpbGl6YXRpb24uIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZmxhZ3Mgb3IgcGFyYW1ldGVycyBwYXNzZWQgZHVyaW5nIHNvY2tldCBhbGxvY2F0aW9uIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGUgU01DIGRvbWFpbj8gQXJlIHdlIGFsbG9jYXRpbmcgYSBzdGFuZGFyZCBzb2NrZXQgdGhlbiBtb2RpZnlpbmcgaXQsIG9yIGlzIGEgZGVkaWNhdGVkIFNNQy1hd2FyZSBzb2NrZXQgdHlwZSBiZWluZyBicm91Z2h0IGludG8gZXhpc3RlbmNlPyBHZXR0aW5nIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFsbG9jYXRpb24gZmxvdyBpcyBnb2luZyB0byBiZSBmb3VuZGF0aW9uYWwgZm9yIGRpYWdub3NpbmcgYW55IGlzc3VlcyBsYXRlciBvbjsgZXNwZWNpYWxseSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVyaW5nIHNvY2tldCBsaWZldGltZSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz00Mjk9c3RhdGljIHN0cnVjdCBzb2NrICpzbWNfc29ja19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3NtYy9hZl9zbWMuYy00MzUtXHRwcm90ID0gKHByb3RvY29sID09IFNNQ1BST1RPX1NNQzYpID8gXHUwMDI2c21jX3Byb3RvNiA6IFx1MDAyNnNtY19wcm90bztcbm5ldC9zbWMvYWZfc21jLmM6NDM2Olx0c2sgPSBza19hbGxvYyhuZXQsIFBGX1NNQywgR0ZQX0tFUk5FTCwgcHJvdCwgMCk7XG5uZXQvc21jL2FmX3NtYy5jLTQzNy1cdGlmICghc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBzbWNfc29ja19hbGxvY2AgZnVuY3Rpb24gaW4gYG5ldC9zbWMvYWZfc21jLmNgOgoKKipBbmFseXppbmcgc21jX3NvY2tfYWxsb2MgaW4gbmV0L3NtYy9hZl9zbWMuYyoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBvcGVuaW5nIHVwIHRoZSBgc21jX3NvY2tfYWxsb2NgIGZ1bmN0aW9uIGluIGBuZXQvc21jL2FmX3NtYy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIFNNQyBzb2NrZXRzIGFyZSBhY3R1YWxseSBpbml0aWFsaXplZCBhbmQgY3JlYXRlZC4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIHRoYXQgdGhpcyBpcyB0aGUgcHJpbWFyeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGZvciB0aGUgU01DIHNvY2tldCBzdHJ1Y3R1cmUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgc2V0cyB1cCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGFueSBkZWZhdWx0IHZhbHVlcyBpdCB1c2VzLCBhbmQgd2hhdCBraW5kIG9mIGluaXRpYWwgY2hlY2tzIGl0JiMzOTtzIHBlcmZvcm1pbmcuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3ksIHdoZXRoZXIgaXQmIzM5O3MgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGttYWxsb2NgIGFuZCB3aGV0aGVyIGFueSBzcGVjaWZpYyBmbGFncyBhcmUgYmVpbmcgYXBwbGllZC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBhbnkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNvY2tldCYjMzk7cyBpbnRlcm5hbCBzdGF0ZSB2YXJpYWJsZXMsIHRoZSBzZXR0aW5nIG9mIHRoZSBwcm90b2NvbCBmYW1pbHksIGFuZCBwb3RlbnRpYWxseSBhbnkgcmVnaXN0cmF0aW9uIG9yIGxpbmtpbmcgaW50byB0aGUgb3ZlcmFsbCBTTUMgc3Vic3lzdGVtLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nIOKAkyBob3cgaXQgcmVzcG9uZHMgdG8gYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBvdGhlciBwb3RlbnRpYWwgaXNzdWVzIGR1cmluZyB0aGUgc29ja2V0IHNldHVwIHByb2Nlc3MuIEFueSByZXNvdXJjZSBsaW1pdHMgYmVpbmcgY29uc2lkZXJlZD8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBhdCB0aGlzIHBvaW50PyBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLCBhbmQgaXQgZ2l2ZXMgYSBwcmV0dHkgZ29vZCBjbHVlIG9mIHRoZSBvdmVyYWxsIHBpY3R1cmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyNTpcdFx0c21jX2Nsb3NlX2luaXQoc21jKTtcbiA0MjY6XHRcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlaGFzaChzayk7XG4gNDI3Olx0fVxuIDQyODpcdFxuIDQyOTpcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqc21jX3NvY2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIDQzMDpcdFx0XHRcdFx0ICAgaW50IHByb3RvY29sKVxuIDQzMTpcdHtcbiA0MzI6XHRcdHN0cnVjdCBwcm90byAqcHJvdDtcbiA0MzM6XHRcdHN0cnVjdCBzb2NrICpzaztcbiA0MzQ6XHRcbiA0MzU6XHRcdHByb3QgPSAocHJvdG9jb2wgPT0gU01DUFJPVE9fU01DNikgPyBcdTAwMjZzbWNfcHJvdG82IDogXHUwMDI2c21jX3Byb3RvO1xuIDQzNjpcdFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX1NNQywgR0ZQX0tFUk5FTCwgcHJvdCwgMCk7XG4gNDM3Olx0XHRpZiAoIXNrKVxuIDQzODpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0Mzk6XHRcbiA0NDA6XHRcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsgLyogc2V0cyBza19yZWZjbnQgdG8gMSAqL1xuIDQ0MTpcdFx0c21jX3NrX2luaXQobmV0LCBzaywgcHJvdG9jb2wpO1xuIDQ0MjpcdFxuIDQ0MzpcdFx0cmV0dXJuIHNrO1xuIDQ0NDpcdH1cbiA0NDU6XHRcbiA0NDY6XHRpbnQgc21jX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxuIDQ0NzpcdFx0ICAgICBpbnQgYWRkcl9sZW4pXG4gNDQ4Olx0e1xuIDQ0OTpcdFx0c3RydWN0IHNvY2thZGRyX2luICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyO1xuIDQ1MDpcdFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiA0NTE6XHRcdHN0cnVjdCBzbWNfc29jayAqc21jO1xuIDQ1MjpcdFx0aW50IHJjO1xuIDQ1MzpcdFxuIDQ1NDpcdFx0c21jID0gc21jX3NrKHNrKTtcbiA0NTU6XHRcbiA0NTY6XHRcdC8qIHJlcGxpY2F0ZSB0ZXN0cyBmcm9tIGluZXRfYmluZCgpLCB0byBiZSBzYWZlIHdydC4gZnV0dXJlIGNoYW5nZXMgKi9cbiA0NTc6XHRcdHJjID0gLUVJTlZBTDtcbiA0NTg6XHRcdGlmIChhZGRyX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpXG4gNDU5Olx0XHRcdGdvdG8gb3V0O1xuIDQ2MDpcdFxuIDQ2MTpcdFx0cmMgPSAtRUFGTk9TVVBQT1JUO1xuIDQ2MjpcdFx0aWYgKGFkZHItXHUwMDNlc2luX2ZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxuIDQ2MzpcdFx0ICAgIGFkZHItXHUwMDNlc2luX2ZhbWlseSAhPSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbiA0NjQ6XHRcdCAgICBhZGRyLVx1MDAzZXNpbl9mYW1pbHkgIT0gQUZfVU5TUEVDKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTYxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIFNNQyBDb25uZWN0aW9uIEhhbmRsaW5nKioKCk9rYXksIHNvIGBza19hbGxvY2AgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgemVyb2VkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHVzaW5nIGVpdGhlciBga21lbV9jYWNoZV96YWxsb2NgIG9yIGBremFsbG9jYC4gVGhhdCYjMzk7cyBnb29kOyBpdCYjMzk7cyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuIEFuZCB0aGVuIEkgc2VlIHRoYXQgYHNtY19jb25uX2NyZWF0ZWAgZXhwbGljaXRseSBzZXRzIGBjb25uLSZndDt1bmhhc2hlZCA9IDBgLiBUaGlzIG1ha2VzIG1lIHRoaW5rIHRoZXJlICpzaG91bGRuJiMzOTt0KiBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGZpZWxkLgoKQnV0LCBJJiMzOTttIGEgc3RpY2tsZXIgZm9yIGRldGFpbCwgYW5kIEkmIzM5O3ZlIGxlYXJuZWQgdGhlIGhhcmQgd2F5IG5vdCB0byBhc3N1bWUgYW55dGhpbmcuIFNvLCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkgY2VydGFpbiouIExldCYjMzk7cyBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IGNoZWNrIGZvciBhbnkgb3RoZXIgaW5zdGFuY2VzIHdoZXJlIGBzbWNfY29ubmVjdGlvbmAgb3IsIGNydWNpYWxseSwgdGhlIGB1bmhhc2hlZGAgZmllbGQsIGlzIHVzZWQgd2l0aGluIHRoZSBTTUMgc3Vic3lzdGVtLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgaWYgdGhlcmUmIzM5O3MgYW55IGNvZGUgcGF0aCB3aGVyZSBgdW5oYXNoZWRgIG1pZ2h0IGJlIHJlYWQgYmVmb3JlIGJlaW5nIGV4cGxpY2l0bHkgc2V0LCBkZXNwaXRlIHRoZSBpbml0aWFsaXphdGlvbiBpbiBgc21jX2Nvbm5fY3JlYXRlYC4KCkkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IGludmVzdGlnYXRpb24gb24gZmlsZXMgaW4gdGhlIGBuZXQvc21jL2AgZGlyZWN0b3J5IGl0c2VsZiwgcGFydGljdWxhcmx5IHRoZSBkaWFnbm9zdGljIHJlYWRlciwgYW5kIGFueSBvdGhlciBmaWxlcyBkZWFsaW5nIHdpdGggY29ubmVjdGlvbiBtYW5hZ2VtZW50LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYWNjZXNzIG9yIHJlbHkgb24gdGhlIGB1bmhhc2hlZGAgZmllbGQmIzM5O3Mgc3RhdGUuIEkgbmVlZCB0byBiZSAxMDAlIGNvbmZpZGVudCB0aGVyZSYjMzk7cyBubyBzdWJ0bGUsIGx1cmtpbmcsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5oYXNoZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmM9Mjg4PXN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMxMy1cdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cbm5ldC9zbWMvYWZfc21jLmM6MzE0Olx0ICogTm9uLWZhbGxiYWNrIHNvY2tldHMgdXNlIHNtY19jb25uX3VuaGFzaCgpIHNvIHRoYXQgdGhlIGNvbm4tXHUwMDNldW5oYXNoZWRcbm5ldC9zbWMvYWZfc21jLmMtMzE1LVx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXG4tLVxubmV0L3NtYy9zbWMuaD0xOTU9c3RydWN0IHNtY19jb25uZWN0aW9uIHtcbi0tXG5uZXQvc21jL3NtYy5oLTI4MS1cdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xubmV0L3NtYy9zbWMuaDoyODI6XHR1OFx0XHRcdHVuaGFzaGVkO1x0LyogcmVtb3ZlZCBmcm9tIHNvY2sgaGFzaCAqL1xubmV0L3NtYy9zbWMuaC0yODMtXHR1OFx0XHRcdG91dF9vZl9zeW5jO1x0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTEyMjQ9c3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTQtLyogdW5oYXNoIHRoZSBzb2NrZXQgb25jZTsgb3ducyB0aGUgc2luZ2xlIHVuaGFzaCBmb3IgYWxsIG5vbi1mYWxsYmFjayBwYXRocy5cbm5ldC9zbWMvc21jX2NvcmUuYzoxMjU1OiAqIEV2ZXJ5IGNhbGxlciBob2xkcyBsb2NrX3NvY2sgZm9yIHRoaXMgc29ja2V0LCBzbyBjb25uLVx1MDAzZXVuaGFzaGVkIGlzIHByb3RlY3RlZFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTYtICogYnkgdGhhdCBsb2NrIGFuZCBubyBzZXBhcmF0ZSBzeW5jaHJvbmlzYXRpb24gaXMgbmVlZGVkLlxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xMjU4PXZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTI2MS1cbm5ldC9zbWMvc21jX2NvcmUuYzoxMjYyOlx0aWYgKCFjb25uLVx1MDAzZXVuaGFzaGVkKSB7XG5uZXQvc21jL3NtY19jb3JlLmM6MTI2MzpcdFx0Y29ubi1cdTAwM2V1bmhhc2hlZCA9IDE7XG5uZXQvc21jL3NtY19jb3JlLmMtMTI2NC1cdFx0c21jLVx1MDAzZXNrLnNrX3Byb3QtXHUwMDNldW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE5OTY9aW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3NC1cdGNvbm4tXHUwMDNlZnJlZWQgPSAwO1xubmV0L3NtYy9zbWNfY29yZS5jOjIwNzU6XHRjb25uLVx1MDAzZXVuaGFzaGVkID0gMDtcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc2LVx0Y29ubi1cdTAwM2Vsb2NhbF90eF9jdHJsLmNvbW1vbi50eXBlID0gU01DX0NEQ19NU0dfVFlQRTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTA6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMwNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIHRoZSBTTUMgRGlhZyBSZWFkZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIHJhY2UgY29uZGl0aW9uIHRoaXMgaXMgdGFyZ2V0aW5nLiBUaGUgYG5ldC9zbWMvc21jX2RpYWcuY2AgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQsIHNwZWNpZmljYWxseSB0aGUgZGlhZyByZWFkZXIgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoYXQgYXJlYSB3ZWxsLCBhbmQgSSYjMzk7dmUgc2VlbiBzb21lIHRyaWNreSB0aHJlYWRpbmcgaXNzdWVzIGNyb3AgdXAgaW4gdGhlIHBhc3QgcmVsYXRlZCB0byBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGNvbGxlY3Rpb24uIE15IGludHVpdGlvbiBzdWdnZXN0cyB0aGF0IHRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUga2luZCBvZiBjb25jdXJyZW50IGFjY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGhvdyB0aGUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyByZWFkIGFuZCB3cml0dGVuLCBwZXJoYXBzIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb3IgdGVhcmRvd24sIG9yIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGFuZCB3aGF0IHRoZSBjb21taXQgbWVzc2FnZSBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWFnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX1NNQylcdCYjNDM7PSBzbWMub1xubmV0L3NtYy9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19TTUNfRElBRylcdCYjNDM7PSBzbWNfZGlhZy5vXG5uZXQvc21jL01ha2VmaWxlLTUtc21jLXkgOj0gYWZfc21jLm8gc21jX3BuZXQubyBzbWNfaWIubyBzbWNfY2xjLm8gc21jX2NvcmUubyBzbWNfd3IubyBzbWNfbGxjLm9cbi0tXG5uZXQvc21jL3NtYy5oPTI4Nj1zdHJ1Y3Qgc21jX3NvY2sge1x0XHRcdFx0Lyogc21jIHNvY2sgY29udGFpbmVyICovXG4tLVxubmV0L3NtYy9zbWMuaC0zMDktXHRpbnRcdFx0XHRmYWxsYmFja19yc247XHQvKiByZWFzb24gZm9yIGZhbGxiYWNrICovXG5uZXQvc21jL3NtYy5oOjMxMDpcdHUzMlx0XHRcdHBlZXJfZGlhZ25vc2lzOyAvKiBkZWNsaW5lIHJlYXNvbiBmcm9tIHBlZXIgKi9cbm5ldC9zbWMvc21jLmgtMzExLVx0YXRvbWljX3QgICAgICAgICAgICAgICAgcXVldWVkX3NtY19oczsgIC8qIHF1ZXVlZCBzbWMgaGFuZHNoYWtlcyAqL1xuLS1cbm5ldC9zbWMvc21jX2NsYy5jPTY4OT1pbnQgc21jX2NsY193YWl0X21zZyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgdm9pZCAqYnVmLCBpbnQgYnVmbGVuLFxuLS1cbm5ldC9zbWMvc21jX2NsYy5jLTc4OS1cdFx0cmVhc29uX2NvZGUgPSBTTUNfQ0xDX0RFQ0xfUEVFUkRFQ0w7XG5uZXQvc21jL3NtY19jbGMuYzo3OTA6XHRcdHNtYy1cdTAwM2VwZWVyX2RpYWdub3NpcyA9IG50b2hsKGRjbGMtXHUwMDNlcGVlcl9kaWFnbm9zaXMpO1xubmV0L3NtYy9zbWNfY2xjLmMtNzkxLVx0XHRpZiAoKGRjbGMtXHUwMDNlaGRyLnR5cGV2MiBcdTAwMjYgU01DX0ZJUlNUX0NPTlRBQ1RfTUFTSykgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3NtYy9zbWNfY2xjLmMtODAzLS8qIHNlbmQgQ0xDIERFQ0xJTkUgbWVzc2FnZSBhY3Jvc3MgaW50ZXJuYWwgVENQIHNvY2tldCAqL1xubmV0L3NtYy9zbWNfY2xjLmM6ODA0OmludCBzbWNfY2xjX3NlbmRfZGVjbGluZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgdTMyIHBlZXJfZGlhZ19pbmZvLCB1OCB2ZXJzaW9uKVxubmV0L3NtYy9zbWNfY2xjLmMtODA1LXtcbi0tXG5uZXQvc21jL3NtY19jbGMuYy04MTctXHRkY2xjLm9zX3R5cGUgPSB2ZXJzaW9uID09IFNNQ19WMSA/IDAgOiBTTUNfQ0xDX09TX0xJTlVYO1xubmV0L3NtYy9zbWNfY2xjLmM6ODE4Olx0ZGNsYy5oZHIudHlwZXYyID0gKHBlZXJfZGlhZ19pbmZvID09IFNNQ19DTENfREVDTF9TWU5DRVJSKSA/XG5uZXQvc21jL3NtY19jbGMuYy04MTktXHRcdFx0XHRcdFx0U01DX0ZJUlNUX0NPTlRBQ1RfTUFTSyA6IDA7XG4tLVxubmV0L3NtYy9zbWNfY2xjLmMtODIzLVx0XHQgICAgICAgc2l6ZW9mKGxvY2FsX3N5c3RlbWlkKSk7XG5uZXQvc21jL3NtY19jbGMuYzo4MjQ6XHRkY2xjLnBlZXJfZGlhZ25vc2lzID0gaHRvbmwocGVlcl9kaWFnX2luZm8pO1xubmV0L3NtYy9zbWNfY2xjLmMtODI1LVx0aWYgKHZlcnNpb24gPT0gU01DX1YxKSB7XG4tLVxubmV0L3NtYy9zbWNfY2xjLmg9MzAyPXN0cnVjdCBzbWNfY2xjX21zZ19kZWNsaW5lIHtcdC8qIGNsYyBkZWNsaW5lIG1lc3NhZ2UgKi9cbi0tXG5uZXQvc21jL3NtY19jbGMuaC0zMDQtXHR1OCBpZF9mb3JfcGVlcltTTUNfU1lTVEVNSURfTEVOXTsgLyogc2VuZGVyIHBlZXJfaWQgKi9cbm5ldC9zbWMvc21jX2NsYy5oOjMwNTpcdF9fYmUzMiBwZWVyX2RpYWdub3NpcztcdC8qIGRpYWdub3NpcyBpbmZvcm1hdGlvbiAqL1xubmV0L3NtYy9zbWNfY2xjLmgtMzA2LSNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRClcbi0tXG5uZXQvc21jL3NtY19jbGMuaC0zMTYtXG5uZXQvc21jL3NtY19jbGMuaDozMTc6I2RlZmluZSBTTUNfREVDTF9ESUFHX0NPVU5UX1YyXHQ0IC8qIG5vLiBvZiBhZGRpdGlvbmFsIHBlZXIgZGlhZ25vc2lzIGNvZGVzICovXG5uZXQvc21jL3NtY19jbGMuaC0zMTgtXG5uZXQvc21jL3NtY19jbGMuaD0zMTk9c3RydWN0IHNtY19jbGNfbXNnX2RlY2xpbmVfdjIge1x0LyogY2xjIGRlY2xpbmUgbWVzc2FnZSAqL1xuLS1cbm5ldC9zbWMvc21jX2NsYy5oLTMyMS1cdHU4IGlkX2Zvcl9wZWVyW1NNQ19TWVNURU1JRF9MRU5dOyAvKiBzZW5kZXIgcGVlcl9pZCAqL1xubmV0L3NtYy9zbWNfY2xjLmg6MzIyOlx0X19iZTMyIHBlZXJfZGlhZ25vc2lzO1x0LyogZGlhZ25vc2lzIGluZm9ybWF0aW9uICovXG5uZXQvc21jL3NtY19jbGMuaC0zMjMtI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKVxuLS1cbm5ldC9zbWMvc21jX2NsYy5oLTMzMC1cdHU4IHJlc2VydmVkMlszXTtcbm5ldC9zbWMvc21jX2NsYy5oOjMzMTpcdF9fYmUzMiBwZWVyX2RpYWdub3Npc192MltTTUNfREVDTF9ESUFHX0NPVU5UX1YyXTtcbm5ldC9zbWMvc21jX2NsYy5oLTMzMi1cdHN0cnVjdCBzbWNfY2xjX21zZ190cmFpbCB0cmw7IC8qIGV5ZSBjYXRjaGVyIFwmIzM0O1NNQ0RcJiMzNDsgb3IgXCYjMzQ7U01DUlwmIzM0OyBFQkNESUMgKi9cbi0tXG5uZXQvc21jL3NtY19jbGMuaD00NDc9aW50IHNtY19jbGNfd2FpdF9tc2coc3RydWN0IHNtY19zb2NrICpzbWMsIHZvaWQgKmJ1ZiwgaW50IGJ1Zmxlbixcbm5ldC9zbWMvc21jX2NsYy5oLTQ0OC1cdFx0ICAgICB1OCBleHBlY3RlZF90eXBlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xubmV0L3NtYy9zbWNfY2xjLmg6NDQ5OmludCBzbWNfY2xjX3NlbmRfZGVjbGluZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgdTMyIHBlZXJfZGlhZ19pbmZvLCB1OCB2ZXJzaW9uKTtcbm5ldC9zbWMvc21jX2NsYy5oLTQ1MC1pbnQgc21jX2NsY19zZW5kX3Byb3Bvc2FsKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTI2OT12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjc5LVx0Y29ubi1cdTAwM2VmcmVlZCA9IDE7XG5uZXQvc21jL3NtY19jb3JlLmM6MTI4MDpcdC8qIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgbGdyL2xuayByZWZzIHNvIHRoZSBkaWFnIHJlYWRlciwgd2hpY2hcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjgxLVx0ICogaXRlcmF0ZXMgdW5kZXIgdGhlIHNvY2tldCBoYXNoIHJlYWRfbG9jaywgY2Fubm90IHNlZSBhIGNvbm5lY3Rpb24gd2hvc2Vcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTUtI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG5uZXQvc21jL3NtY19kaWFnLmM6MTY6I2luY2x1ZGUgXHUwMDNjbGludXgvc29ja19kaWFnLmhcdTAwM2Vcbm5ldC9zbWMvc21jX2RpYWcuYzoxNzojaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFx1MDAzZVxubmV0L3NtYy9zbWNfZGlhZy5jOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3NtY19kaWFnLmhcdTAwM2Vcbm5ldC9zbWMvc21jX2RpYWcuYy0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTI1LVxubmV0L3NtYy9zbWNfZGlhZy5jOjI2OnN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCB7XG5uZXQvc21jL3NtY19kaWFnLmMtMjctXHRpbnQgcG9zWzJdO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yOS1cbm5ldC9zbWMvc21jX2RpYWcuYzozMDpzdGF0aWMgc3RydWN0IHNtY19kaWFnX2R1bXBfY3R4ICpzbWNfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9zbWMvc21jX2RpYWcuYy0zMS17XG5uZXQvc21jL3NtY19kaWFnLmM6MzI6XHRyZXR1cm4gKHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqKWNiLVx1MDAzZWN0eDtcbm5ldC9zbWMvc21jX2RpYWcuYy0zMy19XG5uZXQvc21jL3NtY19kaWFnLmMtMzQtXG5uZXQvc21jL3NtY19kaWFnLmM6MzU6c3RhdGljIHZvaWQgc21jX2RpYWdfbXNnX2NvbW1vbl9maWxsKHN0cnVjdCBzbWNfZGlhZ19tc2cgKnIsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9zbWMvc21jX2RpYWcuYy0zNi17XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTM5LVx0bWVtc2V0KHIsIDAsIHNpemVvZigqcikpO1xubmV0L3NtYy9zbWNfZGlhZy5jOjQwOlx0ci1cdTAwM2VkaWFnX2ZhbWlseSA9IHNrLVx1MDAzZXNrX2ZhbWlseTtcbm5ldC9zbWMvc21jX2RpYWcuYzo0MTpcdHNvY2tfZGlhZ19zYXZlX2Nvb2tpZShzaywgci1cdTAwM2VpZC5pZGlhZ19jb29raWUpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTQyLVx0aWYgKCFzbWMtXHUwMDNlY2xjc29jaylcbm5ldC9zbWMvc21jX2RpYWcuYy00My1cdFx0cmV0dXJuO1xubmV0L3NtYy9zbWNfZGlhZy5jOjQ0Olx0ci1cdTAwM2VpZC5pZGlhZ19zcG9ydCA9IGh0b25zKHNtYy1cdTAwM2VjbGNzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX251bSk7XG5uZXQvc21jL3NtY19kaWFnLmM6NDU6XHRyLVx1MDAzZWlkLmlkaWFnX2Rwb3J0ID0gc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2stXHUwMDNlc2tfZHBvcnQ7XG5uZXQvc21jL3NtY19kaWFnLmM6NDY6XHRyLVx1MDAzZWlkLmlkaWFnX2lmID0gc21jLVx1MDAzZWNsY3NvY2stXHUwMDNlc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmO1xubmV0L3NtYy9zbWNfZGlhZy5jLTQ3LVx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IFNNQ1BST1RPX1NNQykge1xubmV0L3NtYy9zbWNfZGlhZy5jOjQ4Olx0XHRyLVx1MDAzZWlkLmlkaWFnX3NyY1swXSA9IHNtYy1cdTAwM2VjbGNzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3Jjdl9zYWRkcjtcbm5ldC9zbWMvc21jX2RpYWcuYzo0OTpcdFx0ci1cdTAwM2VpZC5pZGlhZ19kc3RbMF0gPSBzbWMtXHUwMDNlY2xjc29jay1cdTAwM2Vzay1cdTAwM2Vza19kYWRkcjtcbm5ldC9zbWMvc21jX2RpYWcuYy01MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9zbWMvc21jX2RpYWcuYy01MS1cdH0gZWxzZSBpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gU01DUFJPVE9fU01DNikge1xubmV0L3NtYy9zbWNfZGlhZy5jOjUyOlx0XHRtZW1jcHkoXHUwMDI2ci1cdTAwM2VpZC5pZGlhZ19zcmMsIFx1MDAyNnNtYy1cdTAwM2VjbGNzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3Y2X3Jjdl9zYWRkcixcbm5ldC9zbWMvc21jX2RpYWcuYy01My1cdFx0ICAgICAgIHNpemVvZihzbWMtXHUwMDNlY2xjc29jay1cdTAwM2Vzay1cdTAwM2Vza192Nl9yY3Zfc2FkZHIpKTtcbm5ldC9zbWMvc21jX2RpYWcuYzo1NDpcdFx0bWVtY3B5KFx1MDAyNnItXHUwMDNlaWQuaWRpYWdfZHN0LCBcdTAwMjZzbWMtXHUwMDNlY2xjc29jay1cdTAwM2Vzay1cdTAwM2Vza192Nl9kYWRkcixcbm5ldC9zbWMvc21jX2RpYWcuYy01NS1cdFx0ICAgICAgIHNpemVvZihzbWMtXHUwMDNlY2xjc29jay1cdTAwM2Vzay1cdTAwM2Vza192Nl9kYWRkcikpO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy01OS1cbm5ldC9zbWMvc21jX2RpYWcuYzo2MDpzdGF0aWMgaW50IHNtY19kaWFnX21zZ19hdHRyc19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zbWMvc21jX2RpYWcuYzo2MTpcdFx0XHRcdCAgIHN0cnVjdCBzbWNfZGlhZ19tc2cgKnIsXG5uZXQvc21jL3NtY19kaWFnLmMtNjItXHRcdFx0XHQgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTY2LVxubmV0L3NtYy9zbWNfZGlhZy5jOjY3Olx0ci1cdTAwM2VkaWFnX3VpZCA9IGZyb21fa3VpZF9tdW5nZWQodXNlcl9ucywgc2tfdWlkKHNrKSk7XG5uZXQvc21jL3NtY19kaWFnLmM6Njg6XHRyLVx1MDAzZWRpYWdfaW5vZGUgPSBzb2NrX2lfaW5vKHNrKTtcbm5ldC9zbWMvc21jX2RpYWcuYy02OS1cdHJldHVybiAwO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy03MS1cbm5ldC9zbWMvc21jX2RpYWcuYzo3MjpzdGF0aWMgaW50IF9fc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc21jL3NtY19kaWFnLmMtNzMtXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxubmV0L3NtYy9zbWNfZGlhZy5jOjc0Olx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzbWNfZGlhZ19yZXEgKnJlcSxcbm5ldC9zbWMvc21jX2RpYWcuYy03NS1cdFx0XHQgICBzdHJ1Y3QgbmxhdHRyICpiYylcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtNzctXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHNtY19zayhzayk7XG5uZXQvc21jL3NtY19kaWFnLmM6Nzg6XHRzdHJ1Y3Qgc21jX2RpYWdfZmFsbGJhY2sgZmFsbGJhY2s7XG5uZXQvc21jL3NtY19kaWFnLmMtNzktXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XG5uZXQvc21jL3NtY19kaWFnLmM6ODA6XHRzdHJ1Y3Qgc21jX2RpYWdfbXNnICpyO1xubmV0L3NtYy9zbWNfZGlhZy5jLTgxLVx0c3RydWN0IG5sbXNnaGRyICpubGg7XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTg4LVx0ciA9IG5sbXNnX2RhdGEobmxoKTtcbm5ldC9zbWMvc21jX2RpYWcuYzo4OTpcdHNtY19kaWFnX21zZ19jb21tb25fZmlsbChyLCBzayk7XG5uZXQvc21jL3NtY19kaWFnLmM6OTA6XHRyLVx1MDAzZWRpYWdfc3RhdGUgPSBzay1cdTAwM2Vza19zdGF0ZTtcbm5ldC9zbWMvc21jX2RpYWcuYy05MS1cdGlmIChzbWMtXHUwMDNldXNlX2ZhbGxiYWNrKVxubmV0L3NtYy9zbWNfZGlhZy5jOjkyOlx0XHRyLVx1MDAzZWRpYWdfbW9kZSA9IFNNQ19ESUFHX01PREVfRkFMTEJBQ0tfVENQO1xubmV0L3NtYy9zbWNfZGlhZy5jLTkzLVx0ZWxzZSBpZiAoc21jX2Nvbm5fbGdyX3ZhbGlkKFx1MDAyNnNtYy1cdTAwM2Vjb25uKSBcdTAwMjZcdTAwMjYgc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZWlzX3NtY2QpXG5uZXQvc21jL3NtY19kaWFnLmM6OTQ6XHRcdHItXHUwMDNlZGlhZ19tb2RlID0gU01DX0RJQUdfTU9ERV9TTUNEO1xubmV0L3NtYy9zbWNfZGlhZy5jLTk1LVx0ZWxzZVxubmV0L3NtYy9zbWNfZGlhZy5jOjk2Olx0XHRyLVx1MDAzZWRpYWdfbW9kZSA9IFNNQ19ESUFHX01PREVfU01DUjtcbm5ldC9zbWMvc21jX2RpYWcuYy05Ny1cdHVzZXJfbnMgPSBza191c2VyX25zKE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5zayk7XG5uZXQvc21jL3NtY19kaWFnLmM6OTg6XHRpZiAoc21jX2RpYWdfbXNnX2F0dHJzX2ZpbGwoc2ssIHNrYiwgciwgdXNlcl9ucykpXG5uZXQvc21jL3NtY19kaWFnLmMtOTktXHRcdGdvdG8gZXJyb3V0O1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0xMDEtXHRmYWxsYmFjay5yZWFzb24gPSBzbWMtXHUwMDNlZmFsbGJhY2tfcnNuO1xubmV0L3NtYy9zbWNfZGlhZy5jOjEwMjpcdGZhbGxiYWNrLnBlZXJfZGlhZ25vc2lzID0gc21jLVx1MDAzZXBlZXJfZGlhZ25vc2lzO1xubmV0L3NtYy9zbWNfZGlhZy5jLTEwMy1cdGlmIChubGFfcHV0KHNrYiwgU01DX0RJQUdfRkFMTEJBQ0ssIHNpemVvZihmYWxsYmFjayksIFx1MDAyNmZhbGxiYWNrKSBcdTAwM2MgMClcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTA1LVxubmV0L3NtYy9zbWNfZGlhZy5jOjEwNjpcdGlmICgocmVxLVx1MDAzZWRpYWdfZXh0IFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgKFNNQ19ESUFHX0NPTk5JTkZPIC0gMSkpKSBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2RpYWcuYy0xMDctXHQgICAgc21jLVx1MDAzZWNvbm4uYWxlcnRfdG9rZW5fbG9jYWwpIHtcbm5ldC9zbWMvc21jX2RpYWcuYy0xMDgtXHRcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFx1MDAyNnNtYy1cdTAwM2Vjb25uO1xubmV0L3NtYy9zbWNfZGlhZy5jOjEwOTpcdFx0c3RydWN0IHNtY19kaWFnX2Nvbm5pbmZvIGNpbmZvID0ge1xubmV0L3NtYy9zbWNfZGlhZy5jLTExMC1cdFx0XHQudG9rZW4gPSBjb25uLVx1MDAzZWFsZXJ0X3Rva2VuX2xvY2FsLFxuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0xNDYtXHRpZiAoc21jX2Nvbm5fbGdyX3ZhbGlkKFx1MDAyNnNtYy1cdTAwM2Vjb25uKSBcdTAwMjZcdTAwMjYgIXNtYy1cdTAwM2Vjb25uLmxnci1cdTAwM2Vpc19zbWNkIFx1MDAyNlx1MDAyNlxubmV0L3NtYy9zbWNfZGlhZy5jOjE0NzpcdCAgICAocmVxLVx1MDAzZWRpYWdfZXh0IFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgKFNNQ19ESUFHX0xHUklORk8gLSAxKSkpIFx1MDAyNlx1MDAyNlxubmV0L3NtYy9zbWNfZGlhZy5jLTE0OC1cdCAgICAhbGlzdF9lbXB0eShcdTAwMjZzbWMtXHUwMDNlY29ubi5sZ3ItXHUwMDNlbGlzdCkpIHtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTUwLVxubmV0L3NtYy9zbWNfZGlhZy5jOjE1MTpcdFx0c3RydWN0IHNtY19kaWFnX2xncmluZm8gbGluZm8gPSB7XG5uZXQvc21jL3NtY19kaWFnLmMtMTUyLVx0XHRcdC5yb2xlID0gc21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZXJvbGUsXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTE2NS1cdGlmIChzbWNfY29ubl9sZ3JfdmFsaWQoXHUwMDI2c21jLVx1MDAzZWNvbm4pIFx1MDAyNlx1MDAyNiBzbWMtXHUwMDNlY29ubi5sZ3ItXHUwMDNlaXNfc21jZCBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2RpYWcuYzoxNjY6XHQgICAgKHJlcS1cdTAwM2VkaWFnX2V4dCBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIChTTUNfRElBR19ETUJJTkZPIC0gMSkpKSBcdTAwMjZcdTAwMjZcbm5ldC9zbWMvc21jX2RpYWcuYy0xNjctXHQgICAgIWxpc3RfZW1wdHkoXHUwMDI2c21jLVx1MDAzZWNvbm4ubGdyLVx1MDAzZWxpc3QpIFx1MDAyNlx1MDAyNiBzbWMtXHUwMDNlY29ubi5ybWJfZGVzYykge1xubmV0L3NtYy9zbWNfZGlhZy5jLTE2OC1cdFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXHUwMDI2c21jLVx1MDAzZWNvbm47XG5uZXQvc21jL3NtY19kaWFnLmM6MTY5Olx0XHRzdHJ1Y3Qgc21jZF9kaWFnX2RtYmluZm8gZGluZm87XG5uZXQvc21jL3NtY19kaWFnLmMtMTcwLVx0XHRzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QgPSBjb25uLVx1MDAzZWxnci1cdTAwM2VzbWNkO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0xOTUtXG5uZXQvc21jL3NtY19kaWFnLmM6MTk2OnN0YXRpYyBpbnQgc21jX2RpYWdfZHVtcF9wcm90byhzdHJ1Y3QgcHJvdG8gKnByb3QsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc21jL3NtY19kaWFnLmMtMTk3LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCBwX3R5cGUpXG5uZXQvc21jL3NtY19kaWFnLmMtMTk4LXtcbm5ldC9zbWMvc21jX2RpYWcuYzoxOTk6XHRzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKmNiX2N0eCA9IHNtY19kdW1wX2NvbnRleHQoY2IpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTIwMC1cdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTIxNi1cdFx0XHRnb3RvIG5leHQ7XG5uZXQvc21jL3NtY19kaWFnLmM6MjE3Olx0XHRyYyA9IF9fc21jX2RpYWdfZHVtcChzaywgc2tiLCBjYiwgbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpLCBiYyk7XG5uZXQvc21jL3NtY19kaWFnLmMtMjE4LVx0XHRpZiAocmMgXHUwMDNjIDApXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTIyOS1cbm5ldC9zbWMvc21jX2RpYWcuYzoyMzA6c3RhdGljIGludCBzbWNfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzEte1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yMzMtXG5uZXQvc21jL3NtY19kaWFnLmM6MjM0Olx0cmMgPSBzbWNfZGlhZ19kdW1wX3Byb3RvKFx1MDAyNnNtY19wcm90bywgc2tiLCBjYiwgU01DUFJPVE9fU01DKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzUtXHRpZiAoIXJjKVxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNjpcdFx0c21jX2RpYWdfZHVtcF9wcm90byhcdTAwMjZzbWNfcHJvdG82LCBza2IsIGNiLCBTTUNQUk9UT19TTUM2KTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzctXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjM5LVxubmV0L3NtYy9zbWNfZGlhZy5jOjI0MDpzdGF0aWMgaW50IHNtY19kaWFnX2hhbmRsZXJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKmgpXG5uZXQvc21jL3NtY19kaWFnLmMtMjQxLXtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjQ3LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xubmV0L3NtYy9zbWNfZGlhZy5jOjI0ODpcdFx0XHRcdC5kdW1wID0gc21jX2RpYWdfZHVtcCxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNDktXHRcdFx0XHQubWluX2R1bXBfYWxsb2MgPSBTS0JfV0lUSF9PVkVSSEVBRCgzMjc2OCksXG5uZXQvc21jL3NtY19kaWFnLmMtMjUwLVx0XHRcdH07XG5uZXQvc21jL3NtY19kaWFnLmM6MjUxOlx0XHRcdHJldHVybiBuZXRsaW5rX2R1bXBfc3RhcnQobmV0LVx1MDAzZWRpYWdfbmxzaywgc2tiLCBoLCBcdTAwMjZjKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNTItXHRcdH1cbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjU2LVxubmV0L3NtYy9zbWNfZGlhZy5jOjI1NzpzdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19oYW5kbGVyIHNtY19kaWFnX2hhbmRsZXIgPSB7XG5uZXQvc21jL3NtY19kaWFnLmMtMjU4LVx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5uZXQvc21jL3NtY19kaWFnLmMtMjU5LVx0LmZhbWlseSA9IEFGX1NNQyxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjA6XHQuZHVtcCA9IHNtY19kaWFnX2hhbmRsZXJfZHVtcCxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjEtfTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjItXG5uZXQvc21jL3NtY19kaWFnLmM6MjYzOnN0YXRpYyBpbnQgX19pbml0IHNtY19kaWFnX2luaXQodm9pZClcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjQte1xubmV0L3NtYy9zbWNfZGlhZy5jOjI2NTpcdHJldHVybiBzb2NrX2RpYWdfcmVnaXN0ZXIoXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XG5uZXQvc21jL3NtY19kaWFnLmMtMjY2LX1cbm5ldC9zbWMvc21jX2RpYWcuYy0yNjctXG5uZXQvc21jL3NtY19kaWFnLmM6MjY4OnN0YXRpYyB2b2lkIF9fZXhpdCBzbWNfZGlhZ19leGl0KHZvaWQpXG5uZXQvc21jL3NtY19kaWFnLmMtMjY5LXtcbm5ldC9zbWMvc21jX2RpYWcuYzoyNzA6XHRzb2NrX2RpYWdfdW5yZWdpc3RlcihcdTAwMjZzbWNfZGlhZ19oYW5kbGVyKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yNzEtfVxubmV0L3NtYy9zbWNfZGlhZy5jLTI3Mi1cbm5ldC9zbWMvc21jX2RpYWcuYzoyNzM6bW9kdWxlX2luaXQoc21jX2RpYWdfaW5pdCk7XG5uZXQvc21jL3NtY19kaWFnLmM6Mjc0Om1vZHVsZV9leGl0KHNtY19kaWFnX2V4aXQpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTI3NS1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuLS1cbm5ldC9zbWMvc21jX2liLmM9NDU4PWludCBzbWNfaWJfY3JlYXRlX3Byb3RlY3Rpb25fZG9tYWluKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX2liLmMtNDY4LVxubmV0L3NtYy9zbWNfaWIuYzo0Njk6c3RhdGljIGJvb2wgc21jcl9kaWFnX2lzX2Rldl9jcml0aWNhbChzdHJ1Y3Qgc21jX2xncl9saXN0ICpzbWNfbGdyLFxubmV0L3NtYy9zbWNfaWIuYy00NzAtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpXG4tLVxubmV0L3NtYy9zbWNfaWIuYz01NTI9c3RhdGljIGludCBzbWNfbmxfaGFuZGxlX3NtY3JfZGV2KHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldixcbi0tXG5uZXQvc21jL3NtY19pYi5jLTU3MS1cdFx0Z290byBlcnJvdXQ7XG5uZXQvc21jL3NtY19pYi5jOjU3MjpcdGlzX2NyaXQgPSBzbWNyX2RpYWdfaXNfZGV2X2NyaXRpY2FsKFx1MDAyNnNtY19sZ3JfbGlzdCwgc21jaWJkZXYpO1xubmV0L3NtYy9zbWNfaWIuYy01NzMtXHRpZiAobmxhX3B1dF91OChza2IsIFNNQ19OTEFfREVWX0lTX0NSSVQsIGlzX2NyaXQpKVxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz0xMjM9c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9zbWMvc21jX2luZXQuYy0xMjQte1xubmV0L3NtYy9zbWNfaW5ldC5jOjEyNTpcdC8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLVx1MDAzZWNsY3NvY2tcbm5ldC9zbWMvc21jX2luZXQuYy0xMjYtXHQgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEwOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzg3CgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiwgbGlrZWx5IGEgVXNlLUFmdGVyLUZyZWUgb3IgYSBOVUxMIGRlcmVmZXJlbmNlLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgYHNtY19kaWFnYCBjb2RlIGl0ZXJhdGluZyB0aHJvdWdoIGhhc2hlZCBTTUMgc29ja2V0cyBhbmQgYWNjZXNzaW5nIHRoZSBgc21jLSZndDtjb25uLmxncmAgb3IgYGxua2AgcG9pbnRlcnMgd2hpbGUgYHNtY19jb25uX2ZyZWUoKWAgaXMgcG90ZW50aWFsbHkgdGVhcmluZyB0aGVtIGRvd24gY29uY3VycmVudGx5LiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4gY29uY3VycmVudCBzeXN0ZW1zLCBhbmQgaXQmIzM5O3MgZ29vZCB0aGV5IGFyZSBhZGRyZXNzaW5nIHRoaXMuIFRoZSBzb2x1dGlvbiBvZiB1bmhhc2hpbmcgdGhlIHNvY2tldCAqYmVmb3JlKiBmcmVlaW5nIHRob3NlIGNydWNpYWwgcmVmZXJlbmNlcyBpbiBgc21jX2Nvbm5fZnJlZSgpYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBwcmV2ZW50IHRoZSBhY2Nlc3MgdG8gc3RhbGUgbWVtb3J5LiBJbnRyb2R1Y2luZyB0aGUgYGNvbm4tJmd0O3VuaGFzaGVkYCBmbGFnIGFuZCB1c2luZyBpdCB0byBwcmV2ZW50IGRvdWJsZS11bmhhc2hpbmcgKG9yIGVuc3VyaW5nIGl0IGhhcHBlbnMgb25seSBvbmNlKSBpcyBhIGNsZWFuIHdheSB0byBtYW5hZ2UgdGhlIHN0YXRlIGNoYW5nZS4gSSB3b3VsZCBleHBlY3QgdGhpcyB0byByZXNvbHZlIHRoZSBvcmlnaW5hbCBpc3N1ZS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7RGlkIHRoaXMgZml4IGludHJvZHVjZSBhbnkgbmV3IGlzc3Vlcz8mIzM0Oy4gU3BlY2lmaWNhbGx5LCBhcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG5vdz8gSSYjMzk7bSBzZWVpbmcgYSBuZXcgZmllbGQsIGB1OCB1bmhhc2hlZDtgLCBhZGRlZCB0byB0aGUgYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuIEhvd2V2ZXIsIHRoZSBtZW1vcnkgZm9yIGBzdHJ1Y3Qgc21jX3NvY2tgIGlzIGFsbG9jYXRlZCB2aWEgYHNrX2FsbG9jYCB3aGljaCB1c2VzIGBrbWVtX2NhY2hlX3phbGxvY2Agb3IgYGt6YWxsb2NgLCBtZWFuaW5nIGl0JiMzOTtzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC4gRnVydGhlciwgYHNtY19jb25uX2NyZWF0ZWAgZXhwbGljaXRseSBpbml0aWFsaXplcyBgY29ubi0mZ3Q7dW5oYXNoZWQgPSAwO2AuIFRoZSB1c2Ugb2YgYHNtY19jb25uX3VuaGFzaGAgY2hlY2tzIHRoaXMgZmxhZyBiZWZvcmUgb3BlcmF0aW5nLiBUaGVyZSBhcmVuJiMzOTt0IGFueSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLCBvciBldmVuIHVzZWQgaW4gYW55IGJyYW5jaGluZyBsb2dpYy4gQW5kIEkgc2VlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0cyBjb3BpZWQgdG8gdXNlcnNwYWNlIChubyBuZXcgcGFkZGluZywgbm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYmVpbmcgc2VudCBvdmVyIG5ldGxpbmsgb3IgaW9jdGwpLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBidWZmZXIgbGVuZ3RocyBvciBib3VuZCBjaGVja3MsIGVpdGhlci4gVGhlIHBhdGNoIHNlZW1zIHZlcnkgd2VsbC1jb250YWluZWQgYW5kIGNhcmVmdWwuCgpXaXRoIHRoaXMgaW4gbWluZCwgbGV0JiMzOTtzIGNvbnNpZGVyIEtBU0FOIHZzLiBLTVNBTi4gVGhlIG9yaWdpbmFsIGJ1ZyB3YXMgYSBjbGFzc2ljIFVBRi9yYWNlLCB3aGljaCBLQVNBTiB3b3VsZCBiZSBncmVhdCBhdCBjYXRjaGluZy4gVGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gU3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgc2hvdWxkIGJlIGVudGlyZWx5IHN1ZmZpY2llbnQgZm9yIHZlcmlmeWluZyB0aGlzIGZpeCBhbmQgZW5zdXJpbmcgdGhlcmUgYXJlIG5vIG5ldyB2dWxuZXJhYmlsaXRpZXMuCgpTbywgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIHByb3ZpZGUgY2xlYXIgcmVhc29uaW5nIGFib3V0IHRoZSBVQUYgbmF0dXJlIG9mIHRoZSBvcmlnaW5hbCBwcm9ibGVtIGFuZCB0aGUgbGFjayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHNvY2tldCB0ZWFyZG93biAoc21jX2Nvbm5fZnJlZSkgYW5kIHNvY2tldCBkaWFnbm9zdGljcyAoc21jX2RpYWcpIGJ5IHVuaGFzaGluZyB0aGUgc29ja2V0IGVhcmxpZXIgYW5kIHRyYWNraW5nIHRoZSB1bmhhc2ggc3RhdGUgdmlhIGEgbmV3IGB1bmhhc2hlZGAgZmxhZyBpbiBgc3RydWN0IHNtY19jb25uZWN0aW9uYC5cblxuMS4gVGhlIG5ldyBgdW5oYXNoZWRgIGZpZWxkIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgc21jX3NvY2tgIHZpYSBgc2tfYWxsb2MoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkpIGFuZCBpcyBleHBsaWNpdGx5IHJlc2V0IHRvIDAgaW4gYHNtY19jb25uX2NyZWF0ZSgpYC5cbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXG4zLiBObyBrZXJuZWwtdG8tdXNlciBjb3B5IHN0cnVjdHVyZXMgKHN1Y2ggYXMgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgaW9jdGwgc3RydWN0dXJlcykgaGF2ZSBoYWQgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyBpbnRyb2R1Y2VkLlxuNC4gVGhlIHJhY2UgY29uZGl0aW9uIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUCwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBzb2NrZXQgdGVhcmRvd24gKHNtY19jb25uX2ZyZWUpIGFuZCBzb2NrZXQgZGlhZ25vc3RpY3MgKHNtY19kaWFnKSBieSB1bmhhc2hpbmcgdGhlIHNvY2tldCBlYXJsaWVyIGFuZCB0cmFja2luZyB0aGUgdW5oYXNoIHN0YXRlIHZpYSBhIG5ldyBgdW5oYXNoZWRgIGZsYWcgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuXG5cbjEuIFRoZSBuZXcgYHVuaGFzaGVkYCBmaWVsZCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IHNtY19zb2NrYCB2aWEgYHNrX2FsbG9jKClgICh3aGljaCB6ZXJvZXMgbWVtb3J5KSBhbmQgaXMgZXhwbGljaXRseSByZXNldCB0byAwIGluIGBzbWNfY29ubl9jcmVhdGUoKWAuXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxuMy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBzdHJ1Y3R1cmVzIChzdWNoIGFzIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGlvY3RsIHN0cnVjdHVyZXMpIGhhdmUgaGFkIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgaW50cm9kdWNlZC5cbjQuIFRoZSByYWNlIGNvbmRpdGlvbiBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGZpeGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOL0xPQ0tERVAsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6MjQuMTUwNzA0MjI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2NTE5NTQzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX3VuaGFzaFwiLFxuICAgIFwic21jX2Nvbm5fZnJlZVwiLFxuICAgIFwiX19zbWNfcmVsZWFzZVwiLFxuICAgIFwic21jX2Nvbm5fY3JlYXRlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCIsXG4gICAgXCJzbWNfcmVsZWFzZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBzb2NrZXQgdGVhcmRvd24gKHNtY19jb25uX2ZyZWUpIGFuZCBzb2NrZXQgZGlhZ25vc3RpY3MgKHNtY19kaWFnKSBieSB1bmhhc2hpbmcgdGhlIHNvY2tldCBlYXJsaWVyIGFuZCB0cmFja2luZyB0aGUgdW5oYXNoIHN0YXRlIHZpYSBhIG5ldyBgdW5oYXNoZWRgIGZsYWcgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuXFxuXFxuMS4gVGhlIG5ldyBgdW5oYXNoZWRgIGZpZWxkIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgc21jX3NvY2tgIHZpYSBgc2tfYWxsb2MoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkpIGFuZCBpcyBleHBsaWNpdGx5IHJlc2V0IHRvIDAgaW4gYHNtY19jb25uX2NyZWF0ZSgpYC5cXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxcbjMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgc3RydWN0dXJlcyAoc3VjaCBhcyBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBzdHJ1Y3R1cmVzKSBoYXZlIGhhZCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGludHJvZHVjZWQuXFxuNC4gVGhlIHJhY2UgY29uZGl0aW9uIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUCwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHNvY2tldCBoYXNoIG1hbmFnZW1lbnQgYW5kIGxpbmsgZ3JvdXAgZGVzdHJ1Y3Rpb24gbGlmZWN5Y2xlIGluIHRoZSBTTUMgcHJvdG9jb2wgZmFtaWx5LiBJdCBpbnRyb2R1Y2VzIHNtY19jb25uX3VuaGFzaCgpIHdpdGggYSBuZXcgY29ubi1cXHUwMDNldW5oYXNoZWQgZmxhZyB0byBlbnN1cmUgbm9uLWZhbGxiYWNrIFNNQyBzb2NrZXRzIGFyZSB1bmhhc2hlZCBleGFjdGx5IG9uY2UgYmVmb3JlIGxpbmsgZ3JvdXAvbGluayByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyB3aXRoIHNvY2tldCBkaWFnbm9zdGljIGR1bXBzLiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGFuZCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgY29kZSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIHNvY2tldCBhbmQgc29ja19kaWFnIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjI0LjE1MDcwODIxNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0Mzc4MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjg2NjliZjJiMDRmYjA5NzAxZmY1ZTRmYmUwYWZjZGMwNjAyMDIzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDEwOjE4OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvYWZfc21jLmMgYi9uZXQvc21jL2FmX3NtYy5jXFxuaW5kZXggZTlmOTNiM2FiNDM1Yi4uOGM3ODFhNGE0NDg1YiAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXFxuKysrIGIvbmV0L3NtYy9hZl9zbWMuY1xcbkBAIC0zMTAsNyArMzEwLDE1IEBAIHN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4gXFx0XFx0c21jX3Jlc3RvcmVfZmFsbGJhY2tfY2hhbmdlcyhzbWMpO1xcbiBcXHR9XFxuIFxcbi1cXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKHNrKTtcXG4rXFx0LyogRmFsbGJhY2sgc29ja2V0cyBuZXZlciBjYWxsIHNtY19jb25uX2ZyZWUoKSwgc28gdW5oYXNoIGRpcmVjdGx5LlxcbitcXHQgKiBOb24tZmFsbGJhY2sgc29ja2V0cyB1c2Ugc21jX2Nvbm5fdW5oYXNoKCkgc28gdGhhdCB0aGUgY29ubi1cXHUwMDNldW5oYXNoZWRcXG4rXFx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXFxuK1xcdCAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKVxcbitcXHRcXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKHNrKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRzbWNfY29ubl91bmhhc2goXFx1MDAyNnNtYy1cXHUwMDNlY29ubik7XFxuIFxcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQpIHtcXG4gXFx0XFx0aWYgKHNtYy1cXHUwMDNlY2xjc29jaykge1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaFxcbmluZGV4IDQyN2I2ZDYzYjk5MzEuLjA3NTMxMjI3ODgzNWMgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWMuaFxcbisrKyBiL25ldC9zbWMvc21jLmhcXG5AQCAtMjc5LDYgKzI3OSw3IEBAIHN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XFxuIFxcdHU2NFxcdFxcdFxcdHBlZXJfdG9rZW47XFx0LyogU01DLUQgdG9rZW4gb2YgcGVlciAqL1xcbiBcXHR1OFxcdFxcdFxcdGtpbGxlZDtcXHRcXHQvKiBhYm5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xcbiBcXHR1OFxcdFxcdFxcdGZyZWVkO1xcdFxcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xcbitcXHR1OFxcdFxcdFxcdHVuaGFzaGVkO1xcdC8qIHJlbW92ZWQgZnJvbSBzb2NrIGhhc2ggKi9cXG4gXFx0dThcXHRcXHRcXHRvdXRfb2Zfc3luYztcXHQvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi9cXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuY1xcbmluZGV4IDA0YWVkZDk1NzU0M2EuLmUzMDIyMjFjMzVlM2YgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXFxuKysrIGIvbmV0L3NtYy9zbWNfY29yZS5jXFxuQEAgLTEyNTEsNiArMTI1MSwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0fVxcbiB9XFxuIFxcbisvKiB1bmhhc2ggdGhlIHNvY2tldCBvbmNlOyBvd25zIHRoZSBzaW5nbGUgdW5oYXNoIGZvciBhbGwgbm9uLWZhbGxiYWNrIHBhdGhzLlxcbisgKiBFdmVyeSBjYWxsZXIgaG9sZHMgbG9ja19zb2NrIGZvciB0aGlzIHNvY2tldCwgc28gY29ubi1cXHUwMDNldW5oYXNoZWQgaXMgcHJvdGVjdGVkXFxuKyAqIGJ5IHRoYXQgbG9jayBhbmQgbm8gc2VwYXJhdGUgc3luY2hyb25pc2F0aW9uIGlzIG5lZWRlZC5cXG4rICovXFxuK3ZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4re1xcbitcXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IGNvbnRhaW5lcl9vZihjb25uLCBzdHJ1Y3Qgc21jX3NvY2ssIGNvbm4pO1xcbitcXG4rXFx0aWYgKCFjb25uLVxcdTAwM2V1bmhhc2hlZCkge1xcbitcXHRcXHRjb25uLVxcdTAwM2V1bmhhc2hlZCA9IDE7XFxuK1xcdFxcdHNtYy1cXHUwMDNlc2suc2tfcHJvdC1cXHUwMDNldW5oYXNoKFxcdTAwMjZzbWMtXFx1MDAzZXNrKTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG4gdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4ge1xcbkBAIC0xMjYzLDYgKzEyNzcsMTEgQEAgdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0Y29ubi1cXHUwMDNlZnJlZWQgPSAxO1xcbitcXHQvKiBVbmhhc2ggYmVmb3JlIGRyb3BwaW5nIGxnci9sbmsgcmVmcyBzbyB0aGUgZGlhZyByZWFkZXIsIHdoaWNoXFxuK1xcdCAqIGl0ZXJhdGVzIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCByZWFkX2xvY2ssIGNhbm5vdCBzZWUgYSBjb25uZWN0aW9uIHdob3NlXFxuK1xcdCAqIGxnciBvciBsbmsgaXMgYmVpbmcgZnJlZWQgY29uY3VycmVudGx5LlxcbitcXHQgKi9cXG4rXFx0c21jX2Nvbm5fdW5oYXNoKGNvbm4pO1xcbiBcXHRpZiAoIXNtY19jb25uX2xncl92YWxpZChjb25uKSlcXG4gXFx0XFx0LyogQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZnJvbVxcbiBcXHRcXHQgKiBsaW5rIGdyb3VwLlxcbkBAIC0yMDUzLDYgKzIwNzIsNyBAQCBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbiBcXHRpZiAoIWNvbm4tXFx1MDAzZWxnci1cXHUwMDNlaXNfc21jZClcXG4gXFx0XFx0c21jcl9saW5rX2hvbGQoY29ubi1cXHUwMDNlbG5rKTsgLyogbGlua19wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXFxuIFxcdGNvbm4tXFx1MDAzZWZyZWVkID0gMDtcXG4rXFx0Y29ubi1cXHUwMDNldW5oYXNoZWQgPSAwO1xcbiBcXHRjb25uLVxcdTAwM2Vsb2NhbF90eF9jdHJsLmNvbW1vbi50eXBlID0gU01DX0NEQ19NU0dfVFlQRTtcXG4gXFx0Y29ubi1cXHUwMDNlbG9jYWxfdHhfY3RybC5sZW4gPSBTTUNfV1JfVFhfU0laRTtcXG4gXFx0Y29ubi1cXHUwMDNldXJnX3N0YXRlID0gU01DX1VSR19SRUFEO1xcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmggYi9uZXQvc21jL3NtY19jb3JlLmhcXG5pbmRleCA1YzE4ZjA4YTRjOGE1Li5mMjNkNjBhZWYwYjc5IDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuaFxcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuaFxcbkBAIC01OTUsNiArNTk1LDcgQEAgdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbiB2b2lkIHNtY19ybWJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XFxuIGludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcXG4gXFxuK3ZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XFxuIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbiBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcXG4gaW50IHNtY19jb3JlX2luaXQodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjI0LjcyNTgxNDY3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTQyMDk0MDE3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiLFxuICAgIFwiRElCU19MT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19jb25uX3VuaGFzaFwiLFxuICAgIFwic21jX2Nvbm5fZnJlZVwiLFxuICAgIFwiX19zbWNfcmVsZWFzZVwiLFxuICAgIFwic21jX2Nvbm5fY3JlYXRlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCIsXG4gICAgXCJzbWNfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaGFzaCBtYW5hZ2VtZW50IGFuZCBsaW5rIGdyb3VwIGRlc3RydWN0aW9uIGxpZmVjeWNsZSBpbiB0aGUgU01DIHByb3RvY29sIGZhbWlseS4gSXQgaW50cm9kdWNlcyBzbWNfY29ubl91bmhhc2goKSB3aXRoIGEgbmV3IGNvbm4tXFx1MDAzZXVuaGFzaGVkIGZsYWcgdG8gZW5zdXJlIG5vbi1mYWxsYmFjayBTTUMgc29ja2V0cyBhcmUgdW5oYXNoZWQgZXhhY3RseSBvbmNlIGJlZm9yZSBsaW5rIGdyb3VwL2xpbmsgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZCwgcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBzb2NrZXQgZGlhZ25vc3RpYyBkdW1wcy4gVGhlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBuZXR3b3JraW5nIHNvY2tldCBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGNvZGUgYWNjZXNzaWJsZSB2aWEgdXNlci1zcGFjZSBzb2NrZXQgYW5kIHNvY2tfZGlhZyBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4NjY5YmYyYjA0ZmIwOTcwMWZmNWU0ZmJlMGFmY2RjMDYwMjAyM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEwOjE4OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9hZl9zbWMuYyBiL25ldC9zbWMvYWZfc21jLmNcbmluZGV4IGU5ZjkzYjNhYjQzNWIuLjhjNzgxYTRhNDQ4NWIgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL2FmX3NtYy5jXG4rKysgYi9uZXQvc21jL2FmX3NtYy5jXG5AQCAtMzEwLDcgKzMxMCwxNSBAQCBzdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4gXHRcdHNtY19yZXN0b3JlX2ZhbGxiYWNrX2NoYW5nZXMoc21jKTtcbiBcdH1cbiBcbi1cdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKTtcbitcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cbitcdCAqIE5vbi1mYWxsYmFjayBzb2NrZXRzIHVzZSBzbWNfY29ubl91bmhhc2goKSBzbyB0aGF0IHRoZSBjb25uLVx1MDAzZXVuaGFzaGVkXG4rXHQgKiBmbGFnIGtlZXBzIHRoZSB1bmhhc2ggZXhhY3RseSBvbmNlIGV2ZW4gd2hlbiBzbWNfY29ubl9mcmVlKCkgYWxyZWFkeSByYW5cbitcdCAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLlxuK1x0ICovXG4rXHRpZiAoc21jLVx1MDAzZXVzZV9mYWxsYmFjaylcbitcdFx0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spO1xuK1x0ZWxzZVxuK1x0XHRzbWNfY29ubl91bmhhc2goXHUwMDI2c21jLVx1MDAzZWNvbm4pO1xuIFxuIFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQpIHtcbiBcdFx0aWYgKHNtYy1cdTAwM2VjbGNzb2NrKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWMuaCBiL25ldC9zbWMvc21jLmhcbmluZGV4IDQyN2I2ZDYzYjk5MzEuLjA3NTMxMjI3ODgzNWMgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtYy5oXG4rKysgYi9uZXQvc21jL3NtYy5oXG5AQCAtMjc5LDYgKzI3OSw3IEBAIHN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XG4gXHR1NjRcdFx0XHRwZWVyX3Rva2VuO1x0LyogU01DLUQgdG9rZW4gb2YgcGVlciAqL1xuIFx0dThcdFx0XHRraWxsZWQ7XHRcdC8qIGFibm9ybWFsIHRlcm1pbmF0aW9uICovXG4gXHR1OFx0XHRcdGZyZWVkO1x0XHQvKiBub3JtYWwgdGVybWluYXRpb24gKi9cbitcdHU4XHRcdFx0dW5oYXNoZWQ7XHQvKiByZW1vdmVkIGZyb20gc29jayBoYXNoICovXG4gXHR1OFx0XHRcdG91dF9vZl9zeW5jO1x0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmMgYi9uZXQvc21jL3NtY19jb3JlLmNcbmluZGV4IDA0YWVkZDk1NzU0M2EuLmUzMDIyMjFjMzVlM2YgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuY1xuQEAgLTEyNTEsNiArMTI1MSwyMCBAQCBzdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbiBcdH1cbiB9XG4gXG4rLyogdW5oYXNoIHRoZSBzb2NrZXQgb25jZTsgb3ducyB0aGUgc2luZ2xlIHVuaGFzaCBmb3IgYWxsIG5vbi1mYWxsYmFjayBwYXRocy5cbisgKiBFdmVyeSBjYWxsZXIgaG9sZHMgbG9ja19zb2NrIGZvciB0aGlzIHNvY2tldCwgc28gY29ubi1cdTAwM2V1bmhhc2hlZCBpcyBwcm90ZWN0ZWRcbisgKiBieSB0aGF0IGxvY2sgYW5kIG5vIHNlcGFyYXRlIHN5bmNocm9uaXNhdGlvbiBpcyBuZWVkZWQuXG4rICovXG4rdm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuK3tcbitcdHN0cnVjdCBzbWNfc29jayAqc21jID0gY29udGFpbmVyX29mKGNvbm4sIHN0cnVjdCBzbWNfc29jaywgY29ubik7XG4rXG4rXHRpZiAoIWNvbm4tXHUwMDNldW5oYXNoZWQpIHtcbitcdFx0Y29ubi1cdTAwM2V1bmhhc2hlZCA9IDE7XG4rXHRcdHNtYy1cdTAwM2Vzay5za19wcm90LVx1MDAzZXVuaGFzaChcdTAwMjZzbWMtXHUwMDNlc2spO1xuK1x0fVxuK31cbitcbiAvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuIHtcbkBAIC0xMjYzLDYgKzEyNzcsMTEgQEAgdm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y29ubi1cdTAwM2VmcmVlZCA9IDE7XG4rXHQvKiBVbmhhc2ggYmVmb3JlIGRyb3BwaW5nIGxnci9sbmsgcmVmcyBzbyB0aGUgZGlhZyByZWFkZXIsIHdoaWNoXG4rXHQgKiBpdGVyYXRlcyB1bmRlciB0aGUgc29ja2V0IGhhc2ggcmVhZF9sb2NrLCBjYW5ub3Qgc2VlIGEgY29ubmVjdGlvbiB3aG9zZVxuK1x0ICogbGdyIG9yIGxuayBpcyBiZWluZyBmcmVlZCBjb25jdXJyZW50bHkuXG4rXHQgKi9cbitcdHNtY19jb25uX3VuaGFzaChjb25uKTtcbiBcdGlmICghc21jX2Nvbm5fbGdyX3ZhbGlkKGNvbm4pKVxuIFx0XHQvKiBDb25uZWN0aW9uIGhhcyBhbHJlYWR5IHVucmVnaXN0ZXJlZCBmcm9tXG4gXHRcdCAqIGxpbmsgZ3JvdXAuXG5AQCAtMjA1Myw2ICsyMDcyLDcgQEAgaW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcbiBcdGlmICghY29ubi1cdTAwM2VsZ3ItXHUwMDNlaXNfc21jZClcbiBcdFx0c21jcl9saW5rX2hvbGQoY29ubi1cdTAwM2VsbmspOyAvKiBsaW5rX3B1dCBpbiBzbWNfY29ubl9mcmVlKCkgKi9cbiBcdGNvbm4tXHUwMDNlZnJlZWQgPSAwO1xuK1x0Y29ubi1cdTAwM2V1bmhhc2hlZCA9IDA7XG4gXHRjb25uLVx1MDAzZWxvY2FsX3R4X2N0cmwuY29tbW9uLnR5cGUgPSBTTUNfQ0RDX01TR19UWVBFO1xuIFx0Y29ubi1cdTAwM2Vsb2NhbF90eF9jdHJsLmxlbiA9IFNNQ19XUl9UWF9TSVpFO1xuIFx0Y29ubi1cdTAwM2V1cmdfc3RhdGUgPSBTTUNfVVJHX1JFQUQ7XG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5oIGIvbmV0L3NtYy9zbWNfY29yZS5oXG5pbmRleCA1YzE4ZjA4YTRjOGE1Li5mMjNkNjBhZWYwYjc5IDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5oXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmhcbkBAIC01OTUsNiArNTk1LDcgQEAgdm9pZCBzbWNfc25kYnVmX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgc21jX3JtYl9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiBpbnQgc21jX3ZsYW5fYnlfdGNwc2soc3RydWN0IHNvY2tldCAqY2xjc29jaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XG4gXG4rdm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbiBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbiBpbnQgc21jX2NvcmVfaW5pdCh2b2lkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjI0LjcyNTgxNjI2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NTI3OTc0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTUMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0J3MgZnV6ei13b3J0aHkuIEl0J3MgdG91Y2hpbmcgdGhlIFNNQyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgYGFmX3NtYy5jYCwgYHNtYy5oYCwgYW5kIGBzbWNfY29yZS5jYCBmaWxlcy4gVGhhdCdzIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMsIEFGX1NNQyBzb2NrZXQgZmFtaWx5LiBHb29kLCBJJ20gZmFtaWxpYXIgd2l0aCB0aGF0LiBOb3csIHdoYXQncyBjaGFuZ2VkP1xuXG5Fc3NlbnRpYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgY29uZGl0aW9uYWwgYHVuaGFzaGAgYmFzZWQgb24gYHNtYy1cdTAwM2V1c2VfZmFsbGJhY2tgIGluIGBfX3NtY19yZWxlYXNlYC4gSWYgd2UncmUgdXNpbmcgZmFsbGJhY2sgbW9kZSwgaXQgZ29lcyB0aHJvdWdoIHRoZSB1c3VhbCBgc2tfcHJvdC1cdTAwM2V1bmhhc2hgLCBvdGhlcndpc2UgaXQgY2FsbHMgYHNtY19jb25uX3VuaGFzaGAuICBUaGV5J3ZlIGFsc28gYWRkZWQgYSBgdW5oYXNoZWRgIGZsYWcgdG8gdGhlIGBzbWNfY29ubmVjdGlvbmAgc3RydWN0LCBhbmQgYSBuZXcgYHNtY19jb25uX3VuaGFzaGAgZnVuY3Rpb24uICBJdCdzIGluaXRpYWxpemVkIGluIGBzbWNfY29ubl9jcmVhdGVgIGFuZCBjYWxsZWQgZHVyaW5nIGBzbWNfY29ubl9mcmVlYC4gSW50ZXJlc3RpbmcuXG5cbk5vdywgZm9yIGZ1enppbmcsIEkgbmVlZCB0byBrbm93IGhvdyByZWFjaGFibGUgdGhpcyBjb2RlIGlzLiBTTUMgc29ja2V0cyBjYW4gYmUgY3JlYXRlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBzdGFuZGFyZCBgc29ja2V0KEFGX1NNQywgLi4uKWAgY2FsbHMsIG9yIHZpYSB0aGUgYEFGX0lORVRgL2BBRl9JTkVUNmAgcGF0aHdheXMgYXMgd2VsbC4gVGhhdOKAmXMgZ29vZCDigJMgd2UgaGF2ZSBjb250cm9sIGZyb20gdXNlciBzcGFjZS4gIEFuZCwgdGhlcmUncyBldmVuIGxvb3BiYWNrLCBmYWxsYmFjaywgb3IgZW11bGF0ZWQgU01DIGRldmljZXMgd2hpY2ggd2lkZW5zIHRoZSBhdHRhY2sgc3VyZmFjZSBldmVuIGZ1cnRoZXIgKFNNQy1EIGxvb3BiYWNrLCBJU00sIFNNQy1SIHZpYSBzb2Z0LVJvQ0UsIHJ4ZSwgZXRjLiwgYW5kIGZhbGxiYWNrIFRDUCkuICBTeXprYWxsZXIgaXMgYWxyZWFkeSBmdXp6aW5nIGBBRl9TTUNgLCB3aGljaCBpcyBhIHBvc2l0aXZlIHNpZ24uXG5cbk5leHQsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyB0byBzZWUgd2hhdCBjb25maWdzIGFyZSBpbnZvbHZlZCwgZGVwZW5kZW5jaWVzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpb25zIHRoYXQgY291bGQgaW5jcmVhc2UgdGhlIGF0dGFjayBzdXJmYWNlLCBvciBtYWtlIGZ1enppbmcgdGhpcyBtb3JlIHByb2R1Y3RpdmUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJ4oCZbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3NhcnkgdG8gcmVhY2ggdGhlIGNvZGUgY2hhbmdlIGluIGRpZmZlcmVudCBjb250ZXh0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjMwLjU3ODYxNjY1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAxOTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU01DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODozMC42Mjg2NDE0NThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDE4OTczNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgU01DIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzIGBuZXQvc21jL0tjb25maWdgIGZpbGUuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gU3lzdGVtIE1hbmFnZW1lbnQgQ29udHJvbCAoU01DKSBuZXR3b3JraW5nLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGtub2JzIHRoZSB1c2VyIGhhcyB0byB0dW5lLCBob3cgZGVwZW5kZW5jaWVzIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBkZWZhdWx0cyBhcmUgcHJvdmlkZWQuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGhpZXJhcmNoeSDigJMgaXMgaXQgYSB0b3AtbGV2ZWwgZmVhdHVyZSwgb3IgaXMgaXQgbmVzdGVkIHVuZGVyIHNvbWUgYnJvYWRlciBuZXR3b3JraW5nIG9yIGhhcmR3YXJlIGNvbnRleHQ/IFRoZSBkZXBlbmRlbmNpZXMgYXJlIGdvaW5nIHRvIGJlIGtleTsgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggb3RoZXIgZmVhdHVyZXMgb3IgaGFyZHdhcmUgYXJlIHJlcXVpcmVkIG9yIGluY29tcGF0aWJsZS4gSSdtIGFsc28gc2Nhbm5pbmcgZm9yIGFueSBwb3RlbnRpYWwgd2FybmluZ3Mgb3IgY29tbWVudGFyeSB3aXRoaW4gdGhlIGZpbGUuIEl0J3MgbGlrZWx5IGdvaW5nIHRvIGluY2x1ZGUgb3B0aW9ucyBmb3IgZW5hYmxpbmcgdGhlIFNNQyBwcm90b2NvbCwgcG9zc2libHkgc3BlY2lmeWluZyB2YXJpYW50cyBsaWtlIFNNQy1SIG9yIFNNQy1ELCBhbmQgcGVyaGFwcyBvcHRpb25zIHRvIGNvbmZpZ3VyZSBidWZmZXIgc2l6ZXMsIGNvbm5lY3Rpb24gbGltaXRzLCBhbmQgb3RoZXIgcGVyZm9ybWFuY2UvdHVuaW5nIHBhcmFtZXRlcnMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgc2VsZWN0YCBhbmQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljLiBUaGlzIGlzIG15IGNoYW5jZSB0byBhc3Nlc3MgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGVzaWduLCBhbmQgaG93IGZsZXhpYmxlIHRoZSBjb2RlIGlzLiBJIGFtIGV4cGVjdGluZyBzb21lIHNvbGlkIGRvY3VtZW50YXRpb24sIGFuZCBlcnJvciBoYW5kbGluZy4gSSBob3BlIHRvIGNvbWUgb3V0IHdpdGggYSBzb3VuZCBncmFzcCBvZiB0aGUgb3B0aW9ucyBhbmQgdGhlaXIgcmFtaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjMzLjA0NzYxODA5MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNNQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgRElCU1xcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBTTUMtUiBwcm92aWRlcyBhIFxcXCJzb2NrZXRzIG92ZXIgUkRNQVxcXCIgc29sdXRpb24gbWFraW5nIHVzZSBvZlxcbiAgIDc6XFx0XFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcXG4gICA4OlxcdFxcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cXG4gICA5OlxcdFxcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xcbiAgMTA6XFx0XFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFNNQ19ESUFHXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFNNQ1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xcbiAgMTk6XFx0XFx0ICBzbWNzcy5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBpZiB1bnN1cmUsIHNheSBZLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRjb25maWcgU01DX0hTX0NUUkxfQlBGXFxuICAyNDpcXHRcXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBTTUMgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfU1lTQ0FMTFxcbiAgMjY6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIFNNQ19IU19DVFJMX0JQRiBlbmFibGVzIHN1cHBvcnQgdG8gcmVnaXN0ZXIgZ2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQ1xcbiAgMjk6XFx0XFx0ICBoYW5kc2hha2UgZmxvdywgd2hpY2ggb2ZmZXIgbXVjaCBncmVhdGVyIGZsZXhpYmlsaXR5IGluIG1vZGlmeWluZyB0aGUgYmVoYXZpb3JcXG4gIDMwOlxcdFxcdCAgb2YgdGhlIFNNQyBwcm90b2NvbCBzdGFjayBjb21wYXJlZCB0byBhIGNvbXBsZXRlIGtlcm5lbC1iYXNlZCBhcHByb2FjaC4gU2VsZWN0XFxuICAzMTpcXHRcXHQgIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGZpbHRyaW5nIHRoZSBoYW5kc2hha2UgcHJvY2VzcyB2aWEgZUJQRiBwcm9ncmFtcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6MzMuMDQ3Njk0MjMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3MjI1NDM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBcIkRJQlNcIiAtIENvbmZpZ3VyYXRpb24gb3IgVHlwbz8qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgXCJESUJTXCIgdGhpbmcgaXMgZXZlbiBhIHJlYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGp1c3QgYSBzaW1wbGUgdHlwbyB0aGF0J3Mgc2xpcHBlZCB0aHJvdWdoLiBJJ3ZlIGdvdCBhIHByZXR0eSBnb29kIG5vc2UgZm9yIHRoZXNlIHRoaW5ncywgc28gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGl0cyB2YWxpZGl0eS4gTXkgZ3V0IHRlbGxzIG1lIEkgc2hvdWxkICppbW1lZGlhdGVseSogcmVhY2ggZm9yIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGluIHRoaXMgZG9tYWluLiBJIG5lZWQgdG8gY29uZHVjdCBhIHRob3JvdWdoIHNlYXJjaCBmb3IgXCJESUJTXCIgd2l0aGluIHRoZW0uIEhvcGVmdWxseSwgaXQncyBkZWZpbmVkIHNvbWV3aGVyZS4gSWYgaXQgKmlzKiBhIHZhbGlkIG9wdGlvbiwgdGhhdCB0ZWxscyBtZSBhIGxvdCBhYm91dCB0aGUgY29udGV4dCBhbmQgdGhlIHByb2JsZW0gSSdtIGRlYWxpbmcgd2l0aC4gSWYgaXQgKmlzbid0Kiwgd2VsbCwgdGhlbiBJIGtub3cgZXhhY3RseSB3aGVyZSB0byBiZWdpbiBteSB0cm91Ymxlc2hvb3RpbmcgYnkgbG9va2luZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBhcmVhIGZvciBvdGhlciB0aGluZ3MuIFRoYXQgd291bGQgYWxzbyB0ZWxsIG1lIHdoZXJlIHRoZSB0eXBvIGlzIG1vc3QgbGlrZWx5IGxvY2F0ZWQsIHdoaWNoIHdvdWxkIGJlIHF1aXRlIHVzZWZ1bC4gTGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTkyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODozNS41MTk5NTA0ODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMzAzMDk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRElCU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoyOmNvbmZpZyBESUJTXFxuZHJpdmVycy9kaWJzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6MzcuNDUyOTg3MDE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwNDgyMTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLY29uZmlnIERpdmUgZm9yIERJQlMgb3IgU01DIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBESUJTIG9yIFNNQy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbiBsb2dpYyBsaXZlcy4gTGV0J3Mgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBicm9hZGVyIEtjb25maWcgbGFuZHNjYXBlIGZvciBtZW50aW9ucyBvZiBESUJTIG9yIFNNQyBpbiBvdGhlciBicmFuY2hlcyBvciBmaWxlcy4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGF0LCBhIHF1aWNrIGNoZWNrIG9uIGxpbmUgNCBvZiBgbmV0L3NtYy9LY29uZmlnYCBpbiBnaXQgc2VlbXMgbGlrZSBhIHNvbGlkIGluaXRpYWwgbW92ZTsgaXQgY291bGQgcXVpY2tseSBnaXZlIHNvbWUgaW5pdGlhbCBjbHVlcy4gTm93LCBhZnRlciB0aGF0LCBJIHRoaW5rIEknbGwgemVybyBpbiBvbiB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZSBhZ2FpbiBhbmQgY2hlY2sgc3BlY2lmaWNhbGx5IHdoYXQgdGhpcyBtb2R1bGUgZGVwZW5kcyBvbi4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgd2h5IHRoZXkgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiBhIGdpdmVuIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzOTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODozOS41NTc4MTA4NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU01DXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFNNQy1SIHByb3ZpZGVzIGEgXFxcInNvY2tldHMgb3ZlciBSRE1BXFxcIiBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXFxuICAgNzpcXHRcXHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxcbiAgIDg6XFx0XFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxcbiAgIDk6XFx0XFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXFxuICAxMDpcXHRcXHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjM5LjU1Nzg4NzYwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzMwNTY0ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgYG5ldC9zbWMvTWFrZWZpbGVgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgYG5ldC9zbWMvTWFrZWZpbGVgLiBHaXZlbiB0aGlzIGxvY2F0aW9uLCBJIGltbWVkaWF0ZWx5IGV4cGVjdCB0byBmaW5kIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgc3BlY2lmaWMgdG8gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgcHJvdG9jb2wgc3RhY2suIEkgYW50aWNpcGF0ZSBkaXJlY3RpdmVzIGZvciBjb21waWxpbmcgdGhlIFNNQy1zcGVjaWZpYyBzb3VyY2UgZmlsZXMsIGxpbmtpbmcgdGhlbSwgYW5kIHBvdGVudGlhbGx5IGluY29ycG9yYXRpbmcgYW55IG5lY2Vzc2FyeSBsaWJyYXJpZXMgb3IgaGVhZGVyIGZpbGVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGZsYWdzIHJlbGF0ZWQgdG8gY29tcGlsZXIgb3B0aW1pemF0aW9uIGZvciBwZXJmb3JtYW5jZSwgc3BlY2lmaWMgdGFyZ2V0IGFyY2hpdGVjdHVyZXMsIGFuZCB0aGUgaW5jbHVzaW9uIG9mIGFueSBTTUMtcmVsYXRlZCBrZXJuZWwgbW9kdWxlcy4gSSdsbCBhbHNvIGJlIG1lbnRhbGx5IG1hcHBpbmcgdGhpcyBNYWtlZmlsZSBhZ2FpbnN0IHRoZSBvdmVyYWxsIGJ1aWxkIHN5c3RlbSBzdHJ1Y3R1cmU7IEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBob3cgdGhlc2UgU01DIGNvbXBvbmVudHMgYXJlIGludGVncmF0ZWQuIEknbGwgc3RhcnQgYnkgcXVpY2tseSBzY2FubmluZyB0aGUgc3RydWN0dXJlLCBsb29raW5nIGZvciBjb21tb24gcGF0dGVybnMgYW5kIGltcG9ydGFudCB2YXJpYWJsZSBkZWZpbml0aW9ucy4gRnJvbSB0aGVyZSBJJ2xsIGRyaWxsIGRvd24gdG8gdGhlIG1vcmUgaW50cmljYXRlIGRlcGVuZGVuY2llcyBhbmQgcnVsZXMgYXMgbmVlZGVkLiBUaGlzIHVzdWFsbHkgaGVscHMgbWUgdW5kZXJzdGFuZCB3aGF0J3MgY3JpdGljYWwgYW5kIHdoYXQncyBsZXNzIHNvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo0MS44ODg0NTUzOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y2NmbGFncy15ICs9IC1JJChzcmMpXFxuICAgMzpcXHRvYmotJChDT05GSUdfU01DKVxcdCs9IHNtYy5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfU01DX0RJQUcpXFx0Kz0gc21jX2RpYWcub1xcbiAgIDU6XFx0c21jLXkgOj0gYWZfc21jLm8gc21jX3BuZXQubyBzbWNfaWIubyBzbWNfY2xjLm8gc21jX2NvcmUubyBzbWNfd3IubyBzbWNfbGxjLm9cXG4gICA2OlxcdHNtYy15ICs9IHNtY19jZGMubyBzbWNfdHgubyBzbWNfcngubyBzbWNfY2xvc2UubyBzbWNfaXNtLm8gc21jX25ldGxpbmsubyBzbWNfc3RhdHMub1xcbiAgIDc6XFx0c21jLXkgKz0gc21jX3RyYWNlcG9pbnQubyBzbWNfaW5ldC5vXFxuICAgODpcXHRzbWMtJChDT05GSUdfU1lTQ1RMKSArPSBzbWNfc3lzY3RsLm9cXG4gICA5OlxcdHNtYy0kKENPTkZJR19TTUNfSFNfQ1RSTF9CUEYpICs9IHNtY19oc19icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo0MS44ODg1MTMwNzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTczMDg3ODc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgRElCUyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIERJQlMgbW9kdWxlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9kaWJzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gZGVmaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIGxpc3QgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgaGFyZHdhcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBsb2dpYyB0aGVyZSwgdGhpbmdzIGxpa2UgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgdGhhdCB3aWxsIHJldmVhbCB3aGljaCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIG11c3QgYmUgZW5hYmxlZCBmb3IgRElCUyB0byBldmVuIGJlIGNvbnNpZGVyZWQgZm9yIGluY2x1c2lvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYW55IGludGVncmF0aW9uIHdvcmsuIFRoaXMgaXMgd2hlcmUgSSdsbCBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NDMuNjE5Mzk0NDAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0Y29uZmlnIERJQlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlZmF1bHQgblxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgKERJQlMpIGlzIGEgY29tbXVuaWNhdGlvbiBtZXRob2QgdGhhdFxcbiAgIDc6XFx0XFx0ICB1c2VzIGNvbW1vbiBwaHlzaWNhbCAoaW50ZXJuYWwpIG1lbW9yeSBmb3Igc3luY2hyb25vdXMgZGlyZWN0IGFjY2Vzc1xcbiAgIDg6XFx0XFx0ICBpbnRvIGEgcmVtb3RlIGJ1ZmZlci5cXG4gICA5OlxcdFxcbiAgMTA6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gcHJvdmlkZSB0aGUgYWJzdHJhY3Rpb24gbGF5ZXIgYmV0d2VlblxcbiAgMTE6XFx0XFx0ICBkaWJzIGRldmljZXMgYW5kIGRpYnMgY2xpZW50cyBsaWtlIHRoZSBTTUMgcHJvdG9jb2wuXFxuICAxMjpcXHRcXHQgIFRoZSBtb2R1bGUgbmFtZSBpcyBkaWJzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgRElCU19MT1xcbiAgMTU6XFx0XFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBESUJTXFxuICAxNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgRElCU19MTyBlbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBzb2Z0d2FyZS1lbXVsYXRlZCBkaWJzIGRldmljZVxcbiAgMjA6XFx0XFx0ICBuYW1lZCBsbyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgd2hlbiBjb21tdW5pY2F0aW9uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjQzLjYxOTQ1OTI1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTU5MTM5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIFBhdGNoIGZvciBQb3RlbnRpYWwgSXNzdWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIGFueSBleGlzdGluZyBmdW5jdGlvbmFsaXR5LCBvciBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgb3B0aW9ucy4gVGhlIGBTTUNfRElBR2AgbWVudGlvbiBjYXVnaHQgbXkgZXllLiBUaGUgY29tbWVudCBpbiB0aGUgcGF0Y2ggaXMgcHJldHR5IGV4cGxpY2l0OiBpdCBzZWVtcyBsaWtlIHRoZSB1bmhhc2hpbmcgb2YgY29ubmVjdGlvbnMgYmVmb3JlIHJlbGVhc2luZyByZXNvdXJjZXMgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgZGlhZ25vc3RpYyByZWFkZXIgYW5kIHRoZSBzb2NrZXQgaGFzaCByZWFkIGxvY2suIFRoaXMgc3VnZ2VzdHMgYFNNQ19ESUFHYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZhY3RvciBoZXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgc21jX2Nvbm5fdW5oYXNoYCwgYHNtY19jb25uX2ZyZWVgLCBgc21jX2Nvbm5fY3JlYXRlYCwgYW5kIGBfX3NtY19yZWxlYXNlYCBhcmUgYWxsIGFmZmVjdGVkLiBOb3csIEkgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBzbWNfY29ubl91bmhhc2hgLCBgc21jX2Nvbm5fZnJlZWAsIGBfX3NtY19yZWxlYXNlYCwgYW5kIGBzbWNfcmVsZWFzZWAsIGFuZCB0aGVpciBzdXJyb3VuZGluZyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgaW1wYWN0IHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW52b2x2aW5nIHRoZSBkaWFnbm9zdGljIHJlYWRlci4gVGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMgY3JpdGljYWwgdG8gYSBjb21wbGV0ZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NDYuMTc4NjAxNDczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgzODY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY29ubl9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0yODg9c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zMTItXFxubmV0L3NtYy9hZl9zbWMuYzozMTM6XFx0LyogRmFsbGJhY2sgc29ja2V0cyBuZXZlciBjYWxsIHNtY19jb25uX2ZyZWUoKSwgc28gdW5oYXNoIGRpcmVjdGx5Llxcbm5ldC9zbWMvYWZfc21jLmMtMzE0LVxcdCAqIE5vbi1mYWxsYmFjayBzb2NrZXRzIHVzZSBzbWNfY29ubl91bmhhc2goKSBzbyB0aGF0IHRoZSBjb25uLVxcdTAwM2V1bmhhc2hlZFxcbm5ldC9zbWMvYWZfc21jLmM6MzE1OlxcdCAqIGZsYWcga2VlcHMgdGhlIHVuaGFzaCBleGFjdGx5IG9uY2UgZXZlbiB3aGVuIHNtY19jb25uX2ZyZWUoKSBhbHJlYWR5IHJhblxcbm5ldC9zbWMvYWZfc21jLmMtMzE2LVxcdCAqIGZpcnN0IChlLmcuIHZpYSBzbWNfY29ubl9raWxsKCkpLlxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zMjktXFx0XFx0aWYgKCFzbWMtXFx1MDAzZXVzZV9mYWxsYmFjaylcXG5uZXQvc21jL2FmX3NtYy5jOjMzMDpcXHRcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMzMxLVxcdH1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTAxNj1zdGF0aWMgdm9pZCBzbWNfY29ubl9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgaW50IGxvY2FsX2ZpcnN0KVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMDI0LVxcbm5ldC9zbWMvYWZfc21jLmM6MTAyNTpcXHRzbWNfY29ubl9mcmVlKGNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMTAyNi1cXHRpZiAobG9jYWxfZmlyc3QgXFx1MDAyNlxcdTAwMjYgbGdyX3ZhbGlkKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYz0xMjg9dm9pZCBzbWNfY2xvc2VfYWN0aXZlX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNTYtXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcXG5uZXQvc21jL3NtY19jbG9zZS5jOjE1NzpcXHRcXHRzbWNfY29ubl9mcmVlKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTU4LVxcdFxcdHJlbGVhc2VfY2xjc29jayA9IHRydWU7XFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jLTE2Ny1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTY4OlxcdFxcdHNtY19jb25uX2ZyZWUoXFx1MDAyNnNtYy1cXHUwMDNlY29ubik7XFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xNjktXFx0XFx0cmVsZWFzZV9jbGNzb2NrID0gdHJ1ZTtcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy00MzUtXFx0XFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIXNrLVxcdTAwM2Vza19zb2NrZXQpKSB7XFxubmV0L3NtYy9zbWNfY2xvc2UuYzo0MzY6XFx0XFx0XFx0c21jX2Nvbm5fZnJlZShjb25uKTtcXG5uZXQvc21jL3NtY19jbG9zZS5jLTQzNy1cXHRcXHRcXHRpZiAoc21jLVxcdTAwM2VjbGNzb2NrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkwLVxcdGF0b21pY19pbmMoXFx1MDAyNmNvbm4tXFx1MDAzZWxuay1cXHUwMDNlY29ubl9jbnQpO1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxMDkxOlxcdC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDkyLVxcdHNtY3JfbGlua19ob2xkKGNvbm4tXFx1MDAzZWxuayk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTI1OD12b2lkIHNtY19jb25uX3VuaGFzaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI2OC0vKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI2OTp2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjcwLXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xOTk2PWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3MC1cXHR9XFxubmV0L3NtYy9zbWNfY29yZS5jOjIwNzE6XFx0c21jX2xncl9ob2xkKGNvbm4tXFx1MDAzZWxncik7IC8qIGxncl9wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXFxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzItXFx0aWYgKCFjb25uLVxcdTAwM2VsZ3ItXFx1MDAzZWlzX3NtY2QpXFxubmV0L3NtYy9zbWNfY29yZS5jOjIwNzM6XFx0XFx0c21jcl9saW5rX2hvbGQoY29ubi1cXHUwMDNlbG5rKTsgLyogbGlua19wdXQgaW4gc21jX2Nvbm5fZnJlZSgpICovXFxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzQtXFx0Y29ubi1cXHUwMDNlZnJlZWQgPSAwO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oPTU5OD12b2lkIHNtY19jb25uX3VuaGFzaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbm5ldC9zbWMvc21jX2NvcmUuaDo1OTk6dm9pZCBzbWNfY29ubl9mcmVlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XFxubmV0L3NtYy9zbWNfY29yZS5oLTYwMC1pbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NDYuMjI1NDQ1MDEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzUyNzA0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgbmV0L3NtYy9zbWNfZGlhZy5jYCBmb3IgQ29ubmVjdGlvbiBEaWFnbm9zdGljcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBjb25uZWN0aW9uIGRpYWdub3N0aWNzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyIChTTUMpIGNvbnRleHQuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBgbmV0L3NtYy9zbWNfZGlhZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gKnJlYWRzKiBjb25uZWN0aW9uIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgZGV0YWlscyBhYm91dCBzb2NrZXRzLiBJJ20gYXNzdW1pbmcgdGhpcyBmaWxlIGlzIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBkZXRhaWxzIG9mIGdhdGhlcmluZyB0aGVzZSBjb25uZWN0aW9uIHN0YXRpc3RpY3Mgd291bGQgcmVzaWRlLiBJIGV4cGVjdCB0byBmaW5kIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiBsaWtlIGNvbm5lY3Rpb24gc3RhdGUsIHNvY2tldCBhZGRyZXNzZXMsIGVycm9yIGNvdW50cywgYW5kIGFueSBvdGhlciByZWxldmFudCBtZXRyaWNzIGZvciBkZWJ1Z2dpbmcgYW5kIHRyb3VibGVzaG9vdGluZyBTTUMtcmVsYXRlZCBjb25uZWN0aW9ucy4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbWV0aG9kcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGVtcGxveWVkIHRvIGFjY2VzcyBhbmQgaW50ZXJwcmV0IHRoaXMgY29ubmVjdGlvbiBkYXRhIHdpdGhpbiB0aGUgU01DIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGtleSB0byBteSBvdmVyYWxsIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo0OC42MDA3MTc1NzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Nzk1NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaGFzaHxyZWFkX2xvY2t8c21jX2RpYWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX1NNQylcXHQrPSBzbWMub1xcbm5ldC9zbWMvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfU01DX0RJQUcpXFx0Kz0gc21jX2RpYWcub1xcbm5ldC9zbWMvTWFrZWZpbGUtNS1zbWMteSA6PSBhZl9zbWMubyBzbWNfcG5ldC5vIHNtY19pYi5vIHNtY19jbGMubyBzbWNfY29yZS5vIHNtY193ci5vIHNtY19sbGMub1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0xMjI9c3RhdGljIHN0cnVjdCBzb2NrICpzbWNfdGNwX3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xMjUtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxubmV0L3NtYy9hZl9zbWMuYzoxMjY6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXFfdW5oYXNoLFxcbm5ldC9zbWMvYWZfc21jLmMtMTI3LVxcdFxcdFxcdFxcdFxcdCAgYm9vbCAqb3duX3JlcSxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTMzLVxcbm5ldC9zbWMvYWZfc21jLmM6MTM0OlxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvc21jL2FmX3NtYy5jLTEzNS1cXHRzbWMgPSBzbWNfY2xjc29ja191c2VyX2RhdGFfcmN1KHNrKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTUyLVxcdC8qIHBhc3N0aHJvdWdoIHRvIG9yaWdpbmFsIHN5biByZWN2IHNvY2sgZmN0ICovXFxubmV0L3NtYy9hZl9zbWMuYzoxNTM6XFx0Y2hpbGQgPSBzbWMtXFx1MDAzZW9yaV9hZl9vcHMtXFx1MDAzZXN5bl9yZWN2X3NvY2soc2ssIHNrYiwgcmVxLCBkc3QsIHJlcV91bmhhc2gsXFxubmV0L3NtYy9hZl9zbWMuYy0xNTQtXFx0XFx0XFx0XFx0XFx0ICAgICAgIG93bl9yZXEsIG9wdF9jaGlsZF9pbml0KTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTk5PWludCBzbWNfaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTIxMy1cXG5uZXQvc21jL2FmX3NtYy5jOjIxNDp2b2lkIHNtY191bmhhc2hfc2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9zbWMvYWZfc21jLmMtMjE1LXtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjM4PXN0cnVjdCBwcm90byBzbWNfcHJvdG8gPSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI0Mi1cXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxubmV0L3NtYy9hZl9zbWMuYzoyNDM6XFx0LnVuaGFzaFxcdFxcdD0gc21jX3VuaGFzaF9zayxcXG5uZXQvc21jL2FmX3NtYy5jLTI0NC1cXHQucmVsZWFzZV9jYlxcdD0gc21jX3JlbGVhc2VfY2IsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTI1MT1zdHJ1Y3QgcHJvdG8gc21jX3Byb3RvNiA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjU1LVxcdC5oYXNoXFx0XFx0PSBzbWNfaGFzaF9zayxcXG5uZXQvc21jL2FmX3NtYy5jOjI1NjpcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbm5ldC9zbWMvYWZfc21jLmMtMjU3LVxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9Mjg4PXN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzEyLVxcbm5ldC9zbWMvYWZfc21jLmM6MzEzOlxcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cXG5uZXQvc21jL2FmX3NtYy5jOjMxNDpcXHQgKiBOb24tZmFsbGJhY2sgc29ja2V0cyB1c2Ugc21jX2Nvbm5fdW5oYXNoKCkgc28gdGhhdCB0aGUgY29ubi1cXHUwMDNldW5oYXNoZWRcXG5uZXQvc21jL2FmX3NtYy5jOjMxNTpcXHQgKiBmbGFnIGtlZXBzIHRoZSB1bmhhc2ggZXhhY3RseSBvbmNlIGV2ZW4gd2hlbiBzbWNfY29ubl9mcmVlKCkgYWxyZWFkeSByYW5cXG5uZXQvc21jL2FmX3NtYy5jLTMxNi1cXHQgKiBmaXJzdCAoZS5nLiB2aWEgc21jX2Nvbm5fa2lsbCgpKS5cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzE4LVxcdGlmIChzbWMtXFx1MDAzZXVzZV9mYWxsYmFjaylcXG5uZXQvc21jL2FmX3NtYy5jOjMxOTpcXHRcXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKHNrKTtcXG5uZXQvc21jL2FmX3NtYy5jLTMyMC1cXHRlbHNlXFxubmV0L3NtYy9hZl9zbWMuYzozMjE6XFx0XFx0c21jX2Nvbm5fdW5oYXNoKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pO1xcbm5ldC9zbWMvYWZfc21jLmMtMzIyLVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz04NTA9c3RhdGljIHZvaWQgc21jX2ZiYWNrX2ZvcndhcmRfd2FrZXVwKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc29jayAqY2xjc2ssXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTg1Ny1cXHRcXHRcXHRcXHQgIHNtY19mYmFja19tYXJrX3dva2VuKTtcXG5uZXQvc21jL2FmX3NtYy5jOjg1ODpcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9hZl9zbWMuYy04NTktXFx0d3EgPSByY3VfZGVyZWZlcmVuY2UoY2xjc2stXFx1MDAzZXNrX3dxKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9ODcyPXN0YXRpYyB2b2lkIHNtY19mYmFja19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKmNsY3NrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy04NzUtXFxubmV0L3NtYy9hZl9zbWMuYzo4NzY6XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZjbGNzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxubmV0L3NtYy9hZl9zbWMuYy04NzctXFx0c21jID0gc21jX2NsY3NvY2tfdXNlcl9kYXRhKGNsY3NrKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9ODg0PXN0YXRpYyB2b2lkIHNtY19mYmFja19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpjbGNzaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtODg3LVxcbm5ldC9zbWMvYWZfc21jLmM6ODg4OlxcdHJlYWRfbG9ja19iaChcXHUwMDI2Y2xjc2stXFx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xcbm5ldC9zbWMvYWZfc21jLmMtODg5LVxcdHNtYyA9IHNtY19jbGNzb2NrX3VzZXJfZGF0YShjbGNzayk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTg5Nj1zdGF0aWMgdm9pZCBzbWNfZmJhY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKmNsY3NrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy04OTktXFxubmV0L3NtYy9hZl9zbWMuYzo5MDA6XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZjbGNzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxubmV0L3NtYy9hZl9zbWMuYy05MDEtXFx0c21jID0gc21jX2NsY3NvY2tfdXNlcl9kYXRhKGNsY3NrKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9OTA4PXN0YXRpYyB2b2lkIHNtY19mYmFja19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKmNsY3NrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy05MTEtXFxubmV0L3NtYy9hZl9zbWMuYzo5MTI6XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZjbGNzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxubmV0L3NtYy9hZl9zbWMuYy05MTMtXFx0c21jID0gc21jX2NsY3NvY2tfdXNlcl9kYXRhKGNsY3NrKTtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTc0NT1zdGF0aWMgaW50IHNtY19jbGNzb2NrX2FjY2VwdChzdHJ1Y3Qgc21jX3NvY2sgKmxzbWMsIHN0cnVjdCBzbWNfc29jayAqKm5ld19zbWMpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTE3NzAtXFx0aWYgKHJjIFxcdTAwM2MgMCB8fCBsc2stXFx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQpIHtcXG5uZXQvc21jL2FmX3NtYy5jOjE3NzE6XFx0XFx0bmV3X3NrLVxcdTAwM2Vza19wcm90LVxcdTAwM2V1bmhhc2gobmV3X3NrKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE3NzItXFx0XFx0aWYgKG5ld19jbGNzb2NrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0xODMyPXN0cnVjdCBzb2NrICpzbWNfYWNjZXB0X2RlcXVldWUoc3RydWN0IHNvY2sgKnBhcmVudCxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTg0Mi1cXHRcXHRpZiAobmV3X3NrLVxcdTAwM2Vza19zdGF0ZSA9PSBTTUNfQ0xPU0VEKSB7XFxubmV0L3NtYy9hZl9zbWMuYzoxODQzOlxcdFxcdFxcdG5ld19zay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKG5ld19zayk7XFxubmV0L3NtYy9hZl9zbWMuYy0xODQ0LVxcdFxcdFxcdGlmIChpc2stXFx1MDAzZWNsY3NvY2spIHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjYzOD1zdGF0aWMgdm9pZCBzbWNfY2xjc29ja19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpsaXN0ZW5fY2xjc29jaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjY0MS1cXG5uZXQvc21jL2FmX3NtYy5jOjI2NDI6XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZsaXN0ZW5fY2xjc29jay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XFxubmV0L3NtYy9hZl9zbWMuYy0yNjQzLVxcdGxzbWMgPSBzbWNfY2xjc29ja191c2VyX2RhdGEobGlzdGVuX2NsY3NvY2spO1xcbi0tXFxubmV0L3NtYy9zbWMuaD00MD1pbnQgc21jX2hhc2hfc2soc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtYy5oOjQxOnZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9zbWMvc21jLmgtNDItdm9pZCBzbWNfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spO1xcbi0tXFxubmV0L3NtYy9zbWMuaD0xOTU9c3RydWN0IHNtY19jb25uZWN0aW9uIHtcXG4tLVxcbm5ldC9zbWMvc21jLmgtMjgxLVxcdHU4XFx0XFx0XFx0ZnJlZWQ7XFx0XFx0Lyogbm9ybWFsIHRlcm1pbmF0aW9uICovXFxubmV0L3NtYy9zbWMuaDoyODI6XFx0dThcXHRcXHRcXHR1bmhhc2hlZDtcXHQvKiByZW1vdmVkIGZyb20gc29jayBoYXNoICovXFxubmV0L3NtYy9zbWMuaC0yODMtXFx0dThcXHRcXHRcXHRvdXRfb2Zfc3luYztcXHQvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTQ2OT1zdGF0aWMgdm9pZCBzbWNfY2RjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKVxcbi0tXFxubmV0L3NtYy9zbWNfY2RjLmMtNDgzLVxcdGxnciA9IHNtY19nZXRfbGdyKGxpbmspO1xcbm5ldC9zbWMvc21jX2NkYy5jOjQ4NDpcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxubmV0L3NtYy9zbWNfY2RjLmMtNDg1LVxcdGNvbm4gPSBzbWNfbGdyX2ZpbmRfY29ubihudG9obChjZGMtXFx1MDAzZXRva2VuKSwgbGdyKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NsYy5jPTExOD1pbnQgc21jX2NsY191ZWlkX2NvdW50KHZvaWQpXFxuLS1cXG5uZXQvc21jL3NtY19jbGMuYy0xMjEtXFxubmV0L3NtYy9zbWNfY2xjLmM6MTIyOlxcdHJlYWRfbG9jayhcXHUwMDI2c21jX2NsY19laWRfdGFibGUubG9jayk7XFxubmV0L3NtYy9zbWNfY2xjLmMtMTIzLVxcdGNvdW50ID0gc21jX2NsY19laWRfdGFibGUudWVpZF9jbnQ7XFxuLS1cXG5uZXQvc21jL3NtY19jbGMuYz0yMDY9c3RhdGljIGludCBfc21jX25sX3VlaWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmMtMjExLVxcbm5ldC9zbWMvc21jX2NsYy5jOjIxMjpcXHRyZWFkX2xvY2soXFx1MDAyNnNtY19jbGNfZWlkX3RhYmxlLmxvY2spO1xcbm5ldC9zbWMvc21jX2NsYy5jLTIxMy1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGxzdF91ZWlkLCBcXHUwMDI2c21jX2NsY19laWRfdGFibGUubGlzdCwgbGlzdCkge1xcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmM9MjM4PWludCBzbWNfbmxfZHVtcF9zZWlkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9zbWMvc21jX2NsYy5jLTI2MS1cXHRcXHRnb3RvIGVycjtcXG5uZXQvc21jL3NtY19jbGMuYzoyNjI6XFx0cmVhZF9sb2NrKFxcdTAwMjZzbWNfY2xjX2VpZF90YWJsZS5sb2NrKTtcXG5uZXQvc21jL3NtY19jbGMuYy0yNjMtXFx0c2VpZF9lbmFibGVkID0gc21jX2NsY19laWRfdGFibGUuc2VpZF9lbmFibGVkO1xcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmM9MzE2PWJvb2wgc21jX2NsY19tYXRjaF9laWQodTggKm5lZ290aWF0ZWRfZWlkLFxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmMtMzIzLVxcdG5lZ290aWF0ZWRfZWlkWzBdID0gMDtcXG5uZXQvc21jL3NtY19jbGMuYzozMjQ6XFx0cmVhZF9sb2NrKFxcdTAwMjZzbWNfY2xjX2VpZF90YWJsZS5sb2NrKTtcXG5uZXQvc21jL3NtY19jbGMuYy0zMjUtXFx0aWYgKHBlZXJfZWlkIFxcdTAwMjZcXHUwMDI2IGxvY2FsX2VpZCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmM9NTYzPXN0YXRpYyBpbnQgc21jX2NsY19wcmZ4X3NldChzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLFxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmMtNTgwLVxcbm5ldC9zbWMvc21jX2NsYy5jOjU4MTpcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfY2xjLmMtNTgyLVxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmM9NjU3PWludCBzbWNfY2xjX3ByZnhfbWF0Y2goc3RydWN0IHNvY2tldCAqY2xjc29jayxcXG4tLVxcbm5ldC9zbWMvc21jX2NsYy5jLTY2My1cXG5uZXQvc21jL3NtY19jbGMuYzo2NjQ6XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9zbWMvc21jX2NsYy5jLTY2NS1cXG4tLVxcbm5ldC9zbWMvc21jX2NsYy5jPTg0Nj1pbnQgc21jX2NsY19zZW5kX3Byb3Bvc2FsKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmMtOTQyLVxcdFxcdHYyX2V4dC1cXHUwMDNlZmVhdHVyZV9tYXNrID0gaHRvbnMoU01DX0ZFQVRVUkVfTUFTSyk7XFxubmV0L3NtYy9zbWNfY2xjLmM6OTQzOlxcdFxcdHJlYWRfbG9jayhcXHUwMDI2c21jX2NsY19laWRfdGFibGUubG9jayk7XFxubmV0L3NtYy9zbWNfY2xjLmMtOTQ0LVxcdFxcdHYyX2V4dC1cXHUwMDNlaGRyLmVpZF9jbnQgPSBzbWNfY2xjX2VpZF90YWJsZS51ZWlkX2NudDtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz03MTQ9c3RhdGljIHZvaWQgc21jX2xncl9mcmVlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTcyNy1cXHR9XFxubmV0L3NtYy9zbWNfY29yZS5jOjcyODpcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTcyOS1cXHRjb25ucyA9IFJCX0VNUFRZX1JPT1QoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfYWxsKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMDk1PXN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMTIzLWFnYWluOlxcbm5ldC9zbWMvc21jX2NvcmUuYzoxMTI0OlxcdHJlYWRfbG9ja19iaChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19sb2NrKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTEyNS1cXHRmb3IgKG5vZGUgPSByYl9maXJzdChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19hbGwpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkge1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTEyMjQ9c3RhdGljIHZvaWQgc21jX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI1My1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI1NDovKiB1bmhhc2ggdGhlIHNvY2tldCBvbmNlOyBvd25zIHRoZSBzaW5nbGUgdW5oYXNoIGZvciBhbGwgbm9uLWZhbGxiYWNrIHBhdGhzLlxcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjU1OiAqIEV2ZXJ5IGNhbGxlciBob2xkcyBsb2NrX3NvY2sgZm9yIHRoaXMgc29ja2V0LCBzbyBjb25uLVxcdTAwM2V1bmhhc2hlZCBpcyBwcm90ZWN0ZWRcXG5uZXQvc21jL3NtY19jb3JlLmMtMTI1Ni0gKiBieSB0aGF0IGxvY2sgYW5kIG5vIHNlcGFyYXRlIHN5bmNocm9uaXNhdGlvbiBpcyBuZWVkZWQuXFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNTctICovXFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNTg6dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU5LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjYxLVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjYyOlxcdGlmICghY29ubi1cXHUwMDNldW5oYXNoZWQpIHtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTI2MzpcXHRcXHRjb25uLVxcdTAwM2V1bmhhc2hlZCA9IDE7XFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNjQ6XFx0XFx0c21jLVxcdTAwM2Vzay5za19wcm90LVxcdTAwM2V1bmhhc2goXFx1MDAyNnNtYy1cXHUwMDNlc2spO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjY1LVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjY5PXZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI4MC1cXHQvKiBVbmhhc2ggYmVmb3JlIGRyb3BwaW5nIGxnci9sbmsgcmVmcyBzbyB0aGUgZGlhZyByZWFkZXIsIHdoaWNoXFxubmV0L3NtYy9zbWNfY29yZS5jOjEyODE6XFx0ICogaXRlcmF0ZXMgdW5kZXIgdGhlIHNvY2tldCBoYXNoIHJlYWRfbG9jaywgY2Fubm90IHNlZSBhIGNvbm5lY3Rpb24gd2hvc2VcXG5uZXQvc21jL3NtY19jb3JlLmMtMTI4Mi1cXHQgKiBsZ3Igb3IgbG5rIGlzIGJlaW5nIGZyZWVkIGNvbmN1cnJlbnRseS5cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI4My1cXHQgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTI4NDpcXHRzbWNfY29ubl91bmhhc2goY29ubik7XFxubmV0L3NtYy9zbWNfY29yZS5jLTEyODUtXFx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTU3OT1zdGF0aWMgdm9pZCBfX3NtY19sZ3JfdGVybWluYXRlKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBib29sIHNvZnQpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTU5MS1cXHQvKiBraWxsIHJlbWFpbmluZyBsaW5rIGdyb3VwIGNvbm5lY3Rpb25zICovXFxubmV0L3NtYy9zbWNfY29yZS5jOjE1OTI6XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZsZ3ItXFx1MDAzZWNvbm5zX2xvY2spO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xNTkzLVxcdG5vZGUgPSByYl9maXJzdChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19hbGwpO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE2MDItXFx0XFx0c29ja19wdXQoXFx1MDAyNnNtYy1cXHUwMDNlc2spOyAvKiBzb2NrX2hvbGQgYWJvdmUgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTYwMzpcXHRcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTE2MDQtXFx0XFx0bm9kZSA9IHJiX2ZpcnN0KFxcdTAwMjZsZ3ItXFx1MDAzZWNvbm5zX2FsbCk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTkxOD1pbnQgc21jX3ZsYW5fYnlfdGNwc2soc3RydWN0IHNvY2tldCAqY2xjc29jaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xOTI2LVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxOTI3OlxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTkyOC1cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xOTk2PWludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjA3NC1cXHRjb25uLVxcdTAwM2VmcmVlZCA9IDA7XFxubmV0L3NtYy9zbWNfY29yZS5jOjIwNzU6XFx0Y29ubi1cXHUwMDNldW5oYXNoZWQgPSAwO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc2LVxcdGNvbm4tXFx1MDAzZWxvY2FsX3R4X2N0cmwuY29tbW9uLnR5cGUgPSBTTUNfQ0RDX01TR19UWVBFO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oPTU5Nj1pbnQgc21jX3ZsYW5fYnlfdGNwc2soc3RydWN0IHNvY2tldCAqY2xjc29jaywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSk7XFxubmV0L3NtYy9zbWNfY29yZS5oLTU5Ny1cXG5uZXQvc21jL3NtY19jb3JlLmg6NTk4OnZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XFxubmV0L3NtYy9zbWNfY29yZS5oLTU5OS12b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW5ldF9kaWFnLmhcXHUwMDNlXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbWNfZGlhZy5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjY6c3RydWN0IHNtY19kaWFnX2R1bXBfY3R4IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjctXFx0aW50IHBvc1syXTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yOS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MzA6c3RhdGljIHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqc21jX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTMxLXtcXG5uZXQvc21jL3NtY19kaWFnLmM6MzI6XFx0cmV0dXJuIChzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKiljYi1cXHUwMDNlY3R4O1xcbm5ldC9zbWMvc21jX2RpYWcuYy0zMy19XFxubmV0L3NtYy9zbWNfZGlhZy5jLTM0LVxcbm5ldC9zbWMvc21jX2RpYWcuYzozNTpzdGF0aWMgdm9pZCBzbWNfZGlhZ19tc2dfY29tbW9uX2ZpbGwoc3RydWN0IHNtY19kaWFnX21zZyAqciwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0zNi17XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtNTktXFxubmV0L3NtYy9zbWNfZGlhZy5jOjYwOnN0YXRpYyBpbnQgc21jX2RpYWdfbXNnX2F0dHJzX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zbWMvc21jX2RpYWcuYzo2MTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc21jX2RpYWdfbXNnICpyLFxcbm5ldC9zbWMvc21jX2RpYWcuYy02Mi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtNzEtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjcyOnN0YXRpYyBpbnQgX19zbWNfZGlhZ19kdW1wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc21jL3NtY19kaWFnLmMtNzMtXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9zbWMvc21jX2RpYWcuYzo3NDpcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgc21jX2RpYWdfcmVxICpyZXEsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTc1LVxcdFxcdFxcdCAgIHN0cnVjdCBubGF0dHIgKmJjKVxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTc3LVxcdHN0cnVjdCBzbWNfc29jayAqc21jID0gc21jX3NrKHNrKTtcXG5uZXQvc21jL3NtY19kaWFnLmM6Nzg6XFx0c3RydWN0IHNtY19kaWFnX2ZhbGxiYWNrIGZhbGxiYWNrO1xcbm5ldC9zbWMvc21jX2RpYWcuYy03OS1cXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjgwOlxcdHN0cnVjdCBzbWNfZGlhZ19tc2cgKnI7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTgxLVxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTg4LVxcdHIgPSBubG1zZ19kYXRhKG5saCk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjg5OlxcdHNtY19kaWFnX21zZ19jb21tb25fZmlsbChyLCBzayk7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTkwLVxcdHItXFx1MDAzZWRpYWdfc3RhdGUgPSBzay1cXHUwMDNlc2tfc3RhdGU7XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtOTctXFx0dXNlcl9ucyA9IHNrX3VzZXJfbnMoTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5zayk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjk4OlxcdGlmIChzbWNfZGlhZ19tc2dfYXR0cnNfZmlsbChzaywgc2tiLCByLCB1c2VyX25zKSlcXG5uZXQvc21jL3NtY19kaWFnLmMtOTktXFx0XFx0Z290byBlcnJvdXQ7XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMTA4LVxcdFxcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiA9IFxcdTAwMjZzbWMtXFx1MDAzZWNvbm47XFxubmV0L3NtYy9zbWNfZGlhZy5jOjEwOTpcXHRcXHRzdHJ1Y3Qgc21jX2RpYWdfY29ubmluZm8gY2luZm8gPSB7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTExMC1cXHRcXHRcXHQudG9rZW4gPSBjb25uLVxcdTAwM2VhbGVydF90b2tlbl9sb2NhbCxcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xNTAtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE1MTpcXHRcXHRzdHJ1Y3Qgc21jX2RpYWdfbGdyaW5mbyBsaW5mbyA9IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMTUyLVxcdFxcdFxcdC5yb2xlID0gc21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlcm9sZSxcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTUtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE5NjpzdGF0aWMgaW50IHNtY19kaWFnX2R1bXBfcHJvdG8oc3RydWN0IHByb3RvICpwcm90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IHBfdHlwZSlcXG5uZXQvc21jL3NtY19kaWFnLmMtMTk4LXtcXG5uZXQvc21jL3NtY19kaWFnLmM6MTk5OlxcdHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqY2JfY3R4ID0gc21jX2R1bXBfY29udGV4dChjYik7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTIwMC1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMDYtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIwNzpcXHRyZWFkX2xvY2soXFx1MDAyNnByb3QtXFx1MDAzZWguc21jX2hhc2gtXFx1MDAzZWxvY2spO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yMDgtXFx0aGVhZCA9IFxcdTAwMjZwcm90LVxcdTAwM2VoLnNtY19oYXNoLVxcdTAwM2VodDtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMTYtXFx0XFx0XFx0Z290byBuZXh0O1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyMTc6XFx0XFx0cmMgPSBfX3NtY19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCksIGJjKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjE4LVxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjI5LVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyMzA6c3RhdGljIGludCBzbWNfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvc21jL3NtY19kaWFnLmMtMjMxLXtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzMtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNDpcXHRyYyA9IHNtY19kaWFnX2R1bXBfcHJvdG8oXFx1MDAyNnNtY19wcm90bywgc2tiLCBjYiwgU01DUFJPVE9fU01DKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjM1LVxcdGlmICghcmMpXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNjpcXHRcXHRzbWNfZGlhZ19kdW1wX3Byb3RvKFxcdTAwMjZzbWNfcHJvdG82LCBza2IsIGNiLCBTTUNQUk9UT19TTUM2KTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjM3LVxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzktXFxubmV0L3NtYy9zbWNfZGlhZy5jOjI0MDpzdGF0aWMgaW50IHNtY19kaWFnX2hhbmRsZXJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKmgpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI0MS17XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjQ3LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyNDg6XFx0XFx0XFx0XFx0LmR1bXAgPSBzbWNfZGlhZ19kdW1wLFxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNDktXFx0XFx0XFx0XFx0Lm1pbl9kdW1wX2FsbG9jID0gU0tCX1dJVEhfT1ZFUkhFQUQoMzI3NjgpLFxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI1Ni1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjU3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19kaWFnX2hhbmRsZXIgc21jX2RpYWdfaGFuZGxlciA9IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjU4LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNTktXFx0LmZhbWlseSA9IEFGX1NNQyxcXG5uZXQvc21jL3NtY19kaWFnLmM6MjYwOlxcdC5kdW1wID0gc21jX2RpYWdfaGFuZGxlcl9kdW1wLFxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjEtfTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjYyLVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjM6c3RhdGljIGludCBfX2luaXQgc21jX2RpYWdfaW5pdCh2b2lkKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjQte1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjU6XFx0cmV0dXJuIHNvY2tfZGlhZ19yZWdpc3RlcihcXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI2Ni19XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI2Ny1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjY4OnN0YXRpYyB2b2lkIF9fZXhpdCBzbWNfZGlhZ19leGl0KHZvaWQpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI2OS17XFxubmV0L3NtYy9zbWNfZGlhZy5jOjI3MDpcXHRzb2NrX2RpYWdfdW5yZWdpc3RlcihcXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI3MS19XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI3Mi1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjczOm1vZHVsZV9pbml0KHNtY19kaWFnX2luaXQpO1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyNzQ6bW9kdWxlX2V4aXQoc21jX2RpYWdfZXhpdCk7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI3NS1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLS1cXG5uZXQvc21jL3NtY19oc19icGYuaC0yMC0gKlxcbm5ldC9zbWMvc21jX2hzX2JwZi5oOjIxOiAqIE5vdGU6IENhbGxlciBNVVNUIGVuc3VyZSBpdCdzIHdhcyBpbnZva2VkIHVuZGVyIHJjdV9yZWFkX2xvY2suXFxubmV0L3NtYy9zbWNfaHNfYnBmLmgtMjItICovXFxuLS1cXG5uZXQvc21jL3NtY19pYi5jPTI3ND1pbnQgc21jX2liX2RldGVybWluZV9naWQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQsXFxuLS1cXG5uZXQvc21jL3NtY19pYi5jLTI4Ni1cXG5uZXQvc21jL3NtY19pYi5jOjI4NzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfaWIuYy0yODgtXFx0XFx0bmRldiA9IHJkbWFfcmVhZF9naWRfYXR0cl9uZGV2X3JjdShhdHRyKTtcXG4tLVxcbm5ldC9zbWMvc21jX2liLmM9MzA3PXN0YXRpYyBib29sIHNtY19pYl9jaGVja19saW5rX2dpZCh1OCBnaWRbU01DX0dJRF9TSVpFXSwgYm9vbCBzbWNydjIsXFxuLS1cXG5uZXQvc21jL3NtY19pYi5jLTMxOC1cXG5uZXQvc21jL3NtY19pYi5jOjMxOTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfaWIuYy0zMjAtXFx0XFx0aWYgKCghc21jcnYyIFxcdTAwMjZcXHUwMDI2IGF0dHItXFx1MDAzZWdpZF90eXBlID09IElCX0dJRF9UWVBFX1JPQ0UpIHx8XFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MjM9c3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jLTI4LVxcdC5oYXNoXFx0XFx0PSBzbWNfaGFzaF9zayxcXG5uZXQvc21jL3NtY19pbmV0LmM6Mjk6XFx0LnVuaGFzaFxcdFxcdD0gc21jX3VuaGFzaF9zayxcXG5uZXQvc21jL3NtY19pbmV0LmMtMzAtXFx0LnJlbGVhc2VfY2JcXHQ9IHNtY19yZWxlYXNlX2NiLFxcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jPTcwPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXQ2X3Byb3QgPSB7XFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmMtNzUtXFx0Lmhhc2hcXHRcXHQ9IHNtY19oYXNoX3NrLFxcbm5ldC9zbWMvc21jX2luZXQuYzo3NjpcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbm5ldC9zbWMvc21jX2luZXQuYy03Ny1cXHQucmVsZWFzZV9jYlxcdD0gc21jX3JlbGVhc2VfY2IsXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MTIzPXN0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3NtYy9zbWNfaW5ldC5jLTEyNC17XFxubmV0L3NtYy9zbWNfaW5ldC5jOjEyNTpcXHQvKiBUaGUgc29jayBpcyBoYXNoZWQgYW5kIHNtY19kaWFnIGR1bXBzIGRlcmVmZXJlbmNlIHNtYy1cXHUwMDNlY2xjc29ja1xcbm5ldC9zbWMvc21jX2luZXQuYy0xMjYtXFx0ICogd2l0aG91dCBjbGNzb2NrX3JlbGVhc2VfbG9jaywgd2hpbGUgc2tfY29tbW9uX3JlbGVhc2UoKSBjYWxsc1xcbm5ldC9zbWMvc21jX2luZXQuYzoxMjc6XFx0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXFxubmV0L3NtYy9zbWNfaW5ldC5jLTEyOC1cXHQgKiBzbyBubyBkdW1wIGNhbiBvYnNlcnZlIHRoZSBjbGNzb2NrIGJlaW5nIHJlbGVhc2VkOyB0aGUgc2Vjb25kXFxubmV0L3NtYy9zbWNfaW5ldC5jOjEyOTpcXHQgKiB1bmhhc2ggaXMgYSBuby1vcC5cXG5uZXQvc21jL3NtY19pbmV0LmMtMTMwLVxcdCAqL1xcbm5ldC9zbWMvc21jX2luZXQuYzoxMzE6XFx0c2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZXVuaGFzaChzayk7XFxubmV0L3NtYy9zbWNfaW5ldC5jLTEzMi1cXHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jPTczMT1ib29sIHNtY19wbmV0X2lzX25kZXZfcG5ldGlkKHN0cnVjdCBuZXQgKm5ldCwgdTggKnBuZXRpZClcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYy03MzYtXFxubmV0L3NtYy9zbWNfcG5ldC5jOjczNzpcXHRyZWFkX2xvY2soXFx1MDAyNnNuLVxcdTAwM2VwbmV0aWRzX25kZXYubG9jayk7XFxubmV0L3NtYy9zbWNfcG5ldC5jLTczOC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBlLCBcXHUwMDI2c24tXFx1MDAzZXBuZXRpZHNfbmRldi5saXN0LCBsaXN0KSB7XFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmM9MTEzMj12b2lkIHNtY19wbmV0X2ZpbmRfcm9jZV9yZXNvdXJjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpXFxuLS1cXG5uZXQvc21jL3NtY19wbmV0LmMtMTEzNi1cXG5uZXQvc21jL3NtY19wbmV0LmM6MTEzNzpcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfcG5ldC5jLTExMzgtXFx0ZHN0ID0gX19za19kc3RfZ2V0KHNrKTtcXG4tLVxcbm5ldC9zbWMvc21jX3BuZXQuYz0xMTQ5PXZvaWQgc21jX3BuZXRfZmluZF9pc21fcmVzb3VyY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxcbi0tXFxubmV0L3NtYy9zbWNfcG5ldC5jLTExNTUtXFxubmV0L3NtYy9zbWNfcG5ldC5jOjExNTY6XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9zbWMvc21jX3BuZXQuYy0xMTU3LVxcdGRzdCA9IF9fc2tfZHN0X2dldChzayk7XFxuLS1cXG5uZXQvc21jL3NtY19yeC5jPTMyPXN0YXRpYyB2b2lkIHNtY19yeF93YWtlX3VwKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvc21jX3J4LmMtMzktXFx0LyogY2FsbGVkIGFscmVhZHkgaW4gc21jX2xpc3Rlbl93b3JrKCkgKi9cXG5uZXQvc21jL3NtY19yeC5jOjQwOlxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvc21jL3NtY19yeC5jLTQxLVxcdHdxID0gcmN1X2RlcmVmZXJlbmNlKHNrLVxcdTAwM2Vza193cSk7XFxuLS1cXG5uZXQvc21jL3NtY19zeXNjdGwuYz0zOD1zdGF0aWMgaW50IHNtY19uZXRfcmVwbGFjZV9zbWNfaHNfY3RybChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5uZXQvc21jL3NtY19zeXNjdGwuYy00MS1cXG5uZXQvc21jL3NtY19zeXNjdGwuYzo0MjpcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfc3lzY3RsLmMtNDMtXFx0LyogbnVsbCBvciBlbXB0eSBuYW1lIGFzayB0byBjbGVhciBjdXJyZW50IGN0cmwgKi9cXG4tLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5jPTcwPXN0YXRpYyBpbnQgcHJvY19zbWNfaHNfY3RybChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5jLTgxLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5jOjgyOlxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvc21jL3NtY19zeXNjdGwuYy04My1cXHRjdHJsID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cXHUwMDNlc21jLmhzX2N0cmwpO1xcbi0tXFxubmV0L3NtYy9zbWNfc3lzY3RsLmM9MjE0PWludCBfX25ldF9pbml0IHNtY19zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3NtYy9zbWNfc3lzY3RsLmMtMjIzLVxcbm5ldC9zbWMvc21jX3N5c2N0bC5jOjIyNDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L3NtYy9zbWNfc3lzY3RsLmMtMjI1LVxcdFxcdGN0cmwgPSByY3VfZGVyZWZlcmVuY2UoaW5pdF9uZXQuc21jLmhzX2N0cmwpO1xcbi0tXFxubmV0L3NtYy9zbWNfdHguYz00MT1zdGF0aWMgdm9pZCBzbWNfdHhfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3NtYy9zbWNfdHguYy01MS1cXHRcXHRjbGVhcl9iaXQoU09DS19OT1NQQUNFLCBcXHUwMDI2c29jay1cXHUwMDNlZmxhZ3MpO1xcbm5ldC9zbWMvc21jX3R4LmM6NTI6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9zbWMvc21jX3R4LmMtNTMtXFx0XFx0d3EgPSByY3VfZGVyZWZlcmVuY2Uoc2stXFx1MDAzZXNrX3dxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NDguNjQ5NTE5ODY1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzQ0MTYxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTTUMgVW5oYXNoIEZ1bmN0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHNtY191bmhhc2hfc2tgIGZ1bmN0aW9uLiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBuZXQvc21jL2FmX3NtYy5jYC4gVGhpcyBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgU01DLXJlbGF0ZWQgY29kZSwgc28gaXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgc29ja2V0cyBhcmUgdW5oYXNoZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBTTUMgZnJhbWV3b3JrLiBJJ20gYXNzdW1pbmcgdGhhdCBpdCdzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCBJIG5lZWQgdG8gZGlzc2VjdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHRhc2suIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDc5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NTAuNDgzOTM4ODM4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL2FmX3NtYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5OSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5OTpcXHRpbnQgc21jX2hhc2hfc2soc3RydWN0IHNvY2sgKnNrKVxcbiAyMDA6XFx0e1xcbiAyMDE6XFx0XFx0c3RydWN0IHNtY19oYXNoaW5mbyAqaCA9IHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VoLnNtY19oYXNoO1xcbiAyMDI6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdGhlYWQgPSBcXHUwMDI2aC1cXHUwMDNlaHQ7XFxuIDIwNTpcXHRcXG4gMjA2OlxcdFxcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNmgtXFx1MDAzZWxvY2spO1xcbiAyMDc6XFx0XFx0c2tfYWRkX25vZGUoc2ssIGhlYWQpO1xcbiAyMDg6XFx0XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2Vsb2NrKTtcXG4gMjA5OlxcdFxcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cXHUwMDNlc2tfcHJvdCwgMSk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdHJldHVybiAwO1xcbiAyMTI6XFx0fVxcbiAyMTM6XFx0XFxuIDIxNDpcXHR2b2lkIHNtY191bmhhc2hfc2soc3RydWN0IHNvY2sgKnNrKVxcbiAyMTU6XFx0e1xcbiAyMTY6XFx0XFx0c3RydWN0IHNtY19oYXNoaW5mbyAqaCA9IHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VoLnNtY19oYXNoO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2Vsb2NrKTtcXG4gMjE5OlxcdFxcdGlmIChza19kZWxfbm9kZV9pbml0KHNrKSlcXG4gMjIwOlxcdFxcdFxcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cXHUwMDNlc2tfcHJvdCwgLTEpO1xcbiAyMjE6XFx0XFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZoLVxcdTAwM2Vsb2NrKTtcXG4gMjIyOlxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0LyogVGhpcyB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdXNlciByZWFsbHkgcmVsZWFzZSBzb2NrX2xvY2suIFNvIGRvIHRoZVxcbiAyMjU6XFx0ICogd29yayB3aGljaCB3ZSBkaWRuJ3QgZG8gYmVjYXVzZSBvZiB1c2VyIGhvbGQgdGhlIHNvY2tfbG9jayBpbiB0aGVcXG4gMjI2OlxcdCAqIEJIIGNvbnRleHRcXG4gMjI3OlxcdCAqL1xcbiAyMjg6XFx0dm9pZCBzbWNfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuIDIyOTpcXHR7XFxuIDIzMDpcXHRcXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHNtY19zayhzayk7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdGlmIChzbWMtXFx1MDAzZWNvbm4udHhfaW5fcmVsZWFzZV9zb2NrKSB7XFxuIDIzMzpcXHRcXHRcXHRzbWNfdHhfcGVuZGluZyhcXHUwMDI2c21jLVxcdTAwM2Vjb25uKTtcXG4gMjM0OlxcdFxcdFxcdHNtYy1cXHUwMDNlY29ubi50eF9pbl9yZWxlYXNlX3NvY2sgPSBmYWxzZTtcXG4gMjM1OlxcdFxcdH1cXG4gMjM2OlxcdH1cXG4gMjM3OlxcdFxcbiAyMzg6XFx0c3RydWN0IHByb3RvIHNtY19wcm90byA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTg6NTAuNDg0MTIzOTA4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTY4NTI0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFNNQyBSZWxlYXNlKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCdzIGhhcHBlbmluZyBpbiB0aGUgYF9fc21jX3JlbGVhc2VgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvZGUgYmxvY2sgc3Bhbm5pbmcgcm91Z2hseSBsaW5lcyAyODggdGhyb3VnaCAzNDAuIFRoaXMgcmFuZ2UgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhbmQgd2hlcmUgSSdsbCBnZXQgdGhlIG1vc3QgdXNlZnVsIGluZm9ybWF0aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBkYXRhIG1hbmlwdWxhdGlvbiBoYXBwZW5pbmcgd2l0aGluIHRoYXQgc2VnbWVudCB0byBmdWxseSBncmFzcCB0aGUgZnVuY3Rpb24ncyBvdmVyYWxsIGJlaGF2aW9yLiBJJ20gYW50aWNpcGF0aW5nIHRoaXMgc2VjdGlvbiB0byBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIFNNQyByZWxlYXNlIHByb2Nlc3MsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0LiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo1Mi42NDA5Nzk1ODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvYWZfc21jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg4LFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg4OlxcdHN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4gMjg5OlxcdHtcXG4gMjkwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IFxcdTAwMjZzbWMtXFx1MDAzZXNrO1xcbiAyOTE6XFx0XFx0aW50IHJjID0gMDtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0aWYgKCFzbWMtXFx1MDAzZXVzZV9mYWxsYmFjaykge1xcbiAyOTQ6XFx0XFx0XFx0cmMgPSBzbWNfY2xvc2VfYWN0aXZlKHNtYyk7XFxuIDI5NTpcXHRcXHRcXHRzbWNfc29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcXG4gMjk2OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biB8PSBTSFVURE9XTl9NQVNLO1xcbiAyOTc6XFx0XFx0fSBlbHNlIHtcXG4gMjk4OlxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gU01DX0NMT1NFRCkge1xcbiAyOTk6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBTTUNfTElTVEVOIFxcdTAwMjZcXHUwMDI2XFxuIDMwMDpcXHRcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlICE9IFNNQ19JTklUKVxcbiAzMDE6XFx0XFx0XFx0XFx0XFx0c29ja19wdXQoc2spOyAvKiBwYXNzaXZlIGNsb3NpbmcgKi9cXG4gMzAyOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gU01DX0xJU1RFTikge1xcbiAzMDM6XFx0XFx0XFx0XFx0XFx0Lyogd2FrZSB1cCBjbGNzb2NrIGFjY2VwdCAqL1xcbiAzMDQ6XFx0XFx0XFx0XFx0XFx0cmMgPSBrZXJuZWxfc29ja19zaHV0ZG93bihzbWMtXFx1MDAzZWNsY3NvY2ssXFxuIDMwNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFNIVVRfUkRXUik7XFxuIDMwNjpcXHRcXHRcXHRcXHR9XFxuIDMwNzpcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xcbiAzMDg6XFx0XFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuIDMwOTpcXHRcXHRcXHR9XFxuIDMxMDpcXHRcXHRcXHRzbWNfcmVzdG9yZV9mYWxsYmFja19jaGFuZ2VzKHNtYyk7XFxuIDMxMTpcXHRcXHR9XFxuIDMxMjpcXHRcXG4gMzEzOlxcdFxcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cXG4gMzE0OlxcdFxcdCAqIE5vbi1mYWxsYmFjayBzb2NrZXRzIHVzZSBzbWNfY29ubl91bmhhc2goKSBzbyB0aGF0IHRoZSBjb25uLVxcdTAwM2V1bmhhc2hlZFxcbiAzMTU6XFx0XFx0ICogZmxhZyBrZWVwcyB0aGUgdW5oYXNoIGV4YWN0bHkgb25jZSBldmVuIHdoZW4gc21jX2Nvbm5fZnJlZSgpIGFscmVhZHkgcmFuXFxuIDMxNjpcXHRcXHQgKiBmaXJzdCAoZS5nLiB2aWEgc21jX2Nvbm5fa2lsbCgpKS5cXG4gMzE3OlxcdFxcdCAqL1xcbiAzMTg6XFx0XFx0aWYgKHNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKVxcbiAzMTk6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZXVuaGFzaChzayk7XFxuIDMyMDpcXHRcXHRlbHNlXFxuIDMyMTpcXHRcXHRcXHRzbWNfY29ubl91bmhhc2goXFx1MDAyNnNtYy1cXHUwMDNlY29ubik7XFxuIDMyMjpcXHRcXG4gMzIzOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gU01DX0NMT1NFRCkge1xcbiAzMjQ6XFx0XFx0XFx0aWYgKHNtYy1cXHUwMDNlY2xjc29jaykge1xcbiAzMjU6XFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gMzI2OlxcdFxcdFxcdFxcdHNtY19jbGNzb2NrX3JlbGVhc2Uoc21jKTtcXG4gMzI3OlxcdFxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuIDMyODpcXHRcXHRcXHR9XFxuIDMyOTpcXHRcXHRcXHRpZiAoIXNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKVxcbiAzMzA6XFx0XFx0XFx0XFx0c21jX2Nvbm5fZnJlZShcXHUwMDI2c21jLVxcdTAwM2Vjb25uKTtcXG4gMzMxOlxcdFxcdH1cXG4gMzMyOlxcdFxcbiAzMzM6XFx0XFx0cmV0dXJuIHJjO1xcbiAzMzQ6XFx0fVxcbiAzMzU6XFx0XFxuIDMzNjpcXHRpbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4gMzM3OlxcdHtcXG4gMzM4OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiAzMzk6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWM7XFxuIDM0MDpcXHRcXHRpbnQgb2xkX3N0YXRlLCByYyA9IDA7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdGlmICghc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE4OjUyLjY0MTE1ODI5NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTE2MjYxNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGBzbWNfY29ubl9mcmVlYCBmdW5jdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gYHNtY19jb25uX2ZyZWVgKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCBgc21jX2Nvbm5fZnJlZWAuIFdlJ3JlIGluIGBuZXQvc21jL3NtY19jb3JlLmNgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgbG9naWMgb2YgU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucyBvdmVyIFJETUEuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24ncyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGFuIFNNQyBjb25uZWN0aW9uIOKAkyBwcmV0dHkgc3RhbmRhcmQgc3R1ZmYuIEkgZXhwZWN0IGl0J2xsIGhhbmRsZSB0aGluZ3MgbGlrZSBjbGVhbmluZyB1cCBtZW1vcnkgYnVmZmVycywgY2xvc2luZyBzb2NrZXRzLCBhbmQgcG90ZW50aWFsbHkgbm90aWZ5aW5nIHRoZSByZW1vdGUgcGVlciBhYm91dCB0aGUgY29ubmVjdGlvbiB0ZXJtaW5hdGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBTTUMsIEknbSBhbnRpY2lwYXRpbmcgdGhlcmUgd2lsbCBiZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZCwgcHJvYmFibHkgc3BpbmxvY2tzIG9yIG11dGV4ZXMsIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdGhlIHRlYXJkb3duIHByb2Nlc3MuIFRoZSBjaGFsbGVuZ2Ugd2l0aCBTTUMgaXMgYWx3YXlzIG1hbmFnaW5nIHNoYXJlZCBtZW1vcnkgc2FmZWx5LCBzbyBJJ20ga2VlbiB0byBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGF0IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGFzc2VzcyB0aGUgZ2VuZXJhbCByb2J1c3RuZXNzIG9mIHRoZSBjbGVhbnVwIHByb2NlZHVyZS4gSSBhbHNvIHdvbmRlciBhYm91dCBpdHMgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBTTUMgY29tcG9uZW50czsgYXJlIHRoZXJlIGNhbGxiYWNrcyBvciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG1vZHVsZT8gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTcyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo1NS4xNTc0MjI5MDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjU1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjU1OlxcdCAqIEV2ZXJ5IGNhbGxlciBob2xkcyBsb2NrX3NvY2sgZm9yIHRoaXMgc29ja2V0LCBzbyBjb25uLVxcdTAwM2V1bmhhc2hlZCBpcyBwcm90ZWN0ZWRcXG4xMjU2OlxcdCAqIGJ5IHRoYXQgbG9jayBhbmQgbm8gc2VwYXJhdGUgc3luY2hyb25pc2F0aW9uIGlzIG5lZWRlZC5cXG4xMjU3OlxcdCAqL1xcbjEyNTg6XFx0dm9pZCBzbWNfY29ubl91bmhhc2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbjEyNTk6XFx0e1xcbjEyNjA6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG4xMjYxOlxcdFxcbjEyNjI6XFx0XFx0aWYgKCFjb25uLVxcdTAwM2V1bmhhc2hlZCkge1xcbjEyNjM6XFx0XFx0XFx0Y29ubi1cXHUwMDNldW5oYXNoZWQgPSAxO1xcbjEyNjQ6XFx0XFx0XFx0c21jLVxcdTAwM2Vzay5za19wcm90LVxcdTAwM2V1bmhhc2goXFx1MDAyNnNtYy1cXHUwMDNlc2spO1xcbjEyNjU6XFx0XFx0fVxcbjEyNjY6XFx0fVxcbjEyNjc6XFx0XFxuMTI2ODpcXHQvKiByZW1vdmUgYSBmaW5pc2hlZCBjb25uZWN0aW9uIGZyb20gaXRzIGxpbmsgZ3JvdXAgKi9cXG4xMjY5OlxcdHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuMTI3MDpcXHR7XFxuMTI3MTpcXHRcXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGNvbm4tXFx1MDAzZWxncjtcXG4xMjcyOlxcdFxcbjEyNzM6XFx0XFx0aWYgKCFsZ3IgfHwgY29ubi1cXHUwMDNlZnJlZWQpXFxuMTI3NDpcXHRcXHRcXHQvKiBDb25uZWN0aW9uIGhhcyBuZXZlciBiZWVuIHJlZ2lzdGVyZWQgaW4gYVxcbjEyNzU6XFx0XFx0XFx0ICogbGluayBncm91cCwgb3IgaGFzIGFscmVhZHkgYmVlbiBmcmVlZC5cXG4xMjc2OlxcdFxcdFxcdCAqL1xcbjEyNzc6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNzg6XFx0XFxuMTI3OTpcXHRcXHRjb25uLVxcdTAwM2VmcmVlZCA9IDE7XFxuMTI4MDpcXHRcXHQvKiBVbmhhc2ggYmVmb3JlIGRyb3BwaW5nIGxnci9sbmsgcmVmcyBzbyB0aGUgZGlhZyByZWFkZXIsIHdoaWNoXFxuMTI4MTpcXHRcXHQgKiBpdGVyYXRlcyB1bmRlciB0aGUgc29ja2V0IGhhc2ggcmVhZF9sb2NrLCBjYW5ub3Qgc2VlIGEgY29ubmVjdGlvbiB3aG9zZVxcbjEyODI6XFx0XFx0ICogbGdyIG9yIGxuayBpcyBiZWluZyBmcmVlZCBjb25jdXJyZW50bHkuXFxuMTI4MzpcXHRcXHQgKi9cXG4xMjg0OlxcdFxcdHNtY19jb25uX3VuaGFzaChjb25uKTtcXG4xMjg1OlxcdFxcdGlmICghc21jX2Nvbm5fbGdyX3ZhbGlkKGNvbm4pKVxcbjEyODY6XFx0XFx0XFx0LyogQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgZnJvbVxcbjEyODc6XFx0XFx0XFx0ICogbGluayBncm91cC5cXG4xMjg4OlxcdFxcdFxcdCAqL1xcbjEyODk6XFx0XFx0XFx0Z290byBsZ3JfcHV0O1xcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRpZiAobGdyLVxcdTAwM2Vpc19zbWNkKSB7XFxuMTI5MjpcXHRcXHRcXHRzbWNfaXNtX3Vuc2V0X2Nvbm4oY29ubik7XFxuMTI5MzpcXHRcXHRcXHR0YXNrbGV0X2tpbGwoXFx1MDAyNmNvbm4tXFx1MDAzZXJ4X3Rza2xldCk7XFxuMTI5NDpcXHRcXHRcXHRpZiAoc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkobGdyLVxcdTAwM2VzbWNkKSlcXG4xMjk1OlxcdFxcdFxcdFxcdHNtY2RfYnVmX2RldGFjaChjb25uKTtcXG4xMjk2OlxcdFxcdH0gZWxzZSB7XFxuMTI5NzpcXHRcXHRcXHRzbWNfY2RjX3dhaXRfcGVuZF90eF93cihjb25uKTtcXG4xMjk4OlxcdFxcdFxcdGlmIChjdXJyZW50X3dvcmsoKSAhPSBcXHUwMDI2Y29ubi1cXHUwMDNlYWJvcnRfd29yaylcXG4xMjk5OlxcdFxcdFxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmNvbm4tXFx1MDAzZWFib3J0X3dvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxODo1NS4xNTc1NTQzNjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzMTU3NTM1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBHYW1lIFBsYW46IFNNQyBQcm90b2NvbCoqXG5cbkFscmlnaHQsIHRoaXMgbG9va3MgcHJvbWlzaW5nLCBkZWZpbml0ZWx5IGZ1enotd29ydGh5LiBNeSBndXQgdGVsbHMgbWUgdGhpcyBgbmV0L3NtYy9gIGNvZGUgaXMgcmlwZSBmb3IgYSBnb29kLCBoYXJkIGZ1enppbmcgc2Vzc2lvbi4gVGhlIFNNQyBwcm90b2NvbCB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgaW4gbXkgc2lnaHRzLiBIZXJlJ3Mgd2h5OlxuXG5GaXJzdCwgaXTigJlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiBJIGNhbiBsZXZlcmFnZSBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucyDigJMgYHNvY2tldChBRl9TTUMsIC4uLilgLCBgY29ubmVjdGAsIGBsaXN0ZW5gLCBgYWNjZXB0YCwgYGNsb3NlYCDigJMgdGhlIHdob2xlIHNoZWJhbmcuIEFuZCBkb24ndCBmb3JnZXQgdGhlIHNvY2tldCBtb25pdG9yaW5nIG5ldGxpbmsgcmVxdWVzdHMgKFNNQ19ESUFHKSwgdGhhdCdzIGFuIGF0dGFjayB2ZWN0b3IgSSBjYW4gcGxheSB3aXRoLlxuXG5TZWNvbmQsIHRoZSBjb2RlIHRvdWNoZXMgY3J1Y2lhbCBhcmVhczogaXTigJlzIG1vZGlmeWluZyB0aGUgc29ja2V0IHVuaGFzaGluZyBsaWZlY3ljbGUsIGRlYWxpbmcgd2l0aCBzeW5jaHJvbml6YXRpb24sIGFuZCBtYW5hZ2luZyB0aGUgc3RhdGUgZmxhZ3Mgd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYCDigJMgc3BlY2lmaWNhbGx5IGBjb25uLVx1MDAzZXVuaGFzaGVkYC4gYHNtY19jb25uX3VuaGFzaGAgZ2V0cyBjYWxsZWQgZHVyaW5nIGBzbWNfY29ubl9mcmVlYCBhbmQgYF9fc21jX3JlbGVhc2VgLCB3aGljaCBpcyB3aGVyZSBteSBpbnRlcmVzdCBwZWFrcyEgVGhpcyBzY3JlYW1zIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBmaXggb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgaXNzdWUgZm9yIHRoZSBzb2NrZXQgaGFzaCB0YWJsZSBhbmQgZGlhZ25vc3RpYyByZWFkZXIuIENvbmN1cnJlbnQgY2FsbHMgdG8gYGNsb3NlYCwgYHJlbGVhc2VgLCBgYWJvcnRgLCBhbmQgYHNvY2tfZGlhZ2Agd2lsbCBiZSB0aGUga2V5IHRvIHVubG9ja2luZyBhbnkgaGlkZGVuIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQ6XG5cbjEuICBgU01DYCAod2hpY2gsIGZyb20gbG9va2luZyBhdCBgbmV0L3NtYy9LY29uZmlnYCwgZGVwZW5kcyBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYCkgaXMgZW5hYmxlZC5cbjIuICBgU01DX0RJQUdgIGlzIGVuYWJsZWQuXG4zLiAgYElORVRgIChlc3NlbnRpYWwgZm9yIG5ldHdvcmtpbmcsIG9mIGNvdXJzZSlcbjQuICBgSU5GSU5JQkFORGAgKHJlcXVpcmVkIGZvciBoYXJkd2FyZSBzdXBwb3J0KVxuNS4gIGBESUJTYCAoRGlyZWN0IEludGVyZmFjZSBiZXR3ZWVuIEJ1cyBhbmQgU29ja2V0KVxuNi4gIEFuZCBzaW5jZSBJIGxpa2UgdG8gY292ZXIgYWxsIHRoZSBiYXNlcywgSSdsbCBkb3VibGUgY2hlY2sgdGhhdCBgRElCU19MT2AgaXMgZW5hYmxlZCB0b28sIGp1c3QgaW4gY2FzZSwgaXTigJlzIHRoZSBzb2Z0d2FyZSBsb29wYmFjayBvcHRpb24uXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgU01DLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudDsgSSBkb27igJl0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgZnV6emluZy4gVGltZSB0byBkaXZlIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk5NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjA1LjQ3MzMxMDMwMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMjQ5NDQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU01DfGNvbmZpZyBJTkZJTklCQU5EfGNvbmZpZyBESUJTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc9MTQ2PWNvbmZpZyBJMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0hcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTUwLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc6MTUxOmNvbmZpZyBTTUNfVUNPREVfUEFUQ0hcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnLTE1Mi1cXHRib29sIFxcXCJTTUMgcmVsb2NhdGlvbiBwYXRjaFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyOm1lbnVjb25maWcgSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE2PWlmIElORklOSUJBTkRcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0xNy1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoxODpjb25maWcgSU5GSU5JQkFORF9VU0VSX01BRFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHVzZXJzcGFjZSBNQUQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTI3LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTM5LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQwOmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTX0NPUkVcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00MS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00My1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0NDpjb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQ1LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUwLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjUxOmNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cXHRib29sIFxcXCJJbmZpbmlCYW5kIG9uLWRlbWFuZCBwYWdpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTYzLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02NS1cXHRib29sIFxcXCJSRE1BL0NNXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NzI6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU19DT05GSUdGU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTczLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTgwLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjgxOmNvbmZpZyBJTkZJTklCQU5EX1ZJUlRfRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctODItXFx0ZGVmX2Jvb2wgIUhJR0hNRU1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0JOR19SRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXh0IGdlbmVyYXRpb24gUm9DRSBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5YVF9SRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gTmV0eHRyZW1lIEhDQSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0NYR0I0XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ2hlbHNpbyBUNC9UNSBSRE1BIERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZy02LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX0VGQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJBbWF6b24gRWxhc3RpYyBGYWJyaWMgQWRhcHRlciAoRUZBKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0VSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQWxpYmFiYSBFbGFzdGljIFJETUEgQWRhcHRlciAoRVJETUEpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0hGSTFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkNvcm5lbGlzIE9QWCBHZW4xIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9ITlNfSElQMDhcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSGlzaWxpY29uIEhpcDA4IEZhbWlseSBSb0NFIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvS2NvbmZpZy0zLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnOjQ6Y29uZmlnIElORklOSUJBTkRfSU9OSUNcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJBTUQgUGVuc2FuZG8gRFNDIFJETUEvUm9DRSBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0lSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwoUikgRXRoZXJuZXQgUHJvdG9jb2wgRHJpdmVyIGZvciBSRE1BXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX01USENBXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWVsbGFub3ggSENBIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy05LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjEwOmNvbmZpZyBJTkZJTklCQU5EX01USENBX0RFQlVHXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWctMTEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX09DUkRNQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJFbXVsZXggT25lIENvbm5lY3QgSENBIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3FlZHIvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1FFRFJcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlFMb2dpYyBSb0NFIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9VU05JQ1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlZlcmJzIHN1cHBvcnQgZm9yIENpc2NvIFZJQ1xcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdm13X3B2cmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfVk1XQVJFX1BWUkRNQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVk13YXJlIFBhcmF2aXJ0dWFsaXplZCBSRE1BIERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1JETUFWVFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJSRE1BIHZlcmJzIHRyYW5zcG9ydCBsaWJyYXJ5XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSVAtb3Zlci1JbmZpbmlCYW5kXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTExLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZzoxMjpjb25maWcgSU5GSU5JQkFORF9JUE9JQl9DTVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0xMy1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgQ29ubmVjdGVkIE1vZGUgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0yNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjc6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiSVAtb3Zlci1JbmZpbmlCYW5kIGRlYnVnZ2luZ1xcXCIgaWYgRVhQRVJUXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctNDEtXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjQyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEFcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiSVAtb3Zlci1JbmZpbmlCYW5kIGRhdGEgcGF0aCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVNFUlxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcImlTQ1NJIEV4dGVuc2lvbnMgZm9yIFJETUEgKGlTRVIpXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVNFUlRcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiaVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUikgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0yLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjM6Y29uZmlnIElORklOSUJBTkRfUlRSU1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTQtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTYtXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9SVFJTX0NMSUVOVFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTgtXFx0dHJpc3RhdGUgXFxcIlJUUlMgY2xpZW50IG1vZHVsZVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTE3LVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfU0VSVkVSXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIlJUUlMgc2VydmVyIG1vZHVsZVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfU1JQXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIFNDU0kgUkRNQSBQcm90b2NvbFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBUXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCBTQ1NJIFJETUEgUHJvdG9jb2wgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9TTVNDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZzoyMjpjb25maWcgU01DOTFYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJTTUMgOTFDOXgvOTFDMXh4eCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOTowOC40MDU4MTEwNzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1MjM5MDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byBTb2Z0d2FyZSBSRE1BKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgb2YgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChSRE1BKS4gVGhhdCBtYWtlcyBzZW5zZSDigJMgd2UncmUgZXhwbG9yaW5nIGFsdGVybmF0aXZlIHBhdGhzLCBsaWtlbHkgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBwb3J0YWJpbGl0eSwgb3IgbWF5YmUgZXZlbiBpbiBlbnZpcm9ubWVudHMgd2hlcmUgaGFyZHdhcmUgUkRNQSBpc24ndCBhdmFpbGFibGUgb3IgcHJhY3RpY2FsLiBOb3csIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBpcyB3aXRoIGtub3duIG5hbWVzIGluIHRoZSBmaWVsZCwgc28gbGV0J3MgbWFrZSBzdXJlIHdlIGV4YW1pbmUgYFJETUFfUlhFYCB0b28uIEl0J3MgY3J1Y2lhbCB0byBjb3ZlciB0aGF0IGdyb3VuZCB0byBlbnN1cmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBJIHdhbnQgdG8gbGVhdmUgbm8gc3RvbmUgdW50dXJuZWQgaW4gdGhpcyBhbmFseXNpcywgYW5kIHRoYXQgaW5jbHVkZXMgYW55IHJlbGV2YW50IHNvZnR3YXJlIGFwcHJvYWNoZXMuIFRoaXMgd2lsbCBoZWxwIGVuc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyMzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOToxMS43NTgyMDUwNTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDgwNTA3MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJETUFfUlhFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZzoyOmNvbmZpZyBSRE1BX1JYRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MTMuNTY2MjYwNDA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyOTMyNzM1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBTb2NrZXQgTG9naWMgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBvZiB0aGlzIGNoYW5nZS4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYEZvY3VzU3ltYm9sc2Ag4oCTIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGFyZSBpbXBsZW1lbnRpbmcgdGhpcyBuZXcgZmVhdHVyZSByZWxhdGVkIHRvIFNNQyBzb2NrZXRzLiBMb29raW5nIHRocm91Z2ggdGhlIHByb3ZpZGVkIGxpc3QsIGl0J3MgY2xlYXI6XG5cbjEuICBgc21jX2Nvbm5fdW5oYXNoYDogVGhpcyBpcyBhICpuZXcqIGZ1bmN0aW9uLiBUaGF0J3MgYSBrZXkgaW5kaWNhdG9yIG9mIGZ1bmN0aW9uYWxpdHkgaW50cm9kdWN0aW9uLiBMb2NhdGVkIGluIGBuZXQvc21jL3NtY19jb3JlLmNgLlxuMi4gIGBzbWNfY29ubl9mcmVlYDogSXQncyBiZWVuIG1vZGlmaWVkIHRvICpjYWxsKiBgc21jX2Nvbm5fdW5oYXNoYCwgc28gdGhpcyBsaWtlbHkgaXMgaW50ZWdyYWwgdG8gdGhlIGNsZWFudXAuIEFsc28gaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuXG4zLiAgYF9fc21jX3JlbGVhc2VgOiBUaGlzIGZ1bmN0aW9uLCBsb2NhdGVkIGluIGBuZXQvc21jL2FmX3NtYy5jYCwgYWxzbyBjYWxscyBgc21jX2Nvbm5fdW5oYXNoYCwgaW1wbHlpbmcgaXQncyBwYXJ0IG9mIHRoZSByZWxlYXNlIHBhdGguXG40LiAgYHNtY19jb25uX2NyZWF0ZWA6IFRoaXMgbm93IGluaXRpYWxpemVzIGBjb25uLVx1MDAzZXVuaGFzaGVkYC4gVGhhdCdzIGFuIGluaXRpYWxpemF0aW9uLCBpbmRpY2F0aW5nIHRoYXQgYSBuZXcgY29ubmVjdGlvbiBpcyBiZWluZyBtYW5hZ2VkIGluIGEgbmV3IHdheS4gTG9jYXRlZCBpbiBgbmV0L3NtYy9zbWNfY29yZS5jYC5cbjUuICBgc21jX3VuaGFzaF9za2A6IFRoZSBhY3R1YWwgdW5kZXJseWluZyB1bmhhc2ggaW1wbGVtZW50YXRpb24uIEl0J3MgaW4gYG5ldC9zbWMvYWZfc21jLmNgLlxuNi4gIGBzbWNfcmVsZWFzZWA6IFRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBzb2NrZXQgcmVsZWFzZSBhbmQgaXMgaW4gYG5ldC9zbWMvYWZfc21jLmNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byB0cmlnZ2VyIHRoaXMgbG9naWMuIFRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uIGxpc3QgLSBgU01DYCwgYFNNQ19ESUFHYCwgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgSU5GSU5JQkFORGAgLSBzZWVtcyByZWFzb25hYmxlLiBUaGVzZSBjb3ZlciB0aGUgU01DIGFuZCBJbmZpbmliYW5kIHN1YnN5c3RlbXMsIHdoaWNoIG1ha2VzIHNlbnNlLlxuXG5Ob3cgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkga25vdyB0aGlzIGZlYXR1cmUgd2FycmFudHMgZnV6emluZywgc28gYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHRydWUuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgYmUgY29uY2lzZSwgYW5kIGNsZWFybHkgYXJ0aWN1bGF0ZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgY29tcGxldGUgYXMgY29uZmlybWVkIGJ5IHRoZSBwcmV2aW91cyByZXZpZXcuIEZpbmFsbHksIEkndmUgZ290IG15IGBGb2N1c1N5bWJvbHNgIGxpc3QsIHdoaWNoIEkndmUgYWxyZWFkeSBzY3J1dGluaXplZC5cblxuQmVmb3JlIEkgY29tbWl0IHRvIGBzZXQtcmVzdWx0c2AsIEkgbmVlZCBhIGZpbmFsIHNhbml0eSBjaGVjay4gSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgZXhpc3QsIGFuZCB0aGF0IHRoZXkgYXJlIGFjdHVhbGx5IHNwZWNpZmljIHRvIFNNQy4gTG9va3MgZ29vZC4gVGhlc2UgYXJlIGFsbCAqdmVyeSogc3BlY2lmaWMgc29ja2V0IGZ1bmN0aW9ucy4gSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUzNCwiT3V0cHV0VG9rZW5zIjoxOTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MTguODU5NTM2NTQ4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NzY0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiLFxuICAgIFwiU01DX0RJQUdcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfY29ubl91bmhhc2hcIixcbiAgICBcInNtY19jb25uX2ZyZWVcIixcbiAgICBcIl9fc21jX3JlbGVhc2VcIixcbiAgICBcInNtY19jb25uX2NyZWF0ZVwiLFxuICAgIFwic21jX3VuaGFzaF9za1wiLFxuICAgIFwic21jX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGhhc2ggbWFuYWdlbWVudCBhbmQgbGluayBncm91cCBkZXN0cnVjdGlvbiBsaWZlY3ljbGUgaW4gdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuIEl0IGludHJvZHVjZXMgc21jX2Nvbm5fdW5oYXNoKCkgd2l0aCBhIG5ldyBjb25uLVxcdTAwM2V1bmhhc2hlZCBmbGFnIHRvIGVuc3VyZSBub24tZmFsbGJhY2sgU01DIHNvY2tldHMgYXJlIHVuaGFzaGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgbGluayBncm91cC9saW5rIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQsIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIHdpdGggc29ja2V0IGRpYWdub3N0aWMgZHVtcHMuIFRoZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgbmV0d29ya2luZyBzb2NrZXQgYW5kIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBjb2RlIGFjY2Vzc2libGUgdmlhIHVzZXItc3BhY2Ugc29ja2V0IGFuZCBzb2NrX2RpYWcgaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIixcbiAgICBcIlNNQ19ESUFHXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX2Nvbm5fdW5oYXNoXCIsXG4gICAgXCJzbWNfY29ubl9mcmVlXCIsXG4gICAgXCJfX3NtY19yZWxlYXNlXCIsXG4gICAgXCJzbWNfY29ubl9jcmVhdGVcIixcbiAgICBcInNtY191bmhhc2hfc2tcIixcbiAgICBcInNtY19yZWxlYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHNvY2tldCBoYXNoIG1hbmFnZW1lbnQgYW5kIGxpbmsgZ3JvdXAgZGVzdHJ1Y3Rpb24gbGlmZWN5Y2xlIGluIHRoZSBTTUMgcHJvdG9jb2wgZmFtaWx5LiBJdCBpbnRyb2R1Y2VzIHNtY19jb25uX3VuaGFzaCgpIHdpdGggYSBuZXcgY29ubi1cXHUwMDNldW5oYXNoZWQgZmxhZyB0byBlbnN1cmUgbm9uLWZhbGxiYWNrIFNNQyBzb2NrZXRzIGFyZSB1bmhhc2hlZCBleGFjdGx5IG9uY2UgYmVmb3JlIGxpbmsgZ3JvdXAvbGluayByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLCBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyB3aXRoIHNvY2tldCBkaWFnbm9zdGljIGR1bXBzLiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmtpbmcgc29ja2V0IGFuZCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgY29kZSBhY2Nlc3NpYmxlIHZpYSB1c2VyLXNwYWNlIHNvY2tldCBhbmQgc29ja19kaWFnIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjE4LjkzNTIyMDE3N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4Njc0MjE4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOToxOC45MzU4MDQ3MTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODg2NjgzMTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBzb2NrZXQgdGVhcmRvd24gKHNtY19jb25uX2ZyZWUpIGFuZCBzb2NrZXQgZGlhZ25vc3RpY3MgKHNtY19kaWFnKSBieSB1bmhhc2hpbmcgdGhlIHNvY2tldCBlYXJsaWVyIGFuZCB0cmFja2luZyB0aGUgdW5oYXNoIHN0YXRlIHZpYSBhIG5ldyBgdW5oYXNoZWRgIGZsYWcgaW4gYHN0cnVjdCBzbWNfY29ubmVjdGlvbmAuXFxuXFxuMS4gVGhlIG5ldyBgdW5oYXNoZWRgIGZpZWxkIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgc21jX3NvY2tgIHZpYSBgc2tfYWxsb2MoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkpIGFuZCBpcyBleHBsaWNpdGx5IHJlc2V0IHRvIDAgaW4gYHNtY19jb25uX2NyZWF0ZSgpYC5cXG4yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxcbjMuIE5vIGtlcm5lbC10by11c2VyIGNvcHkgc3RydWN0dXJlcyAoc3VjaCBhcyBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBpb2N0bCBzdHJ1Y3R1cmVzKSBoYXZlIGhhZCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIGludHJvZHVjZWQuXFxuNC4gVGhlIHJhY2UgY29uZGl0aW9uIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgZml4ZWQgYnkgdGhpcyBwYXRjaCBhcmUgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4vTE9DS0RFUCwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjg2NjliZjJiMDRmYjA5NzAxZmY1ZTRmYmUwYWZjZGMwNjAyMDIzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTA6MTg6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL2FmX3NtYy5jIGIvbmV0L3NtYy9hZl9zbWMuY1xuaW5kZXggZTlmOTNiM2FiNDM1Yi4uOGM3ODFhNGE0NDg1YiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvYWZfc21jLmNcbisrKyBiL25ldC9zbWMvYWZfc21jLmNcbkBAIC0zMTAsNyArMzEwLDE1IEBAIHN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiBcdFx0c21jX3Jlc3RvcmVfZmFsbGJhY2tfY2hhbmdlcyhzbWMpO1xuIFx0fVxuIFxuLVx0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spO1xuK1x0LyogRmFsbGJhY2sgc29ja2V0cyBuZXZlciBjYWxsIHNtY19jb25uX2ZyZWUoKSwgc28gdW5oYXNoIGRpcmVjdGx5LlxuK1x0ICogTm9uLWZhbGxiYWNrIHNvY2tldHMgdXNlIHNtY19jb25uX3VuaGFzaCgpIHNvIHRoYXQgdGhlIGNvbm4tXHUwMDNldW5oYXNoZWRcbitcdCAqIGZsYWcga2VlcHMgdGhlIHVuaGFzaCBleGFjdGx5IG9uY2UgZXZlbiB3aGVuIHNtY19jb25uX2ZyZWUoKSBhbHJlYWR5IHJhblxuK1x0ICogZmlyc3QgKGUuZy4gdmlhIHNtY19jb25uX2tpbGwoKSkuXG4rXHQgKi9cbitcdGlmIChzbWMtXHUwMDNldXNlX2ZhbGxiYWNrKVxuK1x0XHRzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzayk7XG4rXHRlbHNlXG4rXHRcdHNtY19jb25uX3VuaGFzaChcdTAwMjZzbWMtXHUwMDNlY29ubik7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gU01DX0NMT1NFRCkge1xuIFx0XHRpZiAoc21jLVx1MDAzZWNsY3NvY2spIHtcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtYy5oIGIvbmV0L3NtYy9zbWMuaFxuaW5kZXggNDI3YjZkNjNiOTkzMS4uMDc1MzEyMjc4ODM1YyAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jLmhcbisrKyBiL25ldC9zbWMvc21jLmhcbkBAIC0yNzksNiArMjc5LDcgQEAgc3RydWN0IHNtY19jb25uZWN0aW9uIHtcbiBcdHU2NFx0XHRcdHBlZXJfdG9rZW47XHQvKiBTTUMtRCB0b2tlbiBvZiBwZWVyICovXG4gXHR1OFx0XHRcdGtpbGxlZDtcdFx0LyogYWJub3JtYWwgdGVybWluYXRpb24gKi9cbiBcdHU4XHRcdFx0ZnJlZWQ7XHRcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xuK1x0dThcdFx0XHR1bmhhc2hlZDtcdC8qIHJlbW92ZWQgZnJvbSBzb2NrIGhhc2ggKi9cbiBcdHU4XHRcdFx0b3V0X29mX3N5bmM7XHQvKiBvdXQgb2Ygc3luYyB3aXRoIHBlZXIgKi9cbiB9O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuY1xuaW5kZXggMDRhZWRkOTU3NTQzYS4uZTMwMjIyMWMzNWUzZiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuY1xuKysrIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5AQCAtMTI1MSw2ICsxMjUxLDIwIEBAIHN0YXRpYyB2b2lkIHNtY19idWZfdW51c2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxuIFx0fVxuIH1cbiBcbisvKiB1bmhhc2ggdGhlIHNvY2tldCBvbmNlOyBvd25zIHRoZSBzaW5nbGUgdW5oYXNoIGZvciBhbGwgbm9uLWZhbGxiYWNrIHBhdGhzLlxuKyAqIEV2ZXJ5IGNhbGxlciBob2xkcyBsb2NrX3NvY2sgZm9yIHRoaXMgc29ja2V0LCBzbyBjb25uLVx1MDAzZXVuaGFzaGVkIGlzIHByb3RlY3RlZFxuKyAqIGJ5IHRoYXQgbG9jayBhbmQgbm8gc2VwYXJhdGUgc3luY2hyb25pc2F0aW9uIGlzIG5lZWRlZC5cbisgKi9cbit2b2lkIHNtY19jb25uX3VuaGFzaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4re1xuK1x0c3RydWN0IHNtY19zb2NrICpzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbitcbitcdGlmICghY29ubi1cdTAwM2V1bmhhc2hlZCkge1xuK1x0XHRjb25uLVx1MDAzZXVuaGFzaGVkID0gMTtcbitcdFx0c21jLVx1MDAzZXNrLnNrX3Byb3QtXHUwMDNldW5oYXNoKFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4rXHR9XG4rfVxuK1xuIC8qIHJlbW92ZSBhIGZpbmlzaGVkIGNvbm5lY3Rpb24gZnJvbSBpdHMgbGluayBncm91cCAqL1xuIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuQEAgLTEyNjMsNiArMTI3NywxMSBAQCB2b2lkIHNtY19jb25uX2ZyZWUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRjb25uLVx1MDAzZWZyZWVkID0gMTtcbitcdC8qIFVuaGFzaCBiZWZvcmUgZHJvcHBpbmcgbGdyL2xuayByZWZzIHNvIHRoZSBkaWFnIHJlYWRlciwgd2hpY2hcbitcdCAqIGl0ZXJhdGVzIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCByZWFkX2xvY2ssIGNhbm5vdCBzZWUgYSBjb25uZWN0aW9uIHdob3NlXG4rXHQgKiBsZ3Igb3IgbG5rIGlzIGJlaW5nIGZyZWVkIGNvbmN1cnJlbnRseS5cbitcdCAqL1xuK1x0c21jX2Nvbm5fdW5oYXNoKGNvbm4pO1xuIFx0aWYgKCFzbWNfY29ubl9sZ3JfdmFsaWQoY29ubikpXG4gXHRcdC8qIENvbm5lY3Rpb24gaGFzIGFscmVhZHkgdW5yZWdpc3RlcmVkIGZyb21cbiBcdFx0ICogbGluayBncm91cC5cbkBAIC0yMDUzLDYgKzIwNzIsNyBAQCBpbnQgc21jX2Nvbm5fY3JlYXRlKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKVxuIFx0aWYgKCFjb25uLVx1MDAzZWxnci1cdTAwM2Vpc19zbWNkKVxuIFx0XHRzbWNyX2xpbmtfaG9sZChjb25uLVx1MDAzZWxuayk7IC8qIGxpbmtfcHV0IGluIHNtY19jb25uX2ZyZWUoKSAqL1xuIFx0Y29ubi1cdTAwM2VmcmVlZCA9IDA7XG4rXHRjb25uLVx1MDAzZXVuaGFzaGVkID0gMDtcbiBcdGNvbm4tXHUwMDNlbG9jYWxfdHhfY3RybC5jb21tb24udHlwZSA9IFNNQ19DRENfTVNHX1RZUEU7XG4gXHRjb25uLVx1MDAzZWxvY2FsX3R4X2N0cmwubGVuID0gU01DX1dSX1RYX1NJWkU7XG4gXHRjb25uLVx1MDAzZXVyZ19zdGF0ZSA9IFNNQ19VUkdfUkVBRDtcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19jb3JlLmggYi9uZXQvc21jL3NtY19jb3JlLmhcbmluZGV4IDVjMThmMDhhNGM4YTUuLmYyM2Q2MGFlZjBiNzkgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmhcbisrKyBiL25ldC9zbWMvc21jX2NvcmUuaFxuQEAgLTU5NSw2ICs1OTUsNyBAQCB2b2lkIHNtY19zbmRidWZfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubik7XG4gdm9pZCBzbWNfcm1iX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIGludCBzbWNfdmxhbl9ieV90Y3BzayhzdHJ1Y3Qgc29ja2V0ICpjbGNzb2NrLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcbiBcbit2b2lkIHNtY19jb25uX3VuaGFzaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIGludCBzbWNfY29ubl9jcmVhdGUoc3RydWN0IHNtY19zb2NrICpzbWMsIHN0cnVjdCBzbWNfaW5pdF9pbmZvICppbmkpO1xuIGludCBzbWNfY29yZV9pbml0KHZvaWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MTguOTM1ODA2MzE3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNDE5Mjc3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBTb2NrZXQgVW5oYXNoaW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgaGFuZGxpbmcgdGhlIHVuaGFzaGluZyBvZiBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHNvY2tldHMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIExldCdzIGJyZWFrIGRvd24gbXkgdW5kZXJzdGFuZGluZy4gRmlyc3QsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gY2VudGVyIGFyb3VuZCBhIG5ldyBmaWVsZCwgYHVuaGFzaGVkYCwgd2l0aGluIHRoZSBgc3RydWN0IHNtY19jb25uZWN0aW9uYC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWVsZCBpcyB0byB0cmFjayB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdW5oYXNoZWQsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgcHJldmVudGluZyBkb3VibGUgdW5oYXNoaW5nLlxuXG5Mb29raW5nIGF0IGBfX3NtY19yZWxlYXNlYCwgdGhlIGxvZ2ljIGlzIG5vdyBjb25kaXRpb25hbCBiYXNlZCBvbiB0aGUgYHVzZV9mYWxsYmFja2AgZmxhZy4gSWYgaXQncyBzZXQsIHRoZSBzdGFuZGFyZCBzb2NrZXQgdW5oYXNoIGlzIHVzZWQsIGFuZCBpdCBtYWtlcyBzZW5zZSB0aGF0IGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzaylgIGlzIGNhbGxlZC4gQnV0IGlmIHdlICphcmVuJ3QqIHVzaW5nIHRoZSBmYWxsYmFjaywgdGhlIHBhdGggZm9yIHVuaGFzaGluZyBiZWNvbWVzIGBzbWNfY29ubl91bmhhc2goXHUwMDI2c21jLVx1MDAzZWNvbm4pYC5cblxuVGhlIGNydWNpYWwgcGFydCBpcyB0aGVuIGBzbWNfY29ubl91bmhhc2hgLiBJdCBjaGVja3MgYCFjb25uLVx1MDAzZXVuaGFzaGVkYC4gVGhpcyBpcyB0aGUgc2FmZWd1YXJkLCBlbnN1cmluZyB0aGF0IHRoZSBmdW5jdGlvbiBvbmx5IGV4ZWN1dGVzIG9uY2UuIEl0IHNldHMgYGNvbm4tXHUwMDNldW5oYXNoZWQgPSAxYCB0byBtYXJrIHRoZSBjb25uZWN0aW9uIGFzIHVuaGFzaGVkIGFuZCB0aGVuIHByb2NlZWRzIHRvIHVuaGFzaCB0aGUgdW5kZXJseWluZyBzb2NrZXQgdmlhIGBzbWMtXHUwMDNlc2suc2tfcHJvdC1cdTAwM2V1bmhhc2goXHUwMDI2c21jLVx1MDAzZXNrKWAuXG5cbkluIGBzbWNfY29ubl9mcmVlKClgLCBpdCBhcHBlYXJzIHRoYXQgYHNtY19jb25uX3VuaGFzaChjb25uKWAgaXMgY2FsbGVkICpiZWZvcmUqIHJlbGVhc2luZyB0aGUgbG9naWNhbCBncm91cCBhbmQgbGluayByZWZlcmVuY2VzLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXRhaWwgZm9yIGVuc3VyaW5nIGNsZWFudXAuIEZpbmFsbHksIGBzbWNfY29ubl9jcmVhdGUoKWAgaW5pdGlhbGl6ZXMgYGNvbm4tXHUwMDNldW5oYXNoZWQgPSAwYCwgYXMgZXhwZWN0ZWQuIFRoaXMgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgY2xlYW4sIGZpcnN0LXRpbWUgdW5oYXNoLlxuXG5UbyByZWluZm9yY2UgbXkgdW5kZXJzdGFuZGluZywgSSdsbCBkcmlsbCBkb3duIHRvIHNlZSB3aGVyZSBgY29ubmAgaXMgYWxsb2NhdGVkLiBJIHJlY2FsbCB0aGF0IGBjb25uYCBpcyBlbWJlZGRlZCBpbnNpZGUgdGhlIGBzdHJ1Y3Qgc21jX3NvY2tgLiBXaGVuIGFuIFNNQyBzb2NrZXQgaXMgYWxsb2NhdGVkLCB2aWEgZWl0aGVyIGBzbWNfc29ja19hbGxvY2Agb3IgYHNtY19jcmVhdGVgLCB0aGUgd2hvbGUgYHNtY19zb2NrYCBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBgY29ubmAsIGlzIGFsbG9jYXRlZCBhdCBvbmNlLlxuXG5UbyBkb3VibGUtY2hlY2sgdGhlIGFsbG9jYXRpb25zLCBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBhbnl0aGluZyBJIG1pZ2h0IGJlIG1pc3NpbmcsIEknbGwgbGV2ZXJhZ2UgbXkgcHJlZmVycmVkIHRvb2xzIChncmVwcGVyIGFuZC9vciBteSBmaWxlIHJlYWRpbmcgdXRpbGl0aWVzKSBhbmQgcGlucG9pbnQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MjYuOTc3NzM3MTI2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzcxODg4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MzM0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfc29ja19vcHMgPSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMzNjAtXFxubmV0L3NtYy9hZl9zbWMuYzozMzYxOmludCBzbWNfY3JlYXRlX2NsY3NrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBpbnQgZmFtaWx5KVxcbm5ldC9zbWMvYWZfc21jLmMtMzM2Mi17XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMzODAtXFxubmV0L3NtYy9hZl9zbWMuYzozMzgxOnN0YXRpYyBpbnQgc21jX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG5uZXQvc21jL2FmX3NtYy5jLTMzODItXFx0XFx0ICAgICAgaW50IGtlcm4pXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTM0MDItXFxubmV0L3NtYy9hZl9zbWMuYzozNDAzOlxcdHJjID0gc21jX2NyZWF0ZV9jbGNzayhuZXQsIHNrLCBmYW1pbHkpO1xcbm5ldC9zbWMvYWZfc21jLmMtMzQwNC1cXHRpZiAocmMpIHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MzQxMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgc21jX3NvY2tfZmFtaWx5X29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzQxNC1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbm5ldC9zbWMvYWZfc21jLmM6MzQxNTpcXHQuY3JlYXRlXFx0PSBzbWNfY3JlYXRlLFxcbm5ldC9zbWMvYWZfc21jLmMtMzQxNi19O1xcbi0tXFxubmV0L3NtYy9zbWMuaD03MT12b2lkIHNtY19za19pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBpbnQgcHJvdG9jb2wpO1xcbm5ldC9zbWMvc21jLmgtNzItLyogY2xjc29jayBpbml0aWFsaXphdGlvbiAqL1xcbm5ldC9zbWMvc21jLmg6NzM6aW50IHNtY19jcmVhdGVfY2xjc2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHkpO1xcbm5ldC9zbWMvc21jLmgtNzQtXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MTEzPXN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMTktXFx0LyogY3JlYXRlIGNsY3NvY2sgKi9cXG5uZXQvc21jL3NtY19pbmV0LmM6MTIwOlxcdHJldHVybiBzbWNfY3JlYXRlX2NsY3NrKG5ldCwgc2ssIHNrLVxcdTAwM2Vza19mYW1pbHkpO1xcbm5ldC9zbWMvc21jX2luZXQuYy0xMjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOToyNy4yMTQ5MzE3NTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY2ODk2MDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFNvY2tldCBBbGxvY2F0aW9uIGluIFNNQyBDcmVhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBteSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBjcnVjaWFsIHNvY2tldCBhbGxvY2F0aW9uIHBvaW50cyB3aXRoaW4gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgc2V0dXAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBgc21jX3NvY2tfYWxsb2NgIG9yLCBhbHRlcm5hdGl2ZWx5LCB0aGUgbW9yZSBnZW5lcmljIGBza19hbGxvY2AgZnVuY3Rpb25zIGFzIHRoZXkncmUgdXRpbGl6ZWQgd2l0aGluIGJvdGggYHNtY19jcmVhdGVgIGFuZCBgc21jX3NrX2luaXRgLiBNeSBpbnRlbnRpb24gaXMgdG8gaW1tZWRpYXRlbHkgc2VlIGhvdyB0aGUgc3lzdGVtIGFsbG9jYXRlcyB0aGUgKmFjdHVhbCogc29ja2V0IG9iamVjdCB0aGF0IHdpbGwgdW5kZXJwaW4gdGhlIFNNQyBjb21tdW5pY2F0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgZGlmZmVyaW5nIGFsbG9jYXRpb24gcGF0aHMgZGVwZW5kaW5nIG9uIGNvbnRleHQsIGFuZCBpZiBzbywgaG93IHRob3NlIHBhdGhzIG1heSBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgcmVzb3VyY2UgdXRpbGl6YXRpb24uIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZmxhZ3Mgb3IgcGFyYW1ldGVycyBwYXNzZWQgZHVyaW5nIHNvY2tldCBhbGxvY2F0aW9uIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGUgU01DIGRvbWFpbj8gQXJlIHdlIGFsbG9jYXRpbmcgYSBzdGFuZGFyZCBzb2NrZXQgdGhlbiBtb2RpZnlpbmcgaXQsIG9yIGlzIGEgZGVkaWNhdGVkIFNNQy1hd2FyZSBzb2NrZXQgdHlwZSBiZWluZyBicm91Z2h0IGludG8gZXhpc3RlbmNlPyBHZXR0aW5nIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFsbG9jYXRpb24gZmxvdyBpcyBnb2luZyB0byBiZSBmb3VuZGF0aW9uYWwgZm9yIGRpYWdub3NpbmcgYW55IGlzc3VlcyBsYXRlciBvbjsgZXNwZWNpYWxseSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVyaW5nIHNvY2tldCBsaWZldGltZSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MjkuODgzODk1MTQyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIxODM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9NDI5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc21jX3NvY2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy00MzUtXFx0cHJvdCA9IChwcm90b2NvbCA9PSBTTUNQUk9UT19TTUM2KSA/IFxcdTAwMjZzbWNfcHJvdG82IDogXFx1MDAyNnNtY19wcm90bztcXG5uZXQvc21jL2FmX3NtYy5jOjQzNjpcXHRzayA9IHNrX2FsbG9jKG5ldCwgUEZfU01DLCBHRlBfS0VSTkVMLCBwcm90LCAwKTtcXG5uZXQvc21jL2FmX3NtYy5jLTQzNy1cXHRpZiAoIXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOToyOS45MzAxMTg5ODFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM3OTQxNjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgc21jX3NvY2tfYWxsb2NgIGZ1bmN0aW9uIGluIGBuZXQvc21jL2FmX3NtYy5jYDpcblxuKipBbmFseXppbmcgc21jX3NvY2tfYWxsb2MgaW4gbmV0L3NtYy9hZl9zbWMuYyoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgb3BlbmluZyB1cCB0aGUgYHNtY19zb2NrX2FsbG9jYCBmdW5jdGlvbiBpbiBgbmV0L3NtYy9hZl9zbWMuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBTTUMgc29ja2V0cyBhcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgYW5kIGNyZWF0ZWQuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIHRoYXQgdGhpcyBpcyB0aGUgcHJpbWFyeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGZvciB0aGUgU01DIHNvY2tldCBzdHJ1Y3R1cmUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgc2V0cyB1cCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGFueSBkZWZhdWx0IHZhbHVlcyBpdCB1c2VzLCBhbmQgd2hhdCBraW5kIG9mIGluaXRpYWwgY2hlY2tzIGl0J3MgcGVyZm9ybWluZy4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCB3aGV0aGVyIGl0J3MgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGttYWxsb2NgIGFuZCB3aGV0aGVyIGFueSBzcGVjaWZpYyBmbGFncyBhcmUgYmVpbmcgYXBwbGllZC4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc29ja2V0J3MgaW50ZXJuYWwgc3RhdGUgdmFyaWFibGVzLCB0aGUgc2V0dGluZyBvZiB0aGUgcHJvdG9jb2wgZmFtaWx5LCBhbmQgcG90ZW50aWFsbHkgYW55IHJlZ2lzdHJhdGlvbiBvciBsaW5raW5nIGludG8gdGhlIG92ZXJhbGwgU01DIHN1YnN5c3RlbS4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nIOKAkyBob3cgaXQgcmVzcG9uZHMgdG8gYWxsb2NhdGlvbiBmYWlsdXJlcyBvciBvdGhlciBwb3RlbnRpYWwgaXNzdWVzIGR1cmluZyB0aGUgc29ja2V0IHNldHVwIHByb2Nlc3MuIEFueSByZXNvdXJjZSBsaW1pdHMgYmVpbmcgY29uc2lkZXJlZD8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBhdCB0aGlzIHBvaW50PyBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLCBhbmQgaXQgZ2l2ZXMgYSBwcmV0dHkgZ29vZCBjbHVlIG9mIHRoZSBvdmVyYWxsIHBpY3R1cmUuIExldCdzIHNlZSBob3cgdGhleSBoYW5kbGUgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMDoxOTozMy4zMDk1Mzk0MjlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvYWZfc21jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdFxcdHNtY19jbG9zZV9pbml0KHNtYyk7XFxuIDQyNjpcXHRcXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlaGFzaChzayk7XFxuIDQyNzpcXHR9XFxuIDQyODpcXHRcXG4gNDI5OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqc21jX3NvY2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbiA0MzA6XFx0XFx0XFx0XFx0XFx0ICAgaW50IHByb3RvY29sKVxcbiA0MzE6XFx0e1xcbiA0MzI6XFx0XFx0c3RydWN0IHByb3RvICpwcm90O1xcbiA0MzM6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbiA0MzQ6XFx0XFxuIDQzNTpcXHRcXHRwcm90ID0gKHByb3RvY29sID09IFNNQ1BST1RPX1NNQzYpID8gXFx1MDAyNnNtY19wcm90bzYgOiBcXHUwMDI2c21jX3Byb3RvO1xcbiA0MzY6XFx0XFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX1NNQywgR0ZQX0tFUk5FTCwgcHJvdCwgMCk7XFxuIDQzNzpcXHRcXHRpZiAoIXNrKVxcbiA0Mzg6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQzOTpcXHRcXG4gNDQwOlxcdFxcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsgLyogc2V0cyBza19yZWZjbnQgdG8gMSAqL1xcbiA0NDE6XFx0XFx0c21jX3NrX2luaXQobmV0LCBzaywgcHJvdG9jb2wpO1xcbiA0NDI6XFx0XFxuIDQ0MzpcXHRcXHRyZXR1cm4gc2s7XFxuIDQ0NDpcXHR9XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdGludCBzbWNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXFxuIDQ0NzpcXHRcXHQgICAgIGludCBhZGRyX2xlbilcXG4gNDQ4OlxcdHtcXG4gNDQ5OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjtcXG4gNDUwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiA0NTE6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWM7XFxuIDQ1MjpcXHRcXHRpbnQgcmM7XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdFxcdHNtYyA9IHNtY19zayhzayk7XFxuIDQ1NTpcXHRcXG4gNDU2OlxcdFxcdC8qIHJlcGxpY2F0ZSB0ZXN0cyBmcm9tIGluZXRfYmluZCgpLCB0byBiZSBzYWZlIHdydC4gZnV0dXJlIGNoYW5nZXMgKi9cXG4gNDU3OlxcdFxcdHJjID0gLUVJTlZBTDtcXG4gNDU4OlxcdFxcdGlmIChhZGRyX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKVxcbiA0NTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdHJjID0gLUVBRk5PU1VQUE9SVDtcXG4gNDYyOlxcdFxcdGlmIChhZGRyLVxcdTAwM2VzaW5fZmFtaWx5ICE9IEFGX0lORVQgXFx1MDAyNlxcdTAwMjZcXG4gNDYzOlxcdFxcdCAgICBhZGRyLVxcdTAwM2VzaW5fZmFtaWx5ICE9IEFGX0lORVQ2IFxcdTAwMjZcXHUwMDI2XFxuIDQ2NDpcXHRcXHQgICAgYWRkci1cXHUwMDNlc2luX2ZhbWlseSAhPSBBRl9VTlNQRUMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjMzLjMwOTc1MDRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcwMjI2MzUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBTTUMgQ29ubmVjdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGBza19hbGxvY2AgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgemVyb2VkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHVzaW5nIGVpdGhlciBga21lbV9jYWNoZV96YWxsb2NgIG9yIGBremFsbG9jYC4gVGhhdCdzIGdvb2Q7IGl0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBBbmQgdGhlbiBJIHNlZSB0aGF0IGBzbWNfY29ubl9jcmVhdGVgIGV4cGxpY2l0bHkgc2V0cyBgY29ubi1cdTAwM2V1bmhhc2hlZCA9IDBgLiBUaGlzIG1ha2VzIG1lIHRoaW5rIHRoZXJlICpzaG91bGRuJ3QqIGJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgZmllbGQuXG5cbkJ1dCwgSSdtIGEgc3RpY2tsZXIgZm9yIGRldGFpbCwgYW5kIEkndmUgbGVhcm5lZCB0aGUgaGFyZCB3YXkgbm90IHRvIGFzc3VtZSBhbnl0aGluZy4gU28sIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSBjZXJ0YWluKi4gTGV0J3MgZGlnIGRlZXBlci4gSSBuZWVkIHRvIGNvbXByZWhlbnNpdmVseSBjaGVjayBmb3IgYW55IG90aGVyIGluc3RhbmNlcyB3aGVyZSBgc21jX2Nvbm5lY3Rpb25gIG9yLCBjcnVjaWFsbHksIHRoZSBgdW5oYXNoZWRgIGZpZWxkLCBpcyB1c2VkIHdpdGhpbiB0aGUgU01DIHN1YnN5c3RlbS4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGlmIHRoZXJlJ3MgYW55IGNvZGUgcGF0aCB3aGVyZSBgdW5oYXNoZWRgIG1pZ2h0IGJlIHJlYWQgYmVmb3JlIGJlaW5nIGV4cGxpY2l0bHkgc2V0LCBkZXNwaXRlIHRoZSBpbml0aWFsaXphdGlvbiBpbiBgc21jX2Nvbm5fY3JlYXRlYC5cblxuSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgbXkgaW52ZXN0aWdhdGlvbiBvbiBmaWxlcyBpbiB0aGUgYG5ldC9zbWMvYCBkaXJlY3RvcnkgaXRzZWxmLCBwYXJ0aWN1bGFybHkgdGhlIGRpYWdub3N0aWMgcmVhZGVyLCBhbmQgYW55IG90aGVyIGZpbGVzIGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEknbSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGFjY2VzcyBvciByZWx5IG9uIHRoZSBgdW5oYXNoZWRgIGZpZWxkJ3Mgc3RhdGUuIEkgbmVlZCB0byBiZSAxMDAlIGNvbmZpZGVudCB0aGVyZSdzIG5vIHN1YnRsZSwgbHVya2luZywgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTYxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6MzcuMDEyMDE2NDIzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzg2NDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bmhhc2hlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9Mjg4PXN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzEzLVxcdC8qIEZhbGxiYWNrIHNvY2tldHMgbmV2ZXIgY2FsbCBzbWNfY29ubl9mcmVlKCksIHNvIHVuaGFzaCBkaXJlY3RseS5cXG5uZXQvc21jL2FmX3NtYy5jOjMxNDpcXHQgKiBOb24tZmFsbGJhY2sgc29ja2V0cyB1c2Ugc21jX2Nvbm5fdW5oYXNoKCkgc28gdGhhdCB0aGUgY29ubi1cXHUwMDNldW5oYXNoZWRcXG5uZXQvc21jL2FmX3NtYy5jLTMxNS1cXHQgKiBmbGFnIGtlZXBzIHRoZSB1bmhhc2ggZXhhY3RseSBvbmNlIGV2ZW4gd2hlbiBzbWNfY29ubl9mcmVlKCkgYWxyZWFkeSByYW5cXG4tLVxcbm5ldC9zbWMvc21jLmg9MTk1PXN0cnVjdCBzbWNfY29ubmVjdGlvbiB7XFxuLS1cXG5uZXQvc21jL3NtYy5oLTI4MS1cXHR1OFxcdFxcdFxcdGZyZWVkO1xcdFxcdC8qIG5vcm1hbCB0ZXJtaW5hdGlvbiAqL1xcbm5ldC9zbWMvc21jLmg6MjgyOlxcdHU4XFx0XFx0XFx0dW5oYXNoZWQ7XFx0LyogcmVtb3ZlZCBmcm9tIHNvY2sgaGFzaCAqL1xcbm5ldC9zbWMvc21jLmgtMjgzLVxcdHU4XFx0XFx0XFx0b3V0X29mX3N5bmM7XFx0Lyogb3V0IG9mIHN5bmMgd2l0aCBwZWVyICovXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTIyND1zdGF0aWMgdm9pZCBzbWNfYnVmX3VudXNlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU0LS8qIHVuaGFzaCB0aGUgc29ja2V0IG9uY2U7IG93bnMgdGhlIHNpbmdsZSB1bmhhc2ggZm9yIGFsbCBub24tZmFsbGJhY2sgcGF0aHMuXFxubmV0L3NtYy9zbWNfY29yZS5jOjEyNTU6ICogRXZlcnkgY2FsbGVyIGhvbGRzIGxvY2tfc29jayBmb3IgdGhpcyBzb2NrZXQsIHNvIGNvbm4tXFx1MDAzZXVuaGFzaGVkIGlzIHByb3RlY3RlZFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjU2LSAqIGJ5IHRoYXQgbG9jayBhbmQgbm8gc2VwYXJhdGUgc3luY2hyb25pc2F0aW9uIGlzIG5lZWRlZC5cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjU4PXZvaWQgc21jX2Nvbm5fdW5oYXNoKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjYxLVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxMjYyOlxcdGlmICghY29ubi1cXHUwMDNldW5oYXNoZWQpIHtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTI2MzpcXHRcXHRjb25uLVxcdTAwM2V1bmhhc2hlZCA9IDE7XFxubmV0L3NtYy9zbWNfY29yZS5jLTEyNjQtXFx0XFx0c21jLVxcdTAwM2Vzay5za19wcm90LVxcdTAwM2V1bmhhc2goXFx1MDAyNnNtYy1cXHUwMDNlc2spO1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE5OTY9aW50IHNtY19jb25uX2NyZWF0ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgc3RydWN0IHNtY19pbml0X2luZm8gKmluaSlcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0yMDc0LVxcdGNvbm4tXFx1MDAzZWZyZWVkID0gMDtcXG5uZXQvc21jL3NtY19jb3JlLmM6MjA3NTpcXHRjb25uLVxcdTAwM2V1bmhhc2hlZCA9IDA7XFxubmV0L3NtYy9zbWNfY29yZS5jLTIwNzYtXFx0Y29ubi1cXHUwMDNlbG9jYWxfdHhfY3RybC5jb21tb24udHlwZSA9IFNNQ19DRENfTVNHX1RZUEU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjM3LjA2NTg4NTg3MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTAxMzM3NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGlubmVyIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIHRoZSBTTUMgRGlhZyBSZWFkZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyByYWNlIGNvbmRpdGlvbiB0aGlzIGlzIHRhcmdldGluZy4gVGhlIGBuZXQvc21jL3NtY19kaWFnLmNgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBzcGVjaWZpY2FsbHkgdGhlIGRpYWcgcmVhZGVyIGZ1bmN0aW9uYWxpdHkuIEkga25vdyB0aGF0IGFyZWEgd2VsbCwgYW5kIEkndmUgc2VlbiBzb21lIHRyaWNreSB0aHJlYWRpbmcgaXNzdWVzIGNyb3AgdXAgaW4gdGhlIHBhc3QgcmVsYXRlZCB0byBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGNvbGxlY3Rpb24uIE15IGludHVpdGlvbiBzdWdnZXN0cyB0aGF0IHRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUga2luZCBvZiBjb25jdXJyZW50IGFjY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGhvdyB0aGUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyByZWFkIGFuZCB3cml0dGVuLCBwZXJoYXBzIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb3IgdGVhcmRvd24sIG9yIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgdGhlcmUuIExldCdzIHNlZSB3aGF0IHRoZXkndmUgY2hhbmdlZCBhbmQgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMwNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjQyLjE2NzIyNTUzNFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyODM4NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlhZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfU01DKVxcdCs9IHNtYy5vXFxubmV0L3NtYy9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19TTUNfRElBRylcXHQrPSBzbWNfZGlhZy5vXFxubmV0L3NtYy9NYWtlZmlsZS01LXNtYy15IDo9IGFmX3NtYy5vIHNtY19wbmV0Lm8gc21jX2liLm8gc21jX2NsYy5vIHNtY19jb3JlLm8gc21jX3dyLm8gc21jX2xsYy5vXFxuLS1cXG5uZXQvc21jL3NtYy5oPTI4Nj1zdHJ1Y3Qgc21jX3NvY2sge1xcdFxcdFxcdFxcdC8qIHNtYyBzb2NrIGNvbnRhaW5lciAqL1xcbi0tXFxubmV0L3NtYy9zbWMuaC0zMDktXFx0aW50XFx0XFx0XFx0ZmFsbGJhY2tfcnNuO1xcdC8qIHJlYXNvbiBmb3IgZmFsbGJhY2sgKi9cXG5uZXQvc21jL3NtYy5oOjMxMDpcXHR1MzJcXHRcXHRcXHRwZWVyX2RpYWdub3NpczsgLyogZGVjbGluZSByZWFzb24gZnJvbSBwZWVyICovXFxubmV0L3NtYy9zbWMuaC0zMTEtXFx0YXRvbWljX3QgICAgICAgICAgICAgICAgcXVldWVkX3NtY19oczsgIC8qIHF1ZXVlZCBzbWMgaGFuZHNoYWtlcyAqL1xcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmM9Njg5PWludCBzbWNfY2xjX3dhaXRfbXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCB2b2lkICpidWYsIGludCBidWZsZW4sXFxuLS1cXG5uZXQvc21jL3NtY19jbGMuYy03ODktXFx0XFx0cmVhc29uX2NvZGUgPSBTTUNfQ0xDX0RFQ0xfUEVFUkRFQ0w7XFxubmV0L3NtYy9zbWNfY2xjLmM6NzkwOlxcdFxcdHNtYy1cXHUwMDNlcGVlcl9kaWFnbm9zaXMgPSBudG9obChkY2xjLVxcdTAwM2VwZWVyX2RpYWdub3Npcyk7XFxubmV0L3NtYy9zbWNfY2xjLmMtNzkxLVxcdFxcdGlmICgoZGNsYy1cXHUwMDNlaGRyLnR5cGV2MiBcXHUwMDI2IFNNQ19GSVJTVF9DT05UQUNUX01BU0spIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvc21jL3NtY19jbGMuYy04MDMtLyogc2VuZCBDTEMgREVDTElORSBtZXNzYWdlIGFjcm9zcyBpbnRlcm5hbCBUQ1Agc29ja2V0ICovXFxubmV0L3NtYy9zbWNfY2xjLmM6ODA0OmludCBzbWNfY2xjX3NlbmRfZGVjbGluZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYywgdTMyIHBlZXJfZGlhZ19pbmZvLCB1OCB2ZXJzaW9uKVxcbm5ldC9zbWMvc21jX2NsYy5jLTgwNS17XFxuLS1cXG5uZXQvc21jL3NtY19jbGMuYy04MTctXFx0ZGNsYy5vc190eXBlID0gdmVyc2lvbiA9PSBTTUNfVjEgPyAwIDogU01DX0NMQ19PU19MSU5VWDtcXG5uZXQvc21jL3NtY19jbGMuYzo4MTg6XFx0ZGNsYy5oZHIudHlwZXYyID0gKHBlZXJfZGlhZ19pbmZvID09IFNNQ19DTENfREVDTF9TWU5DRVJSKSA/XFxubmV0L3NtYy9zbWNfY2xjLmMtODE5LVxcdFxcdFxcdFxcdFxcdFxcdFNNQ19GSVJTVF9DT05UQUNUX01BU0sgOiAwO1xcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmMtODIzLVxcdFxcdCAgICAgICBzaXplb2YobG9jYWxfc3lzdGVtaWQpKTtcXG5uZXQvc21jL3NtY19jbGMuYzo4MjQ6XFx0ZGNsYy5wZWVyX2RpYWdub3NpcyA9IGh0b25sKHBlZXJfZGlhZ19pbmZvKTtcXG5uZXQvc21jL3NtY19jbGMuYy04MjUtXFx0aWYgKHZlcnNpb24gPT0gU01DX1YxKSB7XFxuLS1cXG5uZXQvc21jL3NtY19jbGMuaD0zMDI9c3RydWN0IHNtY19jbGNfbXNnX2RlY2xpbmUge1xcdC8qIGNsYyBkZWNsaW5lIG1lc3NhZ2UgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NsYy5oLTMwNC1cXHR1OCBpZF9mb3JfcGVlcltTTUNfU1lTVEVNSURfTEVOXTsgLyogc2VuZGVyIHBlZXJfaWQgKi9cXG5uZXQvc21jL3NtY19jbGMuaDozMDU6XFx0X19iZTMyIHBlZXJfZGlhZ25vc2lzO1xcdC8qIGRpYWdub3NpcyBpbmZvcm1hdGlvbiAqL1xcbm5ldC9zbWMvc21jX2NsYy5oLTMwNi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpXFxuLS1cXG5uZXQvc21jL3NtY19jbGMuaC0zMTYtXFxubmV0L3NtYy9zbWNfY2xjLmg6MzE3OiNkZWZpbmUgU01DX0RFQ0xfRElBR19DT1VOVF9WMlxcdDQgLyogbm8uIG9mIGFkZGl0aW9uYWwgcGVlciBkaWFnbm9zaXMgY29kZXMgKi9cXG5uZXQvc21jL3NtY19jbGMuaC0zMTgtXFxubmV0L3NtYy9zbWNfY2xjLmg9MzE5PXN0cnVjdCBzbWNfY2xjX21zZ19kZWNsaW5lX3YyIHtcXHQvKiBjbGMgZGVjbGluZSBtZXNzYWdlICovXFxuLS1cXG5uZXQvc21jL3NtY19jbGMuaC0zMjEtXFx0dTggaWRfZm9yX3BlZXJbU01DX1NZU1RFTUlEX0xFTl07IC8qIHNlbmRlciBwZWVyX2lkICovXFxubmV0L3NtYy9zbWNfY2xjLmg6MzIyOlxcdF9fYmUzMiBwZWVyX2RpYWdub3NpcztcXHQvKiBkaWFnbm9zaXMgaW5mb3JtYXRpb24gKi9cXG5uZXQvc21jL3NtY19jbGMuaC0zMjMtI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmgtMzMwLVxcdHU4IHJlc2VydmVkMlszXTtcXG5uZXQvc21jL3NtY19jbGMuaDozMzE6XFx0X19iZTMyIHBlZXJfZGlhZ25vc2lzX3YyW1NNQ19ERUNMX0RJQUdfQ09VTlRfVjJdO1xcbm5ldC9zbWMvc21jX2NsYy5oLTMzMi1cXHRzdHJ1Y3Qgc21jX2NsY19tc2dfdHJhaWwgdHJsOyAvKiBleWUgY2F0Y2hlciBcXFwiU01DRFxcXCIgb3IgXFxcIlNNQ1JcXFwiIEVCQ0RJQyAqL1xcbi0tXFxubmV0L3NtYy9zbWNfY2xjLmg9NDQ3PWludCBzbWNfY2xjX3dhaXRfbXNnKHN0cnVjdCBzbWNfc29jayAqc21jLCB2b2lkICpidWYsIGludCBidWZsZW4sXFxubmV0L3NtYy9zbWNfY2xjLmgtNDQ4LVxcdFxcdCAgICAgdTggZXhwZWN0ZWRfdHlwZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG5uZXQvc21jL3NtY19jbGMuaDo0NDk6aW50IHNtY19jbGNfc2VuZF9kZWNsaW5lKHN0cnVjdCBzbWNfc29jayAqc21jLCB1MzIgcGVlcl9kaWFnX2luZm8sIHU4IHZlcnNpb24pO1xcbm5ldC9zbWMvc21jX2NsYy5oLTQ1MC1pbnQgc21jX2NsY19zZW5kX3Byb3Bvc2FsKHN0cnVjdCBzbWNfc29jayAqc21jLCBzdHJ1Y3Qgc21jX2luaXRfaW5mbyAqaW5pKTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xMjY5PXZvaWQgc21jX2Nvbm5fZnJlZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTI3OS1cXHRjb25uLVxcdTAwM2VmcmVlZCA9IDE7XFxubmV0L3NtYy9zbWNfY29yZS5jOjEyODA6XFx0LyogVW5oYXNoIGJlZm9yZSBkcm9wcGluZyBsZ3IvbG5rIHJlZnMgc28gdGhlIGRpYWcgcmVhZGVyLCB3aGljaFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMjgxLVxcdCAqIGl0ZXJhdGVzIHVuZGVyIHRoZSBzb2NrZXQgaGFzaCByZWFkX2xvY2ssIGNhbm5vdCBzZWUgYSBjb25uZWN0aW9uIHdob3NlXFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMTUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG5uZXQvc21jL3NtY19kaWFnLmM6MTY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvY2tfZGlhZy5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX2RpYWcuYzoxNzojaW5jbHVkZSBcXHUwMDNjbGludXgvaW5ldF9kaWFnLmhcXHUwMDNlXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbWNfZGlhZy5oXFx1MDAzZVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjY6c3RydWN0IHNtY19kaWFnX2R1bXBfY3R4IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjctXFx0aW50IHBvc1syXTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yOS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MzA6c3RhdGljIHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqc21jX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTMxLXtcXG5uZXQvc21jL3NtY19kaWFnLmM6MzI6XFx0cmV0dXJuIChzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKiljYi1cXHUwMDNlY3R4O1xcbm5ldC9zbWMvc21jX2RpYWcuYy0zMy19XFxubmV0L3NtYy9zbWNfZGlhZy5jLTM0LVxcbm5ldC9zbWMvc21jX2RpYWcuYzozNTpzdGF0aWMgdm9pZCBzbWNfZGlhZ19tc2dfY29tbW9uX2ZpbGwoc3RydWN0IHNtY19kaWFnX21zZyAqciwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0zNi17XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMzktXFx0bWVtc2V0KHIsIDAsIHNpemVvZigqcikpO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo0MDpcXHRyLVxcdTAwM2VkaWFnX2ZhbWlseSA9IHNrLVxcdTAwM2Vza19mYW1pbHk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjQxOlxcdHNvY2tfZGlhZ19zYXZlX2Nvb2tpZShzaywgci1cXHUwMDNlaWQuaWRpYWdfY29va2llKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtNDItXFx0aWYgKCFzbWMtXFx1MDAzZWNsY3NvY2spXFxubmV0L3NtYy9zbWNfZGlhZy5jLTQzLVxcdFxcdHJldHVybjtcXG5uZXQvc21jL3NtY19kaWFnLmM6NDQ6XFx0ci1cXHUwMDNlaWQuaWRpYWdfc3BvcnQgPSBodG9ucyhzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19udW0pO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo0NTpcXHRyLVxcdTAwM2VpZC5pZGlhZ19kcG9ydCA9IHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX2Rwb3J0O1xcbm5ldC9zbWMvc21jX2RpYWcuYzo0NjpcXHRyLVxcdTAwM2VpZC5pZGlhZ19pZiA9IHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX2JvdW5kX2Rldl9pZjtcXG5uZXQvc21jL3NtY19kaWFnLmMtNDctXFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBTTUNQUk9UT19TTUMpIHtcXG5uZXQvc21jL3NtY19kaWFnLmM6NDg6XFx0XFx0ci1cXHUwMDNlaWQuaWRpYWdfc3JjWzBdID0gc21jLVxcdTAwM2VjbGNzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfcmN2X3NhZGRyO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo0OTpcXHRcXHRyLVxcdTAwM2VpZC5pZGlhZ19kc3RbMF0gPSBzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19kYWRkcjtcXG5uZXQvc21jL3NtY19kaWFnLmMtNTAtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTUxLVxcdH0gZWxzZSBpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sID09IFNNQ1BST1RPX1NNQzYpIHtcXG5uZXQvc21jL3NtY19kaWFnLmM6NTI6XFx0XFx0bWVtY3B5KFxcdTAwMjZyLVxcdTAwM2VpZC5pZGlhZ19zcmMsIFxcdTAwMjZzbWMtXFx1MDAzZWNsY3NvY2stXFx1MDAzZXNrLVxcdTAwM2Vza192Nl9yY3Zfc2FkZHIsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTUzLVxcdFxcdCAgICAgICBzaXplb2Yoc21jLVxcdTAwM2VjbGNzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdjZfcmN2X3NhZGRyKSk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjU0OlxcdFxcdG1lbWNweShcXHUwMDI2ci1cXHUwMDNlaWQuaWRpYWdfZHN0LCBcXHUwMDI2c21jLVxcdTAwM2VjbGNzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdjZfZGFkZHIsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTU1LVxcdFxcdCAgICAgICBzaXplb2Yoc21jLVxcdTAwM2VjbGNzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfdjZfZGFkZHIpKTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy01OS1cXG5uZXQvc21jL3NtY19kaWFnLmM6NjA6c3RhdGljIGludCBzbWNfZGlhZ19tc2dfYXR0cnNfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NtYy9zbWNfZGlhZy5jOjYxOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzbWNfZGlhZ19tc2cgKnIsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTYyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy02Ni1cXG5uZXQvc21jL3NtY19kaWFnLmM6Njc6XFx0ci1cXHUwMDNlZGlhZ191aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKHVzZXJfbnMsIHNrX3VpZChzaykpO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo2ODpcXHRyLVxcdTAwM2VkaWFnX2lub2RlID0gc29ja19pX2lubyhzayk7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTY5LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTcxLVxcbm5ldC9zbWMvc21jX2RpYWcuYzo3MjpzdGF0aWMgaW50IF9fc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTczLVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG5uZXQvc21jL3NtY19kaWFnLmM6NzQ6XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNtY19kaWFnX3JlcSAqcmVxLFxcbm5ldC9zbWMvc21jX2RpYWcuYy03NS1cXHRcXHRcXHQgICBzdHJ1Y3QgbmxhdHRyICpiYylcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy03Ny1cXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYyA9IHNtY19zayhzayk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjc4OlxcdHN0cnVjdCBzbWNfZGlhZ19mYWxsYmFjayBmYWxsYmFjaztcXG5uZXQvc21jL3NtY19kaWFnLmMtNzktXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo4MDpcXHRzdHJ1Y3Qgc21jX2RpYWdfbXNnICpyO1xcbm5ldC9zbWMvc21jX2RpYWcuYy04MS1cXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy04OC1cXHRyID0gbmxtc2dfZGF0YShubGgpO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo4OTpcXHRzbWNfZGlhZ19tc2dfY29tbW9uX2ZpbGwociwgc2spO1xcbm5ldC9zbWMvc21jX2RpYWcuYzo5MDpcXHRyLVxcdTAwM2VkaWFnX3N0YXRlID0gc2stXFx1MDAzZXNrX3N0YXRlO1xcbm5ldC9zbWMvc21jX2RpYWcuYy05MS1cXHRpZiAoc21jLVxcdTAwM2V1c2VfZmFsbGJhY2spXFxubmV0L3NtYy9zbWNfZGlhZy5jOjkyOlxcdFxcdHItXFx1MDAzZWRpYWdfbW9kZSA9IFNNQ19ESUFHX01PREVfRkFMTEJBQ0tfVENQO1xcbm5ldC9zbWMvc21jX2RpYWcuYy05My1cXHRlbHNlIGlmIChzbWNfY29ubl9sZ3JfdmFsaWQoXFx1MDAyNnNtYy1cXHUwMDNlY29ubikgXFx1MDAyNlxcdTAwMjYgc21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlaXNfc21jZClcXG5uZXQvc21jL3NtY19kaWFnLmM6OTQ6XFx0XFx0ci1cXHUwMDNlZGlhZ19tb2RlID0gU01DX0RJQUdfTU9ERV9TTUNEO1xcbm5ldC9zbWMvc21jX2RpYWcuYy05NS1cXHRlbHNlXFxubmV0L3NtYy9zbWNfZGlhZy5jOjk2OlxcdFxcdHItXFx1MDAzZWRpYWdfbW9kZSA9IFNNQ19ESUFHX01PREVfU01DUjtcXG5uZXQvc21jL3NtY19kaWFnLmMtOTctXFx0dXNlcl9ucyA9IHNrX3VzZXJfbnMoTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5zayk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjk4OlxcdGlmIChzbWNfZGlhZ19tc2dfYXR0cnNfZmlsbChzaywgc2tiLCByLCB1c2VyX25zKSlcXG5uZXQvc21jL3NtY19kaWFnLmMtOTktXFx0XFx0Z290byBlcnJvdXQ7XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMTAxLVxcdGZhbGxiYWNrLnJlYXNvbiA9IHNtYy1cXHUwMDNlZmFsbGJhY2tfcnNuO1xcbm5ldC9zbWMvc21jX2RpYWcuYzoxMDI6XFx0ZmFsbGJhY2sucGVlcl9kaWFnbm9zaXMgPSBzbWMtXFx1MDAzZXBlZXJfZGlhZ25vc2lzO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0xMDMtXFx0aWYgKG5sYV9wdXQoc2tiLCBTTUNfRElBR19GQUxMQkFDSywgc2l6ZW9mKGZhbGxiYWNrKSwgXFx1MDAyNmZhbGxiYWNrKSBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMTA1LVxcbm5ldC9zbWMvc21jX2RpYWcuYzoxMDY6XFx0aWYgKChyZXEtXFx1MDAzZWRpYWdfZXh0IFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgKFNNQ19ESUFHX0NPTk5JTkZPIC0gMSkpKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2RpYWcuYy0xMDctXFx0ICAgIHNtYy1cXHUwMDNlY29ubi5hbGVydF90b2tlbl9sb2NhbCkge1xcbm5ldC9zbWMvc21jX2RpYWcuYy0xMDgtXFx0XFx0c3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uID0gXFx1MDAyNnNtYy1cXHUwMDNlY29ubjtcXG5uZXQvc21jL3NtY19kaWFnLmM6MTA5OlxcdFxcdHN0cnVjdCBzbWNfZGlhZ19jb25uaW5mbyBjaW5mbyA9IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMTEwLVxcdFxcdFxcdC50b2tlbiA9IGNvbm4tXFx1MDAzZWFsZXJ0X3Rva2VuX2xvY2FsLFxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTE0Ni1cXHRpZiAoc21jX2Nvbm5fbGdyX3ZhbGlkKFxcdTAwMjZzbWMtXFx1MDAzZWNvbm4pIFxcdTAwMjZcXHUwMDI2ICFzbWMtXFx1MDAzZWNvbm4ubGdyLVxcdTAwM2Vpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9zbWNfZGlhZy5jOjE0NzpcXHQgICAgKHJlcS1cXHUwMDNlZGlhZ19leHQgXFx1MDAyNiAoMSBcXHUwMDNjXFx1MDAzYyAoU01DX0RJQUdfTEdSSU5GTyAtIDEpKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc21jL3NtY19kaWFnLmMtMTQ4LVxcdCAgICAhbGlzdF9lbXB0eShcXHUwMDI2c21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlbGlzdCkpIHtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xNTAtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE1MTpcXHRcXHRzdHJ1Y3Qgc21jX2RpYWdfbGdyaW5mbyBsaW5mbyA9IHtcXG5uZXQvc21jL3NtY19kaWFnLmMtMTUyLVxcdFxcdFxcdC5yb2xlID0gc21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlcm9sZSxcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xNjUtXFx0aWYgKHNtY19jb25uX2xncl92YWxpZChcXHUwMDI2c21jLVxcdTAwM2Vjb25uKSBcXHUwMDI2XFx1MDAyNiBzbWMtXFx1MDAzZWNvbm4ubGdyLVxcdTAwM2Vpc19zbWNkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3NtYy9zbWNfZGlhZy5jOjE2NjpcXHQgICAgKHJlcS1cXHUwMDNlZGlhZ19leHQgXFx1MDAyNiAoMSBcXHUwMDNjXFx1MDAzYyAoU01DX0RJQUdfRE1CSU5GTyAtIDEpKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc21jL3NtY19kaWFnLmMtMTY3LVxcdCAgICAhbGlzdF9lbXB0eShcXHUwMDI2c21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlbGlzdCkgXFx1MDAyNlxcdTAwMjYgc21jLVxcdTAwM2Vjb25uLnJtYl9kZXNjKSB7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTE2OC1cXHRcXHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4gPSBcXHUwMDI2c21jLVxcdTAwM2Vjb25uO1xcbm5ldC9zbWMvc21jX2RpYWcuYzoxNjk6XFx0XFx0c3RydWN0IHNtY2RfZGlhZ19kbWJpbmZvIGRpbmZvO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0xNzAtXFx0XFx0c3RydWN0IHNtY2RfZGV2ICpzbWNkID0gY29ubi1cXHUwMDNlbGdyLVxcdTAwM2VzbWNkO1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTE5NS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MTk2OnN0YXRpYyBpbnQgc21jX2RpYWdfZHVtcF9wcm90byhzdHJ1Y3QgcHJvdG8gKnByb3QsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTE5Ny1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgcF90eXBlKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTgte1xcbm5ldC9zbWMvc21jX2RpYWcuYzoxOTk6XFx0c3RydWN0IHNtY19kaWFnX2R1bXBfY3R4ICpjYl9jdHggPSBzbWNfZHVtcF9jb250ZXh0KGNiKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjAwLVxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTIxNi1cXHRcXHRcXHRnb3RvIG5leHQ7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjIxNzpcXHRcXHRyYyA9IF9fc21jX2RpYWdfZHVtcChzaywgc2tiLCBjYiwgbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKSwgYmMpO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yMTgtXFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMjktXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIzMDpzdGF0aWMgaW50IHNtY19kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzEte1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTIzMy1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjM0OlxcdHJjID0gc21jX2RpYWdfZHVtcF9wcm90byhcXHUwMDI2c21jX3Byb3RvLCBza2IsIGNiLCBTTUNQUk9UT19TTUMpO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzUtXFx0aWYgKCFyYylcXG5uZXQvc21jL3NtY19kaWFnLmM6MjM2OlxcdFxcdHNtY19kaWFnX2R1bXBfcHJvdG8oXFx1MDAyNnNtY19wcm90bzYsIHNrYiwgY2IsIFNNQ1BST1RPX1NNQzYpO1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzctXFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTIzOS1cXG5uZXQvc21jL3NtY19kaWFnLmM6MjQwOnN0YXRpYyBpbnQgc21jX2RpYWdfaGFuZGxlcl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqaClcXG5uZXQvc21jL3NtY19kaWFnLmMtMjQxLXtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yNDctXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZHVtcF9jb250cm9sIGMgPSB7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjI0ODpcXHRcXHRcXHRcXHQuZHVtcCA9IHNtY19kaWFnX2R1bXAsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI0OS1cXHRcXHRcXHRcXHQubWluX2R1bXBfYWxsb2MgPSBTS0JfV0lUSF9PVkVSSEVBRCgzMjc2OCksXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI1MC1cXHRcXHRcXHR9O1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyNTE6XFx0XFx0XFx0cmV0dXJuIG5ldGxpbmtfZHVtcF9zdGFydChuZXQtXFx1MDAzZWRpYWdfbmxzaywgc2tiLCBoLCBcXHUwMDI2Yyk7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI1Mi1cXHRcXHR9XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjU2LVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNTc6c3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrX2RpYWdfaGFuZGxlciBzbWNfZGlhZ19oYW5kbGVyID0ge1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yNTgtXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI1OS1cXHQuZmFtaWx5ID0gQUZfU01DLFxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjA6XFx0LmR1bXAgPSBzbWNfZGlhZ19oYW5kbGVyX2R1bXAsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI2MS19O1xcbm5ldC9zbWMvc21jX2RpYWcuYy0yNjItXFxubmV0L3NtYy9zbWNfZGlhZy5jOjI2MzpzdGF0aWMgaW50IF9faW5pdCBzbWNfZGlhZ19pbml0KHZvaWQpXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI2NC17XFxubmV0L3NtYy9zbWNfZGlhZy5jOjI2NTpcXHRyZXR1cm4gc29ja19kaWFnX3JlZ2lzdGVyKFxcdTAwMjZzbWNfZGlhZ19oYW5kbGVyKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjY2LX1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjY3LVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNjg6c3RhdGljIHZvaWQgX19leGl0IHNtY19kaWFnX2V4aXQodm9pZClcXG5uZXQvc21jL3NtY19kaWFnLmMtMjY5LXtcXG5uZXQvc21jL3NtY19kaWFnLmM6MjcwOlxcdHNvY2tfZGlhZ191bnJlZ2lzdGVyKFxcdTAwMjZzbWNfZGlhZ19oYW5kbGVyKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjcxLX1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjcyLVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyNzM6bW9kdWxlX2luaXQoc21jX2RpYWdfaW5pdCk7XFxubmV0L3NtYy9zbWNfZGlhZy5jOjI3NDptb2R1bGVfZXhpdChzbWNfZGlhZ19leGl0KTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjc1LU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tLVxcbm5ldC9zbWMvc21jX2liLmM9NDU4PWludCBzbWNfaWJfY3JlYXRlX3Byb3RlY3Rpb25fZG9tYWluKHN0cnVjdCBzbWNfbGluayAqbG5rKVxcbi0tXFxubmV0L3NtYy9zbWNfaWIuYy00NjgtXFxubmV0L3NtYy9zbWNfaWIuYzo0Njk6c3RhdGljIGJvb2wgc21jcl9kaWFnX2lzX2Rldl9jcml0aWNhbChzdHJ1Y3Qgc21jX2xncl9saXN0ICpzbWNfbGdyLFxcbm5ldC9zbWMvc21jX2liLmMtNDcwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldilcXG4tLVxcbm5ldC9zbWMvc21jX2liLmM9NTUyPXN0YXRpYyBpbnQgc21jX25sX2hhbmRsZV9zbWNyX2RldihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsXFxuLS1cXG5uZXQvc21jL3NtY19pYi5jLTU3MS1cXHRcXHRnb3RvIGVycm91dDtcXG5uZXQvc21jL3NtY19pYi5jOjU3MjpcXHRpc19jcml0ID0gc21jcl9kaWFnX2lzX2Rldl9jcml0aWNhbChcXHUwMDI2c21jX2xncl9saXN0LCBzbWNpYmRldik7XFxubmV0L3NtYy9zbWNfaWIuYy01NzMtXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBTTUNfTkxBX0RFVl9JU19DUklULCBpc19jcml0KSlcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYz0xMjM9c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvc21jL3NtY19pbmV0LmMtMTI0LXtcXG5uZXQvc21jL3NtY19pbmV0LmM6MTI1OlxcdC8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLVxcdTAwM2VjbGNzb2NrXFxubmV0L3NtYy9zbWNfaW5ldC5jLTEyNi1cXHQgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEwOjE5OjQyLjIxODUxNTIwM1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTg0MDk1OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGFuZCBLTVNBTiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiwgbGlrZWx5IGEgVXNlLUFmdGVyLUZyZWUgb3IgYSBOVUxMIGRlcmVmZXJlbmNlLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgYHNtY19kaWFnYCBjb2RlIGl0ZXJhdGluZyB0aHJvdWdoIGhhc2hlZCBTTUMgc29ja2V0cyBhbmQgYWNjZXNzaW5nIHRoZSBgc21jLVx1MDAzZWNvbm4ubGdyYCBvciBgbG5rYCBwb2ludGVycyB3aGlsZSBgc21jX2Nvbm5fZnJlZSgpYCBpcyBwb3RlbnRpYWxseSB0ZWFyaW5nIHRoZW0gZG93biBjb25jdXJyZW50bHkuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBpbiBjb25jdXJyZW50IHN5c3RlbXMsIGFuZCBpdCdzIGdvb2QgdGhleSBhcmUgYWRkcmVzc2luZyB0aGlzLiBUaGUgc29sdXRpb24gb2YgdW5oYXNoaW5nIHRoZSBzb2NrZXQgKmJlZm9yZSogZnJlZWluZyB0aG9zZSBjcnVjaWFsIHJlZmVyZW5jZXMgaW4gYHNtY19jb25uX2ZyZWUoKWAgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gcHJldmVudCB0aGUgYWNjZXNzIHRvIHN0YWxlIG1lbW9yeS4gSW50cm9kdWNpbmcgdGhlIGBjb25uLVx1MDAzZXVuaGFzaGVkYCBmbGFnIGFuZCB1c2luZyBpdCB0byBwcmV2ZW50IGRvdWJsZS11bmhhc2hpbmcgKG9yIGVuc3VyaW5nIGl0IGhhcHBlbnMgb25seSBvbmNlKSBpcyBhIGNsZWFuIHdheSB0byBtYW5hZ2UgdGhlIHN0YXRlIGNoYW5nZS4gSSB3b3VsZCBleHBlY3QgdGhpcyB0byByZXNvbHZlIHRoZSBvcmlnaW5hbCBpc3N1ZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGFsd2F5cywgXCJEaWQgdGhpcyBmaXggaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzP1wiLiBTcGVjaWZpY2FsbHksIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgbm93PyBJJ20gc2VlaW5nIGEgbmV3IGZpZWxkLCBgdTggdW5oYXNoZWQ7YCwgYWRkZWQgdG8gdGhlIGBzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb25gLiBIb3dldmVyLCB0aGUgbWVtb3J5IGZvciBgc3RydWN0IHNtY19zb2NrYCBpcyBhbGxvY2F0ZWQgdmlhIGBza19hbGxvY2Agd2hpY2ggdXNlcyBga21lbV9jYWNoZV96YWxsb2NgIG9yIGBremFsbG9jYCwgbWVhbmluZyBpdCdzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC4gRnVydGhlciwgYHNtY19jb25uX2NyZWF0ZWAgZXhwbGljaXRseSBpbml0aWFsaXplcyBgY29ubi1cdTAwM2V1bmhhc2hlZCA9IDA7YC4gVGhlIHVzZSBvZiBgc21jX2Nvbm5fdW5oYXNoYCBjaGVja3MgdGhpcyBmbGFnIGJlZm9yZSBvcGVyYXRpbmcuIFRoZXJlIGFyZW4ndCBhbnkgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSwgb3IgZXZlbiB1c2VkIGluIGFueSBicmFuY2hpbmcgbG9naWMuIEFuZCBJIHNlZSBubyBtb2RpZmljYXRpb25zIHRvIHN0cnVjdHMgY29waWVkIHRvIHVzZXJzcGFjZSAobm8gbmV3IHBhZGRpbmcsIG5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIHNlbnQgb3ZlciBuZXRsaW5rIG9yIGlvY3RsKS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYnVmZmVyIGxlbmd0aHMgb3IgYm91bmQgY2hlY2tzLCBlaXRoZXIuIFRoZSBwYXRjaCBzZWVtcyB2ZXJ5IHdlbGwtY29udGFpbmVkIGFuZCBjYXJlZnVsLlxuXG5XaXRoIHRoaXMgaW4gbWluZCwgbGV0J3MgY29uc2lkZXIgS0FTQU4gdnMuIEtNU0FOLiBUaGUgb3JpZ2luYWwgYnVnIHdhcyBhIGNsYXNzaWMgVUFGL3JhY2UsIHdoaWNoIEtBU0FOIHdvdWxkIGJlIGdyZWF0IGF0IGNhdGNoaW5nLiBUaGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIHNob3VsZCBiZSBlbnRpcmVseSBzdWZmaWNpZW50IGZvciB2ZXJpZnlpbmcgdGhpcyBmaXggYW5kIGVuc3VyaW5nIHRoZXJlIGFyZSBubyBuZXcgdnVsbmVyYWJpbGl0aWVzLlxuXG5TbywgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOOiBmYWxzZWAgYW5kIHByb3ZpZGUgY2xlYXIgcmVhc29uaW5nIGFib3V0IHRoZSBVQUYgbmF0dXJlIG9mIHRoZSBvcmlnaW5hbCBwcm9ibGVtIGFuZCB0aGUgbGFjayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4NywiT3V0cHV0VG9rZW5zIjoyMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTA6MTk6NDcuODAyNjE0MjM3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHNvY2tldCB0ZWFyZG93biAoc21jX2Nvbm5fZnJlZSkgYW5kIHNvY2tldCBkaWFnbm9zdGljcyAoc21jX2RpYWcpIGJ5IHVuaGFzaGluZyB0aGUgc29ja2V0IGVhcmxpZXIgYW5kIHRyYWNraW5nIHRoZSB1bmhhc2ggc3RhdGUgdmlhIGEgbmV3IGB1bmhhc2hlZGAgZmxhZyBpbiBgc3RydWN0IHNtY19jb25uZWN0aW9uYC5cXG5cXG4xLiBUaGUgbmV3IGB1bmhhc2hlZGAgZmllbGQgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBzbWNfc29ja2AgdmlhIGBza19hbGxvYygpYCAod2hpY2ggemVyb2VzIG1lbW9yeSkgYW5kIGlzIGV4cGxpY2l0bHkgcmVzZXQgdG8gMCBpbiBgc21jX2Nvbm5fY3JlYXRlKClgLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXFxuMy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBzdHJ1Y3R1cmVzIChzdWNoIGFzIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGlvY3RsIHN0cnVjdHVyZXMpIGhhdmUgaGFkIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgaW50cm9kdWNlZC5cXG40LiBUaGUgcmFjZSBjb25kaXRpb24gYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBmaXhlZCBieSB0aGlzIHBhdGNoIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi9MT0NLREVQLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHNvY2tldCB0ZWFyZG93biAoc21jX2Nvbm5fZnJlZSkgYW5kIHNvY2tldCBkaWFnbm9zdGljcyAoc21jX2RpYWcpIGJ5IHVuaGFzaGluZyB0aGUgc29ja2V0IGVhcmxpZXIgYW5kIHRyYWNraW5nIHRoZSB1bmhhc2ggc3RhdGUgdmlhIGEgbmV3IGB1bmhhc2hlZGAgZmxhZyBpbiBgc3RydWN0IHNtY19jb25uZWN0aW9uYC5cXG5cXG4xLiBUaGUgbmV3IGB1bmhhc2hlZGAgZmllbGQgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBzbWNfc29ja2AgdmlhIGBza19hbGxvYygpYCAod2hpY2ggemVyb2VzIG1lbW9yeSkgYW5kIGlzIGV4cGxpY2l0bHkgcmVzZXQgdG8gMCBpbiBgc21jX2Nvbm5fY3JlYXRlKClgLlxcbjIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXFxuMy4gTm8ga2VybmVsLXRvLXVzZXIgY29weSBzdHJ1Y3R1cmVzIChzdWNoIGFzIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGlvY3RsIHN0cnVjdHVyZXMpIGhhdmUgaGFkIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgaW50cm9kdWNlZC5cXG40LiBUaGUgcmFjZSBjb25kaXRpb24gYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBmaXhlZCBieSB0aGlzIHBhdGNoIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi9MT0NLREVQLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq4fbz[1] Phase: Succeeded StartedAt: 2026-09-08 10:20:11 +0000 UTC FinishedAt: 2026-09-08 10:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 10:20:11 +0000 UTC FinishedAt: 2026-09-08 10:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2] Phase: Succeeded StartedAt: 2026-09-08 10:20:11 +0000 UTC FinishedAt: 2026-09-08 14:05:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 10:20:11 +0000 UTC FinishedAt: 2026-09-08 14:05:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","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-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 10:20:11 +0000 UTC FinishedAt: 2026-09-08 10:20:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 10:20:11 +0000 UTC FinishedAt: 2026-09-08 10:20:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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-workflowq4fbz/series-workflowq4fbz-convert-artifact-3420478741/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 10:20:21 +0000 UTC FinishedAt: 2026-09-08 10:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 10:20:21 +0000 UTC FinishedAt: 2026-09-08 10:39:34 +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:*7527436c-2ad1-4f21-b404-68d989c2afd0,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-workflowq4fbz/series-workflowq4fbz-convert-artifact-3420478741/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": "b2f89443-b147-4e3d-9609-cf59d1fa5721", "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-workflowq4fbz/series-workflowq4fbz-build-action-77641083/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 10:20:21 +0000 UTC FinishedAt: 2026-09-08 10:39:24 +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:*7527436c-2ad1-4f21-b404-68d989c2afd0,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-workflowq4fbz/series-workflowq4fbz-convert-artifact-3420478741/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": "b2f89443-b147-4e3d-9609-cf59d1fa5721", "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-workflowq4fbz/series-workflowq4fbz-build-action-77641083/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 10:39:34 +0000 UTC FinishedAt: 2026-09-08 10:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 10:39:34 +0000 UTC FinishedAt: 2026-09-08 10:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 10:39:34 +0000 UTC FinishedAt: 2026-09-08 10:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 10:39:34 +0000 UTC FinishedAt: 2026-09-08 10:39:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","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-workflowq4fbz/series-workflowq4fbz-convert-artifact-1850970096/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 10:39:44 +0000 UTC FinishedAt: 2026-09-08 10:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 10:39:44 +0000 UTC FinishedAt: 2026-09-08 10:41:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b2f89443-b147-4e3d-9609-cf59d1fa5721,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-workflowq4fbz/series-workflowq4fbz-build-action-77641083/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-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 10:41:51 +0000 UTC FinishedAt: 2026-09-08 10:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 10:41:51 +0000 UTC FinishedAt: 2026-09-08 10:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 10:41:51 +0000 UTC FinishedAt: 2026-09-08 11:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 10:41:51 +0000 UTC FinishedAt: 2026-09-08 11:01:38 +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:*7527436c-2ad1-4f21-b404-68d989c2afd0,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-workflowq4fbz/series-workflowq4fbz-convert-artifact-1850970096/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": "14eec42d-6157-4bba-b1ee-ba47a9f28ddd", "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-workflowq4fbz/series-workflowq4fbz-build-action-4275957996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 10:41:51 +0000 UTC FinishedAt: 2026-09-08 11:01:16 +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:*7527436c-2ad1-4f21-b404-68d989c2afd0,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-workflowq4fbz/series-workflowq4fbz-convert-artifact-1850970096/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": "14eec42d-6157-4bba-b1ee-ba47a9f28ddd", "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-workflowq4fbz/series-workflowq4fbz-build-action-4275957996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 11:01:38 +0000 UTC FinishedAt: 2026-09-08 11:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 11:01:38 +0000 UTC FinishedAt: 2026-09-08 11:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 11:01:38 +0000 UTC FinishedAt: 2026-09-08 11:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 11:01:38 +0000 UTC FinishedAt: 2026-09-08 11:02:59 +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:*14eec42d-6157-4bba-b1ee-ba47a9f28ddd,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-workflowq4fbz/series-workflowq4fbz-build-action-4275957996/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-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 11:03:09 +0000 UTC FinishedAt: 2026-09-08 14:05:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 11:03:09 +0000 UTC FinishedAt: 2026-09-08 14:05:53 +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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"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:*b2f89443-b147-4e3d-9609-cf59d1fa5721,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*14eec42d-6157-4bba-b1ee-ba47a9f28ddd,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-workflowq4fbz/series-workflowq4fbz-build-action-77641083/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-workflowq4fbz/series-workflowq4fbz-build-action-4275957996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 11:03:09 +0000 UTC FinishedAt: 2026-09-08 11:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 11:03:09 +0000 UTC FinishedAt: 2026-09-08 11:03: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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"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-workflowq4fbz/series-workflowq4fbz-convert-artifact-3900131945/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 11:03:09 +0000 UTC FinishedAt: 2026-09-08 11:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 11:03:09 +0000 UTC FinishedAt: 2026-09-08 11:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 11:03:09 +0000 UTC FinishedAt: 2026-09-08 11:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 11:03:30 +0000 UTC FinishedAt: 2026-09-08 14:05:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq4fbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"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":["smc_conn_unhash","smc_conn_free","__smc_release","smc_conn_create","smc_unhash_sk","smc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS","DIBS_LO"],"series_id":"4e9073e7-7741-4d22-8d71-d3d6abda715d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 11:03:30 +0000 UTC FinishedAt: 2026-09-08 14:05:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b2f89443-b147-4e3d-9609-cf59d1fa5721,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*14eec42d-6157-4bba-b1ee-ba47a9f28ddd,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-workflowq4fbz/series-workflowq4fbz-build-action-77641083/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-workflowq4fbz/series-workflowq4fbz-build-action-4275957996/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-workflowq4fbz/series-workflowq4fbz-convert-artifact-3900131945/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,}