Name: series-workflowg2xfv Phase: Succeeded StartedAt: 2026-09-07 14:30:15 +0000 UTC FinishedAt: 2026-09-07 18:39:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[0] Phase: Succeeded StartedAt: 2026-09-07 14:30:15 +0000 UTC FinishedAt: 2026-09-07 14:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 14:30:15 +0000 UTC FinishedAt: 2026-09-07 14:49:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211" ], "series_id": "1826f810-fb1b-4c2b-9727-21a36ecb7b59" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_tx_h_check_offchannel", "invoke_tx_handlers_late", "ieee80211_tx_h_check_assoc", "ieee80211_8023_xmit", "ieee80211_subif_start_xmit", "ieee80211_subif_start_xmit_8023" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCYjMzQ7LAogICAgJiMzNDtpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfODAyM194bWl0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgb2ZmLWNoYW5uZWwgZnJhbWUgZmlsdGVyaW5nIGluIG1hYzgwMjExIGJ5IG1vdmluZyB0aGUgc29mdHdhcmUgc2Nhbm5pbmcgb2ZmLWNoYW5uZWwgZHJvcCBjaGVjayBmcm9tIGVhcmx5IFRYIGhhbmRsaW5nIChpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyBhbmQgaWVlZTgwMjExXzgwMjNfeG1pdCkgaW50byBhIGRlZGljYXRlZCBsYXRlIFRYIGhhbmRsZXIgKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpIGludm9rZWQgaW4gaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKS5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcGFja2V0IGRyb3AgZGVjaXNpb25zIGR1cmluZyBUWCBwcm9jZXNzaW5nIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBza2IgaGVhZGVycyBhbmQgc3RhdGUgYml0bWFwcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3IgYnVmZmVyIGJvdW5kYXJ5IGNhbGN1bGF0aW9ucy4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIGFueSBwYWNrZXQgaGFuZGxpbmcgb3IgbGlmZWN5Y2xlIGlzc3VlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1hYzgwMjExIFRYIHBhdGggYnkgY29uc29saWRhdGluZyBvZmYtY2hhbm5lbCBmcmFtZSBkcm9wcGluZyBkdXJpbmcgc29mdHdhcmUgc2Nhbm5pbmcgaW50byBhIGRlZGljYXRlZCBsYXRlIFRYIGhhbmRsZXIgKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpIGludm9rZWQgdmlhIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCksIHdoaWxlIHJlbW92aW5nIHJlZHVuZGFudCBjaGVja3MgZnJvbSBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYygpIGFuZCBpZWVlODAyMTFfODAyM194bWl0KCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHdpcmVsZXNzIGludGVyZmFjZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YjdjZDViY2M0ODJkZWI4MDJiODkyMjdmYzg0MGZhOWI2OTgxYjAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDo0Nzo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCA5MWIxNDExMmUyNGYwLi4wOGEzOTI3MmYyNmEwIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtMjY5LDcgJiM0MzsyNjksNiBAQCBpZWVlODAyMTFfdHhfaF9keW5hbWljX3BzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4gc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmVcbiBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIHtcbi1cbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtXHUwMDNlc2tiKTtcbiBcdGJvb2wgYXNzb2MgPSBmYWxzZTtcbkBAIC0yNzcsMjAgJiM0MzsyNzYsNiBAQCBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIFx0aWYgKHVubGlrZWx5KGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKVxuIFx0XHRyZXR1cm4gVFhfQ09OVElOVUU7XG4gXG4tXHRpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlc2Nhbm5pbmcpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCBcdTAwMjZ0eC1cdTAwM2VzZGF0YS1cdTAwM2VzdGF0ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFpZWVlODAyMTFfaXNfYW55X251bGxmdW5jKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSlcbi1cdFx0Lypcbi1cdFx0ICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5XG4tXHRcdCAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZVxuLVx0XHQgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZVxuLVx0XHQgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG9cbi1cdFx0ICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW1cbi1cdFx0ICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gVFhfRFJPUDtcbi1cbiBcdGlmICh0eC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9PQ0IpXG4gXHRcdHJldHVybiBUWF9DT05USU5VRTtcbiBcbkBAIC04MDUsNiAmIzQzOzc5MCwzMyBAQCBpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbiBcdHJldHVybiBUWF9DT05USU5VRTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lXG4mIzQzO2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LVx1MDAzZXNrYik7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSlcbiYjNDM7XHRcdHJldHVybiBUWF9DT05USU5VRTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsIFx1MDAyNnR4LVx1MDAzZWxvY2FsLVx1MDAzZXNjYW5uaW5nKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsIFx1MDAyNnR4LVx1MDAzZXNkYXRhLVx1MDAzZXN0YXRlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhaWVlZTgwMjExX2lzX2FueV9udWxsZnVuYyhoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBXaGVuIHNvZnR3YXJlIHNjYW5uaW5nIG9ubHkgbnVsbGZ1bmMgZnJhbWVzICh0byBub3RpZnlcbiYjNDM7XHRcdCAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZVxuJiM0MztcdFx0ICogYWN0aXZlIHNjYW4pIGFyZSBhbGxvd2VkLCBhbGwgb3RoZXIgZnJhbWVzIHNob3VsZCBub3QgYmVcbiYjNDM7XHRcdCAqIHNlbnQgYW5kIHdlIHNob3VsZCBub3QgZ2V0IGhlcmUsIGJ1dCBpZiB3ZSBkb1xuJiM0MztcdFx0ICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW1cbiYjNDM7XHRcdCAqIG9mZi1jaGFubmVsLiBTZWUgX19pZWVlODAyMTFfc3RhcnRfc2NhbigpIGZvciBtb3JlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXR1cm4gVFhfRFJPUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBUWF9DT05USU5VRTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19sZTE2IGllZWU4MDIxMV90eF9uZXh0X3NlcShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZClcbiB7XG4gXHR1MTYgKnNlcSA9IFx1MDAyNnN0YS1cdTAwM2V0aWRfc2VxW3RpZF07XG5AQCAtMTg2NCw2ICYjNDM7MTg3Niw3IEBAIHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbiBcdFx0Z290byB0eGhfZG9uZTtcbiBcdH1cbiBcbiYjNDM7XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTtcbiBcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7XG4gXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZSk7XG4gXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7XG5AQCAtNDY4NiwxMCAmIzQzOzQ2OTksNiBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfODAyM194bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0cXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7XG4gXHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZSk7XG4gXG4tXHRpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgXHUwMDI2bG9jYWwtXHUwMDNlc2Nhbm5pbmcpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCBcdTAwMjZzZGF0YS1cdTAwM2VzdGF0ZSkpXG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXG4gXHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcbiBcdGlmICh1bmxpa2VseSghc2tiKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTQ3NTYsMTEgJiM0Mzs0NzY1LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGllZWU4MDIxMV90cHRfbGVkX3RyaWdfdHgobG9jYWwsIGxlbik7XG4gXG4gXHRpZWVlODAyMTFfdHhfODAyMyhzZGF0YSwgc2tiLCBzdGEsIGZhbHNlKTtcbi1cbi1cdHJldHVybjtcbi1cbi1vdXRfZnJlZTpcbi1cdGtmcmVlX3NrYihza2IpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwmIzM0OywKICAgICYjMzQ7aW52b2tlX3R4X2hhbmRsZXJzX2xhdGUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExXzgwMjNfeG1pdCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbWFjODAyMTEgVFggcGF0aCBieSBjb25zb2xpZGF0aW5nIG9mZi1jaGFubmVsIGZyYW1lIGRyb3BwaW5nIGR1cmluZyBzb2Z0d2FyZSBzY2FubmluZyBpbnRvIGEgZGVkaWNhdGVkIGxhdGUgVFggaGFuZGxlciAoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCkgaW52b2tlZCB2aWEgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKSwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGNoZWNrcyBmcm9tIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKCkgYW5kIGllZWU4MDIxMV84MDIzX3htaXQoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB0cmFuc21pc3Npb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZiN2NkNWJjYzQ4MmRlYjgwMmI4OTIyN2ZjODQwZmE5YjY5ODFiMDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE0OjQ3OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCA5MWIxNDExMmUyNGYwLi4wOGEzOTI3MmYyNmEwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMjY5LDcgJiM0MzsyNjksNiBAQCBpZWVlODAyMTFfdHhfaF9keW5hbWljX3BzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0mZ3Q7c2tiLSZndDtkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtJmd0O3NrYik7CiAJYm9vbCBhc3NvYyA9IGZhbHNlOwpAQCAtMjc3LDIwICYjNDM7Mjc2LDYgQEAgaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIAlpZiAodW5saWtlbHkoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAotCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmYW1wO3R4LSZndDtsb2NhbC0mZ3Q7c2Nhbm5pbmcpKSAmYW1wOyZhbXA7Ci0JICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsICZhbXA7dHgtJmd0O3NkYXRhLSZndDtzdGF0ZSkgJmFtcDsmYW1wOwotCSAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItJmd0O2ZyYW1lX2NvbnRyb2wpICZhbXA7JmFtcDsKLQkgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLSZndDtmcmFtZV9jb250cm9sKSkKLQkJLyoKLQkJICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5Ci0JCSAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZQotCQkgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZQotCQkgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG8KLQkJICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW0KLQkJICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuCi0JCSAqLwotCQlyZXR1cm4gVFhfRFJPUDsKLQogCWlmICh0eC0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX09DQikKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCkBAIC04MDUsNiAmIzQzOzc5MCwzMyBAQCBpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKJiM0MztzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQomIzQzO2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0mZ3Q7c2tiLSZndDtkYXRhOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LSZndDtza2IpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpCiYjNDM7CQlyZXR1cm4gVFhfQ09OVElOVUU7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmYW1wO3R4LSZndDtsb2NhbC0mZ3Q7c2Nhbm5pbmcpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCAmYW1wO3R4LSZndDtzZGF0YS0mZ3Q7c3RhdGUpICZhbXA7JmFtcDsKJiM0MzsJICAgICFpZWVlODAyMTFfaXNfcHJvYmVfcmVxKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLSZndDtmcmFtZV9jb250cm9sKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFdoZW4gc29mdHdhcmUgc2Nhbm5pbmcgb25seSBudWxsZnVuYyBmcmFtZXMgKHRvIG5vdGlmeQomIzQzOwkJICogdGhlIHNsZWVwIHN0YXRlIHRvIHRoZSBBUCkgYW5kIHByb2JlIHJlcXVlc3RzIChmb3IgdGhlCiYjNDM7CQkgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZQomIzQzOwkJICogc2VudCBhbmQgd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvCiYjNDM7CQkgKiBub25ldGhlbGVzcywgZHJvcCB0aGVtIHRvIGF2b2lkIHNlbmRpbmcgdGhlbQomIzQzOwkJICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiBUWF9EUk9QOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBUWF9DT05USU5VRTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19sZTE2IGllZWU4MDIxMV90eF9uZXh0X3NlcShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZCkKIHsKIAl1MTYgKnNlcSA9ICZhbXA7c3RhLSZndDt0aWRfc2VxW3RpZF07CkBAIC0xODY0LDYgJiM0MzsxODc2LDcgQEAgc3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogCQlnb3RvIHR4aF9kb25lOwogCX0KIAomIzQzOwlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTsKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9taWNoYWVsX21pY19hZGQpOwogCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKTsKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7CkBAIC00Njg2LDEwICYjNDM7NDY5OSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7CiAJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWUpOwogCi0JaWYgKHVubGlrZWx5KHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZhbXA7bG9jYWwtJmd0O3NjYW5uaW5nKSkgJmFtcDsmYW1wOwotCSAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCAmYW1wO3NkYXRhLSZndDtzdGF0ZSkpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KIAlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoIXNrYikpCiAJCXJldHVybjsKQEAgLTQ3NTYsMTEgJiM0Mzs0NzY1LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAlpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBsZW4pOwogCiAJaWVlZTgwMjExX3R4XzgwMjMoc2RhdGEsIHNrYiwgc3RhLCBmYWxzZSk7Ci0KLQlyZXR1cm47Ci0KLW91dF9mcmVlOgotCWtmcmVlX3NrYihza2IpOwogfQogCiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoIGFuZCBpdHMgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCByZWxhdGVkIHRvIG9mZi1jaGFubmVsIG9wZXJhdGlvbiB3aXRoaW4gdGhlIGBuZXQvbWFjODAyMTFgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdHJhbnNtaXQgYmVoYXZpb3IuIFRoZSBkaWZmIHBvaW50cyBzcXVhcmVseSBhdCBgbmV0L21hYzgwMjExL3R4LmNgLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgaW4gYW55IDgwMi4xMSBpbXBsZW1lbnRhdGlvbi4KClRoZSBmaXJzdCBjaGFuZ2UgaW4gYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKClgIGp1bXBzIG91dC4gUmVtb3ZpbmcgdGhlIG9mZi1jaGFubmVsIGNoZWNrIGR1cmluZyBzY2FubmluZyBpcyBpbnRlcmVzdGluZy4gSXQgaW1wbGllcyBhIHNoaWZ0IGluIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgb2ZmLWNoYW5uZWwgYWN0aXZpdHkgd2hlbiBhIHN0YXRpb24gaXMgYWN0aXZlbHkgc2Nhbm5pbmcgZm9yIG5ldHdvcmtzLiBUaGVuLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKClgIGFuZCB0aGUgbGF0ZSBpbnZvY2F0aW9uIHdpdGhpbiBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKWAgaXMgY3JpdGljYWwuIFRoaXMgc2lnbmFscyBhIG5ldyB0eCBoYW5kbGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoYW5kbGUgb2ZmLWNoYW5uZWwgc2NlbmFyaW9zIGFuZCBpdCBzdWdnZXN0cyB0aGF0IHRoZSBvZmYtY2hhbm5lbCBoYW5kbGluZyBsb2dpYyBpcyBub3cgYmVpbmcgZGVmZXJyZWQgdG8gdGhlIGxhdGVyIHN0YWdlcyBvZiB0aGUgdHJhbnNtaXQgcHJvY2Vzcy4gVGhpcyBtYXkgaW1wYWN0IHZhcmlvdXMgYXNwZWN0cywgc3VjaCBhcyB0aHJvdWdocHV0LCBsYXRlbmN5LCBvciBldmVuIGZyYW1lIG9yZGVyaW5nLiBJdCB3b3VsZCBiZSBpbXBvcnRhbnQgdG8gc3R1ZHkgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGluIGRldGFpbC4KCkFkZGl0aW9uYWxseSwgdGhlIHJlbW92YWwgb2YgdGhlIHNwZWNpZmljIGNoZWNrIHdpdGhpbiBgaWVlZTgwMjExXzgwMjNfeG1pdCgpYCBpcyB3b3J0aCBub3RpbmcuIFRoaXMgYGdvdG8gb3V0X2ZyZWVgIHN0YXRlbWVudCB3YXMgbGlrZWx5IGEgZmFzdC1wYXRoIG9wdGltaXphdGlvbiBvciBhIHNhZmVndWFyZCB0byBwcmV2ZW50IHRyYW5zbWlzc2lvbiBvbiBvZmYtY2hhbm5lbC4gSXRzIHJlbW92YWwsIGVzcGVjaWFsbHkgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgbmV3IGhhbmRsZXIsIGluZGljYXRlcyBhIHBvdGVudGlhbGx5IG1vcmUgbnVhbmNlZCBhbmQgZmxleGlibGUgYXBwcm9hY2ggdG8gb2ZmLWNoYW5uZWwgdHJhbnNtaXNzaW9uLiBJdCBhbHNvIHN1Z2dlc3RzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNoZWNrIHdhcyBubyBsb25nZXIgbmVlZGVkIGJlY2F1c2UgdGhlIG5ldyBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCgpYCBoYW5kbGVyIGhhcyByZXBsYWNlZCBpdCBvciBpcyB0YWtpbmcgY2FyZSBvZiB0aGUgd29yayBkb25lIGJ5IHRoZSBlYXJsaWVyIGNoZWNrLgoKVGhlIG5leHQgcXVlc3Rpb246IGhvdyB2dWxuZXJhYmxlIGlzIHRoaXMgY29kZSB0byBmdXp6aW5nPyBLbm93aW5nIHRoYXQgYG1hYzgwMjExYCBpcyBoZWF2aWx5IGV4ZXJjaXNlZCBieSBzeXprYWxsZXIgdGhyb3VnaCBgbWFjODAyMTFfaHdzaW1gLCBubDgwMjExLCBhbmQgc3RhbmRhcmQgc29ja2V0IHRyYW5zbWlzc2lvbnMsIEkmIzM5O20gYWxyZWFkeSBpbmNsaW5lZCB0byBiZWxpZXZlIHRoYXQgdGhpcyBjaGFuZ2Ugd2lsbCBiZSBleHBvc2VkIHRvIHNpZ25pZmljYW50IHRlc3RpbmcgcHJlc3N1cmUuIFRoZSBmYWN0IHRoYXQgdGhlc2UgaW50ZXJmYWNlcyBhcmUgcmVhY2hhYmxlIG1lYW5zIGFueSBidWdzIGludHJvZHVjZWQgaGVyZSBoYXZlIGEgZ29vZCBjaGFuY2Ugb2YgYmVpbmcgZm91bmQgcmVsYXRpdmVseSBxdWlja2x5LiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBzdGFydCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBtb3JlIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01BQzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19NQUM4MDIxMSkgJiM0Mzs9IG1hYzgwMjExLm9cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS0zLVxuLS1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZT01PW1hYzgwMjExLXkgOj0gXFxcbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMzktXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NDA6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTEVEUykgJiM0Mzs9IGxlZC5vXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NDE6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgJiM0Mzs9IFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDItXHRkZWJ1Z2ZzLm8gXFxcbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDYtXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NDc6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTUVTSCkgJiM0Mzs9IFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDgtXHRtZXNoLm8gXFxcbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU9NTk9cmM4MDIxMV9taW5zdHJlbC15IDo9IFxcXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlLTYxLVxubmV0L21hYzgwMjExL01ha2VmaWxlOjYyOnJjODAyMTFfbWluc3RyZWwtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgJiM0Mzs9IFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjMtXHRyYzgwMjExX21pbnN0cmVsX2h0X2RlYnVnZnMub1xubmV0L21hYzgwMjExL01ha2VmaWxlLTY0LVxubmV0L21hYzgwMjExL01ha2VmaWxlOjY1Om1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMKSAmIzQzOz0gJChyYzgwMjExX21pbnN0cmVsLXkpXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjYtXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTYxMz1zdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTcxMC1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbm5ldC9tYWM4MDIxMS9jZmcuYzo3MTE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtNzEyLVx0XHRpZiAoc2RhdGEtXHUwMDNldS5tZXNoLnNlY3VyaXR5ICE9IElFRUU4MDIxMV9NRVNIX1NFQ19OT05FKVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz0yMTkwPXN0YXRpYyB2b2lkIHN0YV9hcHBseV9tZXNoX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5My17XG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTk1LVx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTI3ODc9c3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjg5My1cbm5ldC9tYWM4MDIxMS9jZmcuYzoyODk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTI4OTUtc3RhdGljIGludCBpZWVlODAyMTFfYWRkX21wYXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTQ0Mjg9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X2FmdGVyX2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ1MS1cdFx0YnJlYWs7XG5uZXQvbWFjODAyMTEvY2ZnLmM6NDQ1MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy00NDUzLVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz00NTYzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTQ2NTQtXHRcdGJyZWFrO1xubmV0L21hYzgwMjExL2NmZy5jOjQ2NTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY1Ni1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoge1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01OTkxPWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjAxMS1cdC5kdW1wX3N1cnZleSA9IGllZWU4MDIxMV9kdW1wX3N1cnZleSxcbm5ldC9tYWM4MDIxMS9jZmcuYzo2MDEyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTYwMTMtXHQuYWRkX21wYXRoID0gaWVlZTgwMjExX2FkZF9tcGF0aCxcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xMC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjExOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xMi0jZGVmaW5lIE1BQzgwMjExX09DQl9ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMTYtXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNzojaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE4LSNkZWZpbmUgTUFDODAyMTFfSUJTU19ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjItXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMzojaWZkZWYgQ09ORklHX01BQzgwMjExX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNC0jZGVmaW5lIE1BQzgwMjExX1BTX0RFQlVHIDFcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yOC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTMwLSNkZWZpbmUgTUFDODAyMTFfSFRfREVCVUcgMVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTM0LVxubmV0L21hYzgwMjExL2RlYnVnLmg6MzU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NUExfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTM2LSNkZWZpbmUgTUFDODAyMTFfTVBMX0RFQlVHIDFcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC00MC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQyLSNkZWZpbmUgTUFDODAyMTFfTVBBVEhfREVCVUcgMVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQ2LVxubmV0L21hYzgwMjExL2RlYnVnLmg6NDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NSFdNUF9ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmgtNDgtI2RlZmluZSBNQUM4MDIxMV9NSFdNUF9ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNTItXG5uZXQvbWFjODAyMTEvZGVidWcuaDo1MzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmgtNTQtI2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTU4LVxubmV0L21hYzgwMjExL2RlYnVnLmg6NTk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmgtNjAtI2RlZmluZSBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNjQtXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2NTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTY2LSNkZWZpbmUgTUFDODAyMTFfTUVTSF9QU19ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNzAtXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3MTojaWZkZWYgQ09ORklHX01BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTcyLSNkZWZpbmUgTUFDODAyMTFfVERMU19ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNzYtXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3NzojaWZkZWYgQ09ORklHX01BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmgtNzgtI2RlZmluZSBNQUM4MDIxMV9TVEFfREVCVUcgMVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTgyLVxubmV0L21hYzgwMjExL2RlYnVnLmg6ODM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NTE1FX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaC04NC0jZGVmaW5lIE1BQzgwMjExX01MTUVfREVCVUcgMVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTg4LVxubmV0L21hYzgwMjExL2RlYnVnLmg6ODk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTkwLXZvaWQgX19zZGF0YV9pbmZvKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX3ByaW50ZigxLCAyKTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jPTYzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGRlYnVnZnNfc2hvcnRfZm9wcyBzdGF0c18gIyNuYW1lIyMgX29wcyA9IHtcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjM2LVxubmV0L21hYzgwMjExL2RlYnVnZnMuYzo2Mzc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xubmV0L21hYzgwMjExL2RlYnVnZnMuYy02MzgtI2RlZmluZSBERUJVR0ZTX1NUQVRTX0FERChuYW1lKVx0XHRcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM9NjQ5PXZvaWQgZGVidWdmc19od19hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuYy02ODMtXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jOjY4NDojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTY4NS1cdERFQlVHRlNfU1RBVFNfQUREKGRvdDExVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50KTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTYtXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oOjc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTgtdm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgtNC1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oOjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaC02LXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz03MzY9SUVFRTgwMjExX0lGX0xJTktfRklMRShhZGRyLCBjb25mLVx1MDAzZWFkZHIsIE1BQyk7XG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzctXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo3Mzg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzktSUVFRTgwMjExX0lGX0ZJTEUoZXN0YWJfcGxpbmtzLCB1Lm1lc2guZXN0YWJfcGxpbmtzLCBBVE9NSUMpO1xuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTg2OD1zdGF0aWMgdm9pZCBhZGRfaWJzc19maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzItXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo4NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzQtXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9OTM3PXN0YXRpYyB2b2lkIGFkZF9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NDktXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo5NTA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NTEtXHRcdGFkZF9tZXNoX2ZpbGVzKHNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuaC0xMi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oOjEzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgtMTQtdm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW1vdmVfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC02LVxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmg6NzojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oLTgtdm9pZCBpZWVlODAyMTFfc3RhX2RlYnVnZnNfYWRkKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbi0tXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oPTQ3Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC00OTQtXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjQ5NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgtNDk2LXN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfdmlmX2FkZF9kZWJ1Z2ZzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTc3MD1zdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2gge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg1MC1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjg1MTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg1Mi0jZGVmaW5lIElFRUU4MDIxMV9JRlNUQV9NRVNIX0NUUl9JTkMobXNoLCBuYW1lKVx0XFxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0xMDk5PXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMTUxLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTE1MjojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTExNTMtXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2Rpcjtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0xMTU3PXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTEyNDQtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxMjQ1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTI0Ni1cdHN0cnVjdCB7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTM2ND1lbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMzc5LVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTM4MDojaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTEzODEtc3RydWN0IHRwdF9sZWRfdHJpZ2dlciB7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTQ0OD1zdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjI4LVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTYyOTojaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MzAtXHRzdHJ1Y3QgbGVkX3RyaWdnZXIgdHhfbGVkLCByeF9sZWQsIGFzc29jX2xlZCwgcmFkaW9fbGVkO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MzYtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNjM3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MzgtXHQvKiBTTk1QIGNvdW50ZXJzICovXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTY2NC0jZGVmaW5lIEk4MDJfREVCVUdfSU5DKGMpIChjKSYjNDM7JiM0Mztcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE2NjU6I2Vsc2UgLyogQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjY2LSNkZWZpbmUgSTgwMl9ERUJVR19JTkMoYykgZG8geyB9IHdoaWxlICgwKVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTY2NzojZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjY4LVxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2OTUtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNjk2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTY5Ny1cdHN0cnVjdCBsb2NhbF9kZWJ1Z2ZzZGVudHJpZXMge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI5NDI9dTMyIGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjk0NS1cdFx0XHRcdCAgICAgICBpbnQgbGVuLCBib29sIGFtcGR1KTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjI5NDY6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjk0Ny0jZGVmaW5lIGRlYnVnX25vaW5saW5lIG5vaW5saW5lXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9Mjk3OD1pZWVlODAyMTFfdWhyX2NhcF9pZV90b19zdGFfdWhyX2NhcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yOTgzLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6Mjk4NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTUFDODAyMTFfS1VOSVRfVEVTVClcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI5ODUtI2RlZmluZSBFWFBPUlRfU1lNQk9MX0lGX01BQzgwMjExX0tVTklUKHN5bSkgRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzeW0pXG4tLVxubmV0L21hYzgwMjExL2tleS5oPTU5PXN0cnVjdCBpZWVlODAyMTFfa2V5IHtcbi0tXG5uZXQvbWFjODAyMTEva2V5LmgtMTIyLVxubmV0L21hYzgwMjExL2tleS5oOjEyMzojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9rZXkuaC0xMjQtXHRzdHJ1Y3Qge1xuLS1cbm5ldC9tYWM4MDIxMS9sZWQuaD0xMz1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2xlZF9yeChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbm5ldC9tYWM4MDIxMS9sZWQuaC0xNC17XG5uZXQvbWFjODAyMTEvbGVkLmg6MTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvbGVkLmgtMTYtXHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2xlZF9hY3RpdmUpKVxuLS1cbm5ldC9tYWM4MDIxMS9sZWQuaD0yMj1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2xlZF90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbm5ldC9tYWM4MDIxMS9sZWQuaC0yMy17XG5uZXQvbWFjODAyMTEvbGVkLmg6MjQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvbGVkLmgtMjUtXHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZXR4X2xlZF9hY3RpdmUpKVxuLS1cbm5ldC9tYWM4MDIxMS9sZWQuaC0zMC1cbm5ldC9tYWM4MDIxMS9sZWQuaDozMTojaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9sZWQuaC0zMi12b2lkIGllZWU4MDIxMV9sZWRfYXNzb2Moc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2xlZC5oPTcxPWllZWU4MDIxMV90cHRfbGVkX3RyaWdfdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBieXRlcylcbm5ldC9tYWM4MDIxMS9sZWQuaC03Mi17XG5uZXQvbWFjODAyMTEvbGVkLmg6NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvbGVkLmgtNzQtXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNldHB0X2xlZF9hY3RpdmUpKVxuLS1cbm5ldC9tYWM4MDIxMS9sZWQuaD04MD1pZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgYnl0ZXMpXG5uZXQvbWFjODAyMTEvbGVkLmgtODEte1xubmV0L21hYzgwMjExL2xlZC5oOjgyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL2xlZC5oLTgzLVx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZXRwdF9sZWRfYWN0aXZlKSlcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jPTExMzg9aW50IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEzOTMtXG5uZXQvbWFjODAyMTEvbWFpbi5jOjEzOTQ6I2lmbmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL21haW4uYy0xMzk1LVx0LyogbWVzaCBkZXBlbmRzIG9uIEtjb25maWcsIGJ1dCBkcml2ZXJzIHNob3VsZCBzZXQgaXQgaWYgdGhleSB3YW50ICovXG4tLVxubmV0L21hYzgwMjExL21lc2guaD0zNzg9dm9pZCBtZXNoX3BhdGhfcmVmcmVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM4MC1cbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzgxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL21lc2guaC0zODItc3RhdGljIGlubGluZVxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM9ODEyPWludCBpZWVlODAyMTFfbWdtdF90eChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODQxLVx0XHRcdG5lZWRfb2ZmY2hhbiA9IHRydWU7XG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jOjg0MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODQzLVx0XHRmYWxsdGhyb3VnaDtcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5jPTI0PXN0YXRpYyBERUZJTkVfTVVURVgocmF0ZV9jdHJsX211dGV4KTtcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMjUtXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjI2OnN0YXRpYyBjaGFyICppZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvID0gQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ7XG5uZXQvbWFjODAyMTEvcmF0ZS5jLTI3LW1vZHVsZV9wYXJhbShpZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvLCBjaGFycCwgMDY0NCk7XG4tLVxubmV0L21hYzgwMjExL3JhdGUuYz0yMTY9aWVlZTgwMjExX3JhdGVfY29udHJvbF9vcHNfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L21hYzgwMjExL3JhdGUuYy0yMzItXHQvKiBOb3RlOiBjaGVjayBmb3IgXHUwMDNlIDAgaXMgaW50ZW50aW9uYWwgdG8gYXZvaWQgY2xhbmcgd2FybmluZyAqL1xubmV0L21hYzgwMjExL3JhdGUuYzoyMzM6XHRpZiAoIW9wcyBcdTAwMjZcdTAwMjYgKHN0cmxlbihDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVCkgXHUwMDNlIDApKVxubmV0L21hYzgwMjExL3JhdGUuYy0yMzQtXHRcdC8qIHRyeSBidWlsdC1pbiBvbmUgaWYgc3BlY2lmaWMgYWxnIHJlcXVlc3RlZCBidXQgbm90IGZvdW5kICovXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjIzNTpcdFx0b3BzID0gaWVlZTgwMjExX3RyeV9yYXRlX2NvbnRyb2xfb3BzX2dldChDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVCk7XG5uZXQvbWFjODAyMTEvcmF0ZS5jLTIzNi1cbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTI0MS1cbm5ldC9tYWM4MDIxMS9yYXRlLmM6MjQyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL3JhdGUuYy0yNDMtc3RhdGljIHNzaXplX3QgcmNuYW1lX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLFxuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmM9MjgxPXN0YXRpYyB2b2lkIHJhdGVfY29udHJvbF9mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmMtMjg1LVxubmV0L21hYzgwMjExL3JhdGUuYzoyODY6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTI4Ny1cdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShsb2NhbC1cdTAwM2VkZWJ1Z2ZzLnJjZGlyKTtcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5oPTU1PXN0YXRpYyBpbmxpbmUgdm9pZCByYXRlX2NvbnRyb2xfYWRkX3N0YV9kZWJ1Z2ZzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxubmV0L21hYzgwMjExL3JhdGUuaC01Ni17XG5uZXQvbWFjODAyMTEvcmF0ZS5oOjU3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL3JhdGUuaC01OC1cdHN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBzdGEtXHUwMDNlcmF0ZV9jdHJsO1xuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmg9Njc9c3RhdGljIGlubGluZSB2b2lkIHJhdGVfY29udHJvbF9hZGRfZGVidWdmcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbm5ldC9tYWM4MDIxMS9yYXRlLmgtNjgte1xubmV0L21hYzgwMjExL3JhdGUuaDo2OTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9yYXRlLmgtNzAtXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyO1xuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmg9OTQ9dm9pZCByYXRlX2NvbnRyb2xfZGVpbml0aWFsaXplKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5oLTk3LS8qIFJhdGUgY29udHJvbCBhbGdvcml0aG1zICovXG5uZXQvbWFjODAyMTEvcmF0ZS5oOjk4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9yYXRlLmgtOTktaW50IHJjODAyMTFfbWluc3RyZWxfaW5pdCh2b2lkKTtcbi0tXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jPTEwNTk9bWluc3RyZWxfaHRfdXBkYXRlX3N0YXRzKHN0cnVjdCBtaW5zdHJlbF9wcml2ICptcCwgc3RydWN0IG1pbnN0cmVsX2h0X3N0YSAqbWkpXG4tLVxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYy0xMTgxLVxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYzoxMTgyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYy0xMTgzLVx0LyogdXNlIGZpeGVkIGluZGV4IGlmIHNldCAqL1xuLS1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM9MTU5NT1taW5zdHJlbF9odF9nZXRfcmF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSxcbi0tXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jLTE2MDYtXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jOjE2MDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jLTE2MDgtXHRpZiAobXAtXHUwMDNlZml4ZWRfcmF0ZV9pZHggIT0gLTEpXG4tLVxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYz0xOTE1PW1pbnN0cmVsX2h0X2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxuLS1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTk0OC1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM6MTk0OTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTk1MC1zdGF0aWMgdm9pZCBtaW5zdHJlbF9odF9hZGRfZGVidWdmcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqcHJpdixcbi0tXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jPTE5ODM9c3RhdGljIGNvbnN0IHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzIG1hYzgwMjExX21pbnN0cmVsX2h0ID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTk5My1cdC5mcmVlID0gbWluc3RyZWxfaHRfZnJlZSxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM6MTk5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTk5NS1cdC5hZGRfZGVidWdmcyA9IG1pbnN0cmVsX2h0X2FkZF9kZWJ1Z2ZzLFxuLS1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0Lmg9NzU9c3RydWN0IG1pbnN0cmVsX3ByaXYge1xuLS1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmgtODUtXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5oOjg2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuaC04Ny1cdC8qXG4tLVxubmV0L21hYzgwMjExL3J4LmM9MTA1MT1zdGF0aWMgdm9pZCBpZWVlODAyMTFfdmVyaWZ5X2FsaWdubWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxubmV0L21hYzgwMjExL3J4LmMtMTA1Mi17XG5uZXQvbWFjODAyMTEvcnguYzoxMDUzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL3J4LmMtMTA1NC1cdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZylyeC1cdTAwM2Vza2ItXHUwMDNlZGF0YSBcdTAwMjYgMSk7XG4tLVxubmV0L21hYzgwMjExL3J4LmM9Mjc5ND1pZWVlODAyMTFfZGVsaXZlcl9za2Ioc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbi0tXG5uZXQvbWFjODAyMTEvcnguYy0yODkzLVxubmV0L21hYzgwMjExL3J4LmM6Mjg5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9yeC5jLTI4OTUtc3RhdGljIGJvb2xcbi0tXG5uZXQvbWFjODAyMTEvcnguYz0yOTYxPWllZWU4MDIxMV9yeF9tZXNoX2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTI5NjMte1xubmV0L21hYzgwMjExL3J4LmM6Mjk2NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9yeC5jLTI5NjUtXHRzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gXHUwMDI2c2RhdGEtXHUwMDNldS5tZXNoO1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTcyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgc3RhX3JodF9wYXJhbXMgPSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNzctXHQua2V5X2xlbiA9IEVUSF9BTEVOLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6Nzg6XHQubWF4X3NpemUgPSBDT05GSUdfTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkUsXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy03OS19O1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgbGlua19zdGFfcmh0X3BhcmFtcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04Ni1cdC5rZXlfbGVuID0gRVRIX0FMRU4sXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo4NzpcdC5tYXhfc2l6ZSA9IENPTkZJR19NQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTg4LX07XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NDY4PXZvaWQgc3RhX2luZm9fZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHN0YV9pbmZvICpzdGEpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTA2LVx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhzdGEtXHUwMDNlc3RhLnJhdGVzKSk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo1MDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01MDgtXHRrZnJlZShzdGEtXHUwMDNlbWVzaCk7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NjMzPV9fc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY3LVx0d2lwaHlfd29ya19pbml0KFx1MDAyNnN0YS1cdTAwM2VhbXBkdV9tbG1lLndvcmssIGllZWU4MDIxMV9iYV9zZXNzaW9uX3dvcmspO1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NjY4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY5LVx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNzk1LVx0c3RhX2luZm9fZnJlZV9saW5rKFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjc5NjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc5Ny1cdGtmcmVlKHN0YS1cdTAwM2VtZXNoKTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0xMTA3PXN0YXRpYyB2b2lkIF9fc3RhX2luZm9fcmVjYWxjX3RpbShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgYm9vbCBpZ25vcmVfcGVuZGluZylcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMTIxLVx0XHRwcyA9IFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2Vic3MtXHUwMDNlcHM7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxMTIyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTEyMy1cdH0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpKSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjcyOD1zdGF0aWMgaW5saW5lIHU2NCBzdGFfZ2V0X3N0YXRzX2J5dGVzKHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpyeHN0YXRzKVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI3NDAtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyNzQxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjc0Mi1zdGF0aWMgdm9pZCBzdGFfc2V0X21lc2hfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MzAzOD12b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTMyMjMtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMjI0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzIyNS1cdGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goXHUwMDI2c2RhdGEtXHUwMDNldmlmKSlcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD01MjU9c3RydWN0IGxpbmtfc3RhX2luZm8ge1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTU3Ni1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjU3NzojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTU3OC1cdHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyO1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTcxND1zdHJ1Y3Qgc3RhX2luZm8ge1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTczMS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjczMjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTczMy1cdHN0cnVjdCBtZXNoX3N0YSAqbWVzaDtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03NzItXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo3NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03NzQtXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2Rpcjtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD03OTk9c3RhdGljIGlubGluZSBlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUgc3RhX3BsaW5rX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODAwLXtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjgwMTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTgwMi1cdHJldHVybiBzdGEtXHUwMDNlbWVzaC1cdTAwM2VwbGlua19zdGF0ZTtcbi0tXG5uZXQvbWFjODAyMTEvdGVzdHMvLmt1bml0Y29uZmlnPTI9Q09ORklHX0NGRzgwMjExPXlcbm5ldC9tYWM4MDIxMS90ZXN0cy8ua3VuaXRjb25maWc6MzpDT05GSUdfTUFDODAyMTE9eVxubmV0L21hYzgwMjExL3Rlc3RzLy5rdW5pdGNvbmZpZzo0OkNPTkZJR19NQUM4MDIxMV9LVU5JVF9URVNUPXlcbi0tXG5uZXQvbWFjODAyMTEvdGVzdHMvTWFrZWZpbGU9MT1tYWM4MDIxMS10ZXN0cy15ICYjNDM7PSBtb2R1bGUubyB1dGlsLm8gZWxlbXMubyBtZnAubyB0cGUubyBjaGFuLW1vZGUubyBzMWdfdGltLm8gdHRsbS5vXG5uZXQvbWFjODAyMTEvdGVzdHMvTWFrZWZpbGUtMi1cbm5ldC9tYWM4MDIxMS90ZXN0cy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19NQUM4MDIxMV9LVU5JVF9URVNUKSAmIzQzOz0gbWFjODAyMTEtdGVzdHMub1xuLS1cbm5ldC9tYWM4MDIxMS90cmFjZS5jLTEzLVxubmV0L21hYzgwMjExL3RyYWNlLmM6MTQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS90cmFjZS5jLTE1LXZvaWQgX19zZGF0YV9pbmZvKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuLS1cbm5ldC9tYWM4MDIxMS90cmFjZV9tc2cuaC02LVxubmV0L21hYzgwMjExL3RyYWNlX21zZy5oOjc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS90cmFjZV9tc2cuaC04LVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTI3MD1pZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI5MC1cdFx0XHQgICAgIGllZWU4MDIxMV9pc19kYXRhKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSkpIHtcbm5ldC9tYWM4MDIxMS90eC5jOjI5MTojaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUdcbm5ldC9tYWM4MDIxMS90eC5jLTI5Mi1cdFx0XHRzZGF0YV9pbmZvKHR4LVx1MDAzZXNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTE2OTE9c3RhdGljIGJvb2wgaWVlZTgwMjExX3R4X2ZyYWdzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTE3MDQtXG5uZXQvbWFjODAyMTEvdHguYzoxNzA1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL3R4LmMtMTcwNi1cdFx0aWYgKFdBUk5fT05fT05DRShxIFx1MDAzZT0gbG9jYWwtXHUwMDNlaHcucXVldWVzKSkge1xuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTI1MTM9aW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI1MzctXHRcdGJyZWFrO1xubmV0L21hYzgwMjExL3R4LmM6MjUzODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS90eC5jLTI1MzktXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MjY1Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMjY4Mi1cbm5ldC9tYWM4MDIxMS90eC5jOjI2ODM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvdHguYy0yNjg0LVx0aWYgKGxvY2FsLVx1MDAzZWZvcmNlX3R4X3N0YXR1cylcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0yNzU1LVx0XHRicmVhaztcbm5ldC9tYWM4MDIxMS90eC5jOjI3NTY6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvdHguYy0yNzU3LVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI5NDMtXHRcdCAgICAgICFpZWVlODAyMTFfaXNfb3VyX2FkZHIoc2RhdGEsIHNrYi1cdTAwM2VkYXRhICYjNDM7IEVUSF9BTEVOLCBOVUxMKSkpKSB7XG5uZXQvbWFjODAyMTEvdHguYzoyOTQ0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL3R4LmMtMjk0NS1cdFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6IGRyb3BwZWQgZnJhbWUgdG8gJXBNICh1bmF1dGhvcml6ZWQgcG9ydClcXG5cJiMzNDssXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMzAxNy1cbm5ldC9tYWM4MDIxMS90eC5jOjMwMTg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvdHguYy0zMDE5LVx0aWYgKG1lc2hoZHJsZW4gXHUwMDNlIDApXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMzA2NC1cdFx0ICAgIGxpbmtfaWQgIT0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQpIHtcbm5ldC9tYWM4MDIxMS90eC5jOjMwNjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvdHguYy0zMDY2LVx0XHRcdG5ldF9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0OyVzOiBkcm9wcGVkIGZyYW1lIHRvICVwTSB3aXRoIGJhZCBsaW5rIElEIHJlcXVlc3QgKCVkIHZzLiAlZClcXG5cJiMzNDssXG4tLVxubmV0L21hYzgwMjExL3R4LmM9Mzc0Nz12b2lkIF9faWVlZTgwMjExX3htaXRfZmFzdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0zNzkzLVxubmV0L21hYzgwMjExL3R4LmM6Mzc5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS90eC5jLTM3OTUtXHRpZiAobG9jYWwtXHUwMDNlZm9yY2VfdHhfc3RhdHVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODA2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRob3NlIGNvZGUgc2VjdGlvbnM6CgoqKkRpdmluZyBEZWVwIGludG8gbWFjODAyMTEgVFggUGF0aCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgbWFjODAyMTEgdHJhbnNtaXQgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBoYW5kbGVzIHRoZSBjb21wbGV4IGRhbmNlIG9mIGdldHRpbmcgYSBwYWNrZXQgZnJvbSB0aGUgZHJpdmVyIHRvIHRoZSBhaXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBgbmV0L21hYzgwMjExL3R4LmNgLiBNeSBpbml0aWFsIHRhcmdldHMgYXJlIGxpbmVzIDE4NjAtMTkwMCBhbmQgNDY4MC00NzgwLiBUaG9zZSBzZWN0aW9ucyBsaWtlbHkgcmVwcmVzZW50IGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBUWCBwcm9jZXNzIOKAkyBwZXJoYXBzIHJlbGF0ZWQgdG8gcGFja2V0IHNjaGVkdWxpbmcsIHJhdGUgYWRhcHRhdGlvbiwgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLCBvciBtYXliZSBldmVuIHBvd2VyIHNhdmUgaGFuZGxpbmcgb24gdGhlIHRyYW5zbWl0IHNpZGUuIFVuZGVyc3RhbmRpbmcgdGhvc2Ugc3BlY2lmaWMgYXJlYXMgd2lsbCBvZmZlciBnb29kIGNvbnRleHQgZm9yIHRoZSByZXN0IG9mIHRoZSBmaWxlLgoKSSBhbHNvIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBjb25maWd1cmVkLCBzbyBJJiMzOTtsbCBiZSByZWZlcnJpbmcgdG8gdGhlIGBLY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBjaG9zZW4gY29uZmlndXJhdGlvbiwgYW5kIGhvdyB0aGVzZSBzZXR0aW5ncyBpbmZsdWVuY2UgdGhlIGNvZGUgcGF0aHMgaW4gYHR4LmNgIHRoYXQgSSYjMzk7bSBleGFtaW5pbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlc2UgZmVhdHVyZXMgcmVsYXRlIHRvIGRpZmZlcmVudCBoYXJkd2FyZSBwbGF0Zm9ybXMgb3IgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3R4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRcbjE4NjE6XHQvKlxuMTg2MjpcdCAqIExhdGUgaGFuZGxlcnMgY2FuIGJlIGNhbGxlZCB3aGlsZSB0aGUgc3RhIGxvY2sgaXMgaGVsZC4gSGFuZGxlcnMgdGhhdCBjYW5cbjE4NjM6XHQgKiBjYXVzZSBwYWNrZXRzIHRvIGJlIGdlbmVyYXRlZCB3aWxsIGNhdXNlIGRlYWRsb2NrIVxuMTg2NDpcdCAqL1xuMTg2NTpcdHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbjE4NjY6XHR7XG4xODY3Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LVx1MDAzZXNrYik7XG4xODY4Olx0XHRpZWVlODAyMTFfdHhfcmVzdWx0IHJlcyA9IFRYX0NPTlRJTlVFO1xuMTg2OTpcdFxuMTg3MDpcdFx0aWYgKCFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIEhBU19SQVRFX0NPTlRST0wpKVxuMTg3MTpcdFx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwpO1xuMTg3MjpcdFxuMTg3MzpcdFx0aWYgKHVubGlrZWx5KGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9JTlRGTF9SRVRSQU5TTUlTU0lPTikpIHtcbjE4NzQ6XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZ0eC1cdTAwM2Vza2JzLCB0eC1cdTAwM2Vza2IpO1xuMTg3NTpcdFx0XHR0eC1cdTAwM2Vza2IgPSBOVUxMO1xuMTg3NjpcdFx0XHRnb3RvIHR4aF9kb25lO1xuMTg3NzpcdFx0fVxuMTg3ODpcdFxuMTg3OTpcdFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCk7XG4xODgwOlx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9taWNoYWVsX21pY19hZGQpO1xuMTg4MTpcdFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc2VxdWVuY2UpO1xuMTg4MjpcdFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZnJhZ21lbnQpO1xuMTg4MzpcdFx0LyogaGFuZGxlcnMgYWZ0ZXIgZnJhZ21lbnQgbXVzdCBiZSBhd2FyZSBvZiB0eCBpbmZvIGZyYWdtZW50YXRpb24hICovXG4xODg0Olx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zdGF0cyk7XG4xODg1Olx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9lbmNyeXB0KTtcbjE4ODY6XHRcdGlmICghaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNnR4LVx1MDAzZWxvY2FsLVx1MDAzZWh3LCBIQVNfUkFURV9DT05UUk9MKSlcbjE4ODc6XHRcdFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2FsY3VsYXRlX2R1cmF0aW9uKTtcbjE4ODg6XHQjdW5kZWYgQ0FMTF9UWEhcbjE4ODk6XHRcbjE4OTA6XHQgdHhoX2RvbmU6XG4xODkxOlx0XHRpZiAodW5saWtlbHkocmVzID09IFRYX0RST1ApKSB7XG4xODkyOlx0XHRcdHR4LVx1MDAzZXNkYXRhLVx1MDAzZXR4X2hhbmRsZXJzX2Ryb3AmIzQzOyYjNDM7O1xuMTg5MzpcdFx0XHRpZiAodHgtXHUwMDNlc2tiKVxuMTg5NDpcdFx0XHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFx1MDAyNnR4LVx1MDAzZWxvY2FsLVx1MDAzZWh3LCB0eC1cdTAwM2Vza2IpO1xuMTg5NTpcdFx0XHRlbHNlXG4xODk2Olx0XHRcdFx0aWVlZTgwMjExX3B1cmdlX3R4X3F1ZXVlKFx1MDAyNnR4LVx1MDAzZWxvY2FsLVx1MDAzZWh3LCBcdTAwMjZ0eC1cdTAwM2Vza2JzKTtcbjE4OTc6XHRcdFx0cmV0dXJuIC0xO1xuMTg5ODpcdFx0fSBlbHNlIGlmICh1bmxpa2VseShyZXMgPT0gVFhfUVVFVUVEKSkge1xuMTg5OTpcdFx0XHRJODAyX0RFQlVHX0lOQyh0eC1cdTAwM2Vsb2NhbC1cdTAwM2V0eF9oYW5kbGVyc19xdWV1ZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1BQzgwMjExIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIE1BQzgwMjExLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBtYXAgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgd2lyZWxlc3Mgc3RhY2sgYXJlIGNvbmZpZ3VyZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1ha2UsIGRlYnVnZ2luZyBwb3RlbnRpYWwgaXNzdWVzLCBvciBldmVuIHNpbXBseSBmb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3Nlcy4gSSBuZWVkIGEgY2xlYXIgdmlldyBvZiBob3cgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIGhvdyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgbWlnaHQgaW50ZXJhY3QuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBkcml2ZXIgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaC4uLiB0aW1lIHRvIHNlZSB3aGF0IHRob3NlIEtjb25maWcgZmlsZXMgcmV2ZWFsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzE5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCA0MCBsaW5lcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBzdGFjayBhcmUgbGlrZWx5IGRlZmluZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IG1lbnUgZW50cmllcywgZGVmYXVsdCB2YWx1ZXMsIGhlbHAgdGV4dHMsIGFuZCBwb3RlbnRpYWxseSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzLCB0aGUgdG9wLWxldmVsIGNhdGVnb3JpZXMgdW5kZXIgd2hpY2ggbW9yZSBzcGVjaWZpYyB3aXJlbGVzcyBmZWF0dXJlcyBhcmUgZ3JvdXBlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBhbmQgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmFibGUgZWxlbWVudHMgd2l0aGluIHRoZSBkcml2ZXIuIEkgd2lsbCBiZSBsb29raW5nIGZvcjoKCioqbWFjODAyMTEgQ29uZmlndXJhdGlvbiBPdmVydmlldyoqCgpBbHJpZ2h0LCBJJiMzOTttIG5vdyBpbiB0aGUgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNraW0gdGhlIGZpcnN0IDQwIGxpbmVzLiBJbW1lZGlhdGVseSBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuIFdoYXQgYXJlIHRoZSBtYWpvciBzZWN0aW9ucz8gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXMgZGVmaW5lZD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBsaW5lcyB3aWxsIGRlZmluZSB0aGUgY29yZSBtb2R1bGUsIHBlcmhhcHMgaXRzIGRlcGVuZGVuY2llcywgYW5kIGEgZmV3IGhpZ2gtbGV2ZWwgb3B0aW9ucyBsaWtlIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgZW50aXJlIHN1YnN5c3RlbS4gQXJlIHRoZXJlIGFueSBpbml0aWFsIGRlZmF1bHRzIHNldCwgb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IGp1bXBzIG91dD8gVGhpcyBpcyB0aGUgaW5pdGlhbCBzZXR1cDsgdGhlIGZvdW5kYXRpb24gdXBvbiB3aGljaCBtb3JlIHNwZWNpZmljIHNldHRpbmdzIGJ1aWxkLiBJIGFtIGdvaW5nIHRvIHRyeSBhbmQgaWRlbnRpZnkgaG93IHRoaXMgbW9kdWxlIGlzIGVuYWJsZWQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1hYzgwMjExIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1BQzgwMjExXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAgNTpcdFx0c2VsZWN0IENSWVBUT1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ19NQUNTXG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTFcbiAgMTQ6XHRcdCAgbmV0d29ya2luZyBzdGFjay5cbiAgMTU6XHRcbiAgMTY6XHRjb21tZW50IFwmIzM0O0NGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExPW5cbiAgMTg6XHRcbiAgMTk6XHRpZiBNQUM4MDIxMSAhPSBuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xuICAyMjpcdFx0Ym9vbFxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxuICAyNTpcdFx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbiAgMjY6XHRcdHNlbGVjdCBNQUM4MDIxMV9IQVNfUkNcbiAgMjc6XHRcdGRlZmF1bHQgeVxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAmIzM5O21pbnN0cmVsJiMzOTsgVFggcmF0ZSBjb250cm9sIGFsZ29yaXRobVxuICAzMDpcdFxuICAzMTpcdGNob2ljZVxuICAzMjpcdFx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuICAzMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9IQVNfUkNcbiAgMzQ6XHRcdGRlZmF1bHQgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBkZWZhdWx0IHJhdGUgY29udHJvbCBhbGdvcml0aG1cbiAgMzc6XHRcdCAgbWFjODAyMTEgd2lsbCB1c2UuIE5vdGUgdGhhdCB0aGlzIGRlZmF1bHQgY2FuIHN0aWxsIGJlXG4gIDM4Olx0XHQgIG92ZXJyaWRkZW4gdGhyb3VnaCB0aGUgaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyBtb2R1bGVcbiAgMzk6XHRcdCAgcGFyYW1ldGVyIGlmIGRpZmZlcmVudCBhbGdvcml0aG1zIGFyZSBhdmFpbGFibGUuXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTEgVFggUGF0aCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2U6IEl0JiMzOTtzIGEgcmVsb2NhdGlvbiBvZiB0aGUgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgY2hlY2sgd2l0aGluIHRoZSBtYWM4MDIxMSB0cmFuc21pdCBwYXRoLiBQcmV2aW91c2x5LCB0aGlzIGNoZWNrIHdhcyBwZXJmb3JtZWQgaW4gdHdvIHBsYWNlcywgYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKClgIGFuZCBgaWVlZTgwMjExXzgwMjNfeG1pdCgpYCwgdmVyeSBlYXJseSBpbiB0aGUgdHJhbnNtaXQgcHJvY2Vzcy4gVGhlIHBhdGNoIHN0cmF0ZWdpY2FsbHkgaW50cm9kdWNlcyBhIG5ldyB0cmFuc21pdCBoYW5kbGVyLCBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCgpYCwgYW5kIGludGVncmF0ZXMgaXQgbGF0ZXIgaW4gdGhlIHByb2Nlc3MgdmlhIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpYC4gVGhpcyBhbHNvIG1lYW5zIHRoZSBkdXBsaWNhdGUgY2hlY2tzIGluIHRoZSBwcmV2aW91cyB0d28gZnVuY3Rpb25zIGhhdmUgYmVlbiByZW1vdmVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4gVGhlIGFuc3dlciBpcyBhIGNsZWFyIHllcy4gbWFjODAyMTEgaXMgcmVhZGlseSBhY2Nlc3NpYmxlIGZvciB0ZXN0aW5nLCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBtYWM4MDIxMV9od3NpbSwgbmV0bGluay9ubDgwMjExLCBhbmQgbmV0d29yayBzb2NrZXRzIHdpdGggcGFja2V0IGluamVjdGlvbi4gVGhlIG1vZGlmaWNhdGlvbiBkaXJlY3RseSBpbXBhY3RzIGV4ZWN1dGFibGUga2VybmVsIG5ldHdvcmtpbmcgbG9naWMg4oCTIHNwZWNpZmljYWxseSwgdGhlIFRYIHBhdGggaGFuZGxpbmcgZHVyaW5nIHNjYW5uaW5nIGFuZCBvZmYtY2hhbm5lbCB0cmFuc2l0aW9ucy4gTW92aW5nIHRoaXMgY2hlY2sgdG8gYSAmIzM0O2xhdGUmIzM0OyBoYW5kbGVyIGFsdGVycyB0aGUgcGFja2V0IHByb2Nlc3NpbmcgdGltZWxpbmUsIGludHJvZHVjaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEl0IGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIGludHJvZHVjZSBvciByZXZlYWwgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gc2Nhbm5pbmcgb3BlcmF0aW9ucyBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbi4gSXQmIzM5O3MgYWxzbyB3b3J0aCBpbnZlc3RpZ2F0aW5nIGFueSBzaGlmdHMgaW4gc2tiIGxpZmVjeWNsZXMgb3IgcXVldWUgaGFuZGxpbmcgdGhhdCB0aGlzIGNoYW5nZSBtaWdodCBjYXVzZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgIGlzIG5vbi1zdGF0aWMgb3IgaWYgdGhlIGBkZWJ1Z19ub2lubGluZWAgbWFjcm8gY2F1c2VzIGl0IHRvIGJlIGlubGluZWQuIEkgc2VlIHRoYXQgdGhpcyBpcyBjb25kaXRpb25hbC4gYENPTkZJR19NQUM4MDIxMV9OT0lOTElORWAgZGV0ZXJtaW5lcyBpZiBgZGVidWdfbm9pbmxpbmVgIGlzIGRlZmluZWQgYXMgYG5vaW5saW5lYCAod2hpY2ggcHJvZHVjZXMgYSBzeW1ib2wpIG9yIGlzIGFuIGVtcHR5IGRlZmluaXRpb24sIGFuZCB0aGVyZWZvcmUsIGFuIGlubGluZWQgZnVuY3Rpb24uIEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgaWYgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBsb29rIGZvciB0aGlzIHN5bWJvbC4KRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGFuZCBoYW5kbGVycyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYGludm9rZV90eF9oYW5kbGVyc19sYXRlKClgIGFuZCBmcmFtZSB0cmFuc21pc3Npb24uIEkmIzM5O2xsIGhhdmUgdG8gZ3JlcCBmb3IgYGludm9rZV90eF9oYW5kbGVyc19sYXRlYCBhbmQgY2FsbGVyIGZ1bmN0aW9ucyBpbiBgbmV0L21hYzgwMjExL3R4LmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBuZXcgaGFuZGxlciBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz0xODI4PXN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMTg2NC0gKi9cbm5ldC9tYWM4MDIxMS90eC5jOjE4NjU6c3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxubmV0L21hYzgwMjExL3R4LmMtMTg2Ni17XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MTkwNj1zdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTE5MTEtXHRcdHJldHVybiByO1xubmV0L21hYzgwMjExL3R4LmM6MTkxMjpcdHJldHVybiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSh0eCk7XG5uZXQvbWFjODAyMTEvdHguYy0xOTEzLX1cbi0tXG5uZXQvbWFjODAyMTEvdHguYz0xOTU4PXN0YXRpYyBib29sIGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0xOTk1LVxubmV0L21hYzgwMjExL3R4LmM6MTk5NjpcdGlmICghaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoXHUwMDI2dHgpKVxubmV0L21hYzgwMjExL3R4LmMtMTk5Ny1cdFx0cmVzdWx0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsIFx1MDAyNnR4LnNrYnMsIHR4LnN0YSwgdHhwZW5kaW5nKTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz0zODg4PXN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MDE1LVx0fSBlbHNlIHtcbm5ldC9tYWM4MDIxMS90eC5jOjQwMTY6XHRcdGlmIChpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShcdTAwMjZ0eCkpXG5uZXQvbWFjODAyMTEvdHguYy00MDE3LVx0XHRcdGdvdG8gYmVnaW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTExCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gODAyLjExIHRyYW5zbWlzc2lvbjoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIDgwMi4xMSBUcmFuc21pdCBQYXRoKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IGEgc2VxdWVuY2Ugb2YgZnVuY3Rpb25zIHRoYXQgbGlrZWx5IHJlcHJlc2VudCB0aGUgY29yZSBvZiB0aGUgODAyLjExIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGluIHRoaXMgY29kZWJhc2UuIEkgc2VlIGBpZWVlODAyMTFfdHhgLCB3aGljaCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSBmdW5jdGlvbiBmb3IgaW5pdGlhdGluZyBhIHRyYW5zbWlzc2lvbi4gVGhlbiB3ZSBoYXZlIGBpZWVlODAyMTFfdHhfZGVxdWV1ZWAsIHdoaWNoIHRlbGxzIG1lIHRoYXQgdGhpcyBhcmNoaXRlY3R1cmUgbGlrZWx5IHVzZXMgYSBxdWV1ZS1iYXNlZCBzeXN0ZW0gZm9yIG1hbmFnaW5nIG91dGdvaW5nIHBhY2tldHMg4oCTIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gTmV4dCwgYGllZWU4MDIxMV84MDIzX3htaXRgIGlzIGludGVyZXN0aW5nLiBUaGUgJiMzNDs4MDIzJiMzNDsgbmFtaW5nIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uIHByb2Nlc3MsIGNvbnZlcnRpbmcgdGhlIDgwMi4xMSBmcmFtZXMgdG8gYW4gRXRoZXJuZXQgZm9ybWF0LCBwZXJoYXBzIGZvciBhIGJyaWRnZSBvciBhIHdpcmVkIGNvbm5lY3Rpb24gaW4gYSBtaXhlZCBuZXR3b3JrLiBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVgIGhpbnRzIGF0IGEgY2FsbGJhY2sgb3IgYSBwb3N0LXByb2Nlc3Npbmcgc3RhZ2UsIHdoZXJlIHNvbWUgZGVsYXllZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgaXMgY29tcGxldGVkLiBUaGlzIGNvdWxkIGJlIHRoaW5ncyBsaWtlIHVwZGF0aW5nIHN0YXRpc3RpY3MsIG1hbmFnaW5nIHJldHJpZXMsIG9yIGZyZWVpbmcgYnVmZmVycy4gRmluYWxseSwgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgIGlzIGltbWVkaWF0ZWx5IGludHJpZ3VpbmcuIFRoZSAmIzM0O29mZmNoYW5uZWwmIzM0OyBwYXJ0IGltcGxpZXMgc29tZSBmb3JtIG9mIGNoYW5uZWwgc2Nhbm5pbmcgb3IgY29udHJvbCwgd2hpY2ggc3VnZ2VzdHMgdGhlIHBvc3NpYmlsaXR5IG9mIGhhbmRsaW5nIHRyYW5zbWlzc2lvbiBvbiBub24tcHJpbWFyeSBjaGFubmVscywgbWF5YmUgZm9yIGZlYXR1cmVzIGxpa2UgREZTIChEeW5hbWljIEZyZXF1ZW5jeSBTZWxlY3Rpb24pLCBvciBjaGFubmVsIGhvcHBpbmcgaW4gc29tZSBjaXJjdW1zdGFuY2VzLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgaWVlZTgwMjExXzgwMjNfeG1pdGAsIEkgc2hvdWxkIGludmVzdGlnYXRlIGl0cyBjYWxsZXJzLiBVbmRlcnN0YW5kaW5nIHdoYXQgKmNhbGxzKiB0aGF0IGZ1bmN0aW9uIHdpbGwgaWxsdW1pbmF0ZSBob3cgYW5kIHdoZXJlIHRoZSBFdGhlcm5ldC1yZWxhdGVkIGVuY2Fwc3VsYXRpb24gaGFwcGVucyBpbiB0aGUgb3ZlcmFsbCB0cmFuc21pc3Npb24gZmxvdy4gVGhpcyB3aWxsIGxpa2VseSBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQgb24gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgZnJhbWUgdHlwZXMgYW5kIG5ldHdvcmsgaW50ZXJmYWNlcy4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfODAyM194bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS90eC5jPTQ2Njc9c3RhdGljIGJvb2wgaWVlZTgwMjExX3R4XzgwMjMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDY4Ni1cbm5ldC9tYWM4MDIxMS90eC5jOjQ2ODc6c3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS90eC5jLTQ2ODgtXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00NzkwPXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ4MzUtXHRza19wYWNpbmdfc2hpZnRfdXBkYXRlKHNrYi1cdTAwM2Vzaywgc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcudHhfc2tfcGFjaW5nX3NoaWZ0KTtcbm5ldC9tYWM4MDIxMS90eC5jOjQ4MzY6XHRpZWVlODAyMTFfODAyM194bWl0KHNkYXRhLCBkZXYsIHN0YSwga2V5LCBza2IpO1xubmV0L21hYzgwMjExL3R4LmMtNDgzNy1cdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIHRoZSA4MDIuMyBUcmFuc21pc3Npb24gUGF0aCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gc3BlY2lmaWNhbGx5IHNjcnV0aW5pemUgdGhlIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjNgIGZ1bmN0aW9uIGFuZCBpdHMgY291bnRlcnBhcnQsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzYC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUsIGVzcGVjaWFsbHkgYXJvdW5kIDgwMi4zIGZyYW1lcywgd2hpY2ggaXMgb2Z0ZW4gYSBzb3VyY2Ugb2YgY29udGVudGlvbi4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIG5vdCBqdXN0IHRoZXNlIHR3byBmdW5jdGlvbnMgdGhlbXNlbHZlcywgYnV0IGFsc28gd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgY2FsbGVkIGZyb20uIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgb3IgY29kZSBwYXRocyB0cmlnZ2VyaW5nIHRoZXNlIGZ1bmN0aW9ucz8gQXJlIHRoZXJlIHBhcnRpY3VsYXIgY2FsbGVycyBvciBjb250ZXh0cyB0aGF0IHNlZW0gdG8gYmUgZXhoaWJpdGluZyBwZXJmb3JtYW5jZSBpc3N1ZXMsIG9yIGF0IGxlYXN0IHRoYXQgd2FycmFudCBjbG9zZXIgaW5zcGVjdGlvbj8gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBhY3Rpb25hYmxlIGluc2lnaHQgaXMgbGlrZWx5IHRvIGxpZS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBhbmQgZGF0YSBmbG93IGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMgaXMgY3J1Y2lhbCB0byBpZGVudGlmeWluZyBhbnkgYm90dGxlbmVja3MuIEnigJlsbCBzdGFydCB0cmFjaW5nIGFuZCBwcm9maWxpbmcgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N1YmlmX3N0YXJ0X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjIyOD1uZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjI5LVx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjMwOm5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjMxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjIzMjpuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjMzLVx0XHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjM0OnZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIzNS1cdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05NDQtXHQubmRvX3VuaW5pdFx0XHQ9IGllZWU4MDIxMV91bmluaXQsXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5NDU6XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0Ni1cdC5uZG9fc2V0X3J4X21vZGVcdD0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCxcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl84MDIzX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDUwLVx0Lm5kb191bmluaXRcdFx0PSBpZWVlODAyMTFfdW5pbml0LFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTA1MTpcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDUyLVx0Lm5kb19zZXRfcnhfbW9kZVx0PSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0LFxuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYz01Mzc9c3RhdGljIHZvaWQgaWVlZTgwMjExX3RkbHNfdGRfdHhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01NjYtXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6NTY3Olx0XHRcdGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHRlYXJkb3duX3NrYiwgc2tiLVx1MDAzZWRldik7XG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtNTY4LVx0XHR9XG4tLVxubmV0L21hYzgwMjExL3RkbHMuYz05OTc9aWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS90ZGxzLmMtMTEyMi1cdGxvY2FsX2JoX2Rpc2FibGUoKTtcbm5ldC9tYWM4MDIxMS90ZGxzLmM6MTEyMzpcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIGZsYWdzLFxubmV0L21hYzgwMjExL3RkbHMuYy0xMTI0LVx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsIE5VTEwpO1xuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTQzNTI9RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KTtcbm5ldC9tYWM4MDIxMS90eC5jLTQzNTMtXG5uZXQvbWFjODAyMTEvdHguYzo0MzU0OnZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21hYzgwMjExL3R4LmMtNDM1NS1cdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00NTQyPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4X29uZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00NTUyLVx0Y3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xubmV0L21hYzgwMjExL3R4LmM6NDU1MzpcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQob3V0LCBzZGF0YS1cdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIE5VTEwpO1xubmV0L21hYzgwMjExL3R4LmMtNDU1NC19XG4tLVxubmV0L21hYzgwMjExL3R4LmM9NDU1Nj1zdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ1NjctXG5uZXQvbWFjODAyMTEvdHguYzo0NTY4Olx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2RhdGEtXHUwMDNlZGV2LCAwLCBjdHJsX2ZsYWdzLFxubmV0L21hYzgwMjExL3R4LmMtNDU2OS1cdFx0XHRcdFx0ICAgICBOVUxMKTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00NTgwLS8qKlxubmV0L21hYzgwMjExL3R4LmM6NDU4MTogKiBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCAtIG5ldGlmIHN0YXJ0X3htaXQgZnVuY3Rpb24gZm9yIDgwMi4zIHZpZnNcbm5ldC9tYWM4MDIxMS90eC5jLTQ1ODItICogQHNrYjogcGFja2V0IHRvIGJlIHNlbnRcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00NTg4LSAqL1xubmV0L21hYzgwMjExL3R4LmM6NDU4OTpuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21hYzgwMjExL3R4LmMtNDU5MC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ2MDgtXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKVxubmV0L21hYzgwMjExL3R4LmM6NDYwOTpcdFx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxubmV0L21hYzgwMjExL3R4LmMtNDYxMC1cdFx0XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00NjE5LW5vcm1hbDpcbm5ldC9tYWM4MDIxMS90eC5jOjQ2MjA6XHRcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsXG5uZXQvbWFjODAyMTEvdHguYy00NjIxLVx0XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00Njg3PXN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDcxNC1cdFx0XHQvKiBmYWxsIGJhY2sgdG8gbm9uLW9mZmxvYWQgc2xvdyBwYXRoICovXG5uZXQvbWFjODAyMTEvdHguYzo0NzE1Olx0XHRcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsXG5uZXQvbWFjODAyMTEvdHguYy00NzE2LVx0XHRcdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTQ3NzA9c3RhdGljIGJvb2wgaWVlZTgwMjExX2NoZWNrX21jYXN0X29mZmxvYWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDc4OS1cbm5ldC9tYWM4MDIxMS90eC5jOjQ3OTA6c3RhdGljIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbWFjODAyMTEvdHguYy00NzkxLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ4Mzktc2tpcF9vZmZsb2FkOlxubmV0L21hYzgwMjExL3R4LmM6NDg0MDpcdGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2KTtcbm5ldC9tYWM4MDIxMS90eC5jLTQ4NDEtb3V0OlxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ4NDQtXG5uZXQvbWFjODAyMTEvdHguYzo0ODQ1Om5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9tYWM4MDIxMS90eC5jLTQ4NDYtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ4NjItXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKVxubmV0L21hYzgwMjExL3R4LmM6NDg2MzpcdFx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc2tiLCBkZXYpO1xubmV0L21hYzgwMjExL3R4LmMtNDg2NC1cdH0gZWxzZSB7XG5uZXQvbWFjODAyMTEvdHguYzo0ODY1Olx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc2tiLCBkZXYpO1xubmV0L21hYzgwMjExL3R4LmMtNDg2Ni1cdH1cbi0tXG5uZXQvbWFjODAyMTEvdHguYz02NTAzPWludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNjYxMC1cdGxvY2FsX2JoX2Rpc2FibGUoKTtcbm5ldC9tYWM4MDIxMS90eC5jOjY2MTE6XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2tiLVx1MDAzZWRldiwgZmxhZ3MsIGN0cmxfZmxhZ3MsIGNvb2tpZSk7XG5uZXQvbWFjODAyMTEvdHguYy02NjEyLVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9NjYxNz1pbnQgaWVlZTgwMjExX3Byb2JlX21lc2hfbGluayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTY2MzgtXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG5uZXQvbWFjODAyMTEvdHguYzo2NjM5Olx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNrYi1cdTAwM2VkZXYsIDAsXG5uZXQvbWFjODAyMTEvdHguYy02NjQwLVx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwOTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIDgwMi4xMSBUWCBQYXRoIFN5bWJvbHMgYW5kIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGUgODAyLjExIHRyYW5zbWl0IHBhdGguIEkmIzM5O3ZlIGdvdCBhIGxpc3QgaGVyZTogYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgLCBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVgLCBgaWVlZTgwMjExXzgwMjNfeG1pdGAsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAsIGFuZCBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyM2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYW5kIGhhbmRsZXJzIEkgbmVlZCB0byB0cmFjZS4KCk5vdywgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGBDT05GSUdfTUFDODAyMTFgLiBSaWdodCwgYENPTkZJR19NQUM4MDIxMWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX0NGRzgwMjExYCwgd2hpY2ggaXMgdG8gYmUgZXhwZWN0ZWQuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBub3RoaW5nIGVsc2UgaXMgcmVxdWlyZWQsIHRob3VnaCwganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBub24tb2J2aW91cywgb3Igc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBrZXJuZWwgdmVyc2lvbi4gU28gSSYjMzk7bGwgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyBpbiBib3RoIGBuZXQvbWFjODAyMTEvYCBhbmQgYG5ldC93aXJlbGVzcy9gIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSB0aGVyZSBhcmUgbm8gaGlkZGVuIHJlcXVpcmVtZW50cy4gR29vZCwgZ29vZC4gV2l0aCB0aGlzIGluaXRpYWwgZnJhbWV3b3JrLCBJIHNob3VsZCBiZSBhYmxlIHRvIG5hdmlnYXRlIHRoZSBjb2RlIG1vcmUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTcwOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0aGUgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDEgdGhyb3VnaCAzMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSB0b3AtbGV2ZWwgZGVmaW5pdGlvbnMgYW5kIHBlcmhhcHMgdGhlIG1haW4gbWVudSBlbnRyaWVzIGFyZSBsb2NhdGVkLiBJJiMzOTtsbCBiZXQgaXQmIzM5O3MgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZS4gSSBleHBlY3QgdG8gZ2V0IGEgZmVlbCBmb3IgaG93IHZhcmlvdXMgd2lyZWxlc3MgdGVjaG5vbG9naWVzIG9yIGZlYXR1cmVzIGFyZSBpbml0aWFsbHkgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCBoZWxwaW5nIG1lIG5hdmlnYXRlIHRoZSBtb3JlIHNwZWNpZmljLCBkZXRhaWxlZCBjb25maWd1cmF0aW9ucyBsYXRlciBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXSVJFTEVTU19FWFRcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgV0VYVF9DT1JFXG4gICA2Olx0XHRkZWZfYm9vbCB5XG4gICA3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIFdFWFRfUFJPQ1xuICAxMDpcdFx0ZGVmX2Jvb2wgeVxuICAxMTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBXRVhUX1BSSVZcbiAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzk3CgkJCQkJCQlvdXRwdXQ6IDI4MgoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEV2YWx1YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBjb2RlLiBMZXQgbWUgc2VlLi4uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGFuZCBwb3NzaWJseSBgTkw4MDIxMWAgb3IgZXZlbiBgTUFDODAyMTFfSFdTSU1gPyBXYWl0IGEgbWludXRlLCBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgIGFyZSAqdGhlKiBkaXJlY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBjb21waWxpbmcgdGhpcyBwYXJ0aWN1bGFyIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBNQUM4MDIxMV9IV1NJTWAgaXMgYSByZWxldmFudCBkcml2ZXIgb3B0aW9uLCBvciBpZiBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgIGFsb25lIGFyZSBnb29kIGVub3VnaC4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcsIGFoIHllcywgYENPTkZJR19NQUM4MDIxMWAgKmRlcGVuZHMqIG9uIGBDT05GSUdfQ0ZHODAyMTFgLiBSaWdodCwgc28gYE1BQzgwMjExYCBhbmQgYENGRzgwMjExYCBpdCBpcy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGltcG9ydGFudCBpbiBteSBhc3Nlc3NtZW50LiBMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2s6CgoxLiAgSXMgdGhpcyBwYXRjaCBldmVuIG1vZGlmeWluZyByZWFjaGFibGUgY29kZT8gWXVwLCBpdCYjMzk7cyBtZXNzaW5nIHdpdGggdGhlIHRyYW5zbWl0IHBhdGggaW4gYG1hYzgwMjExYCwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIG9mZi1jaGFubmVsIGZyYW1lIGZpbHRlcmluZyBkdXJpbmcgc2Nhbm5pbmcuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWxldmFudC4KMi4gIElzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBZZWFoLCBhYnNvbHV0ZWx5LiBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4KMy4gIFJpZ2h0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgLiBKdXN0IHRvIGNvbmZpcm0uCjQuICBBbmQgZmluYWxseSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZToKICAgICogICBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbGAKICAgICogICBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVgCiAgICAqICAgYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jYAogICAgKiAgIGBpZWVlODAyMTFfODAyM194bWl0YAogICAgKiAgIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAKICAgICogICBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyM2AKCk9rYXksIHRoYXQgc2VlbXMgbGlrZSBhIGNvbXByZWhlbnNpdmUgbGlzdC4gSSYjMzk7bSBjb25maWRlbnQgd2l0aCB0aGlzLCBzbyBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsJiMzNDssCiAgICAmIzM0O2ludm9rZV90eF9oYW5kbGVyc19sYXRlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV84MDIzX3htaXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1hYzgwMjExIFRYIHBhdGggYnkgY29uc29saWRhdGluZyBvZmYtY2hhbm5lbCBmcmFtZSBkcm9wcGluZyBkdXJpbmcgc29mdHdhcmUgc2Nhbm5pbmcgaW50byBhIGRlZGljYXRlZCBsYXRlIFRYIGhhbmRsZXIgKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpIGludm9rZWQgdmlhIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCksIHdoaWxlIHJlbW92aW5nIHJlZHVuZGFudCBjaGVja3MgZnJvbSBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYygpIGFuZCBpZWVlODAyMTFfODAyM194bWl0KCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHdpcmVsZXNzIGludGVyZmFjZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCYjMzQ7LAogICAgJiMzNDtpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfODAyM194bWl0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtYWM4MDIxMSBUWCBwYXRoIGJ5IGNvbnNvbGlkYXRpbmcgb2ZmLWNoYW5uZWwgZnJhbWUgZHJvcHBpbmcgZHVyaW5nIHNvZnR3YXJlIHNjYW5uaW5nIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIHZpYSBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpLCB3aGlsZSByZW1vdmluZyByZWR1bmRhbnQgY2hlY2tzIGZyb20gaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MoKSBhbmQgaWVlZTgwMjExXzgwMjNfeG1pdCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCB3aXJlbGVzcyBpbnRlcmZhY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKSwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG9mZi1jaGFubmVsIGZyYW1lIGZpbHRlcmluZyBpbiBtYWM4MDIxMSBieSBtb3ZpbmcgdGhlIHNvZnR3YXJlIHNjYW5uaW5nIG9mZi1jaGFubmVsIGRyb3AgY2hlY2sgZnJvbSBlYXJseSBUWCBoYW5kbGluZyAoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MgYW5kIGllZWU4MDIxMV84MDIzX3htaXQpIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIGluIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCkuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHBhY2tldCBkcm9wIGRlY2lzaW9ucyBkdXJpbmcgVFggcHJvY2Vzc2luZyBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgc2tiIGhlYWRlcnMgYW5kIHN0YXRlIGJpdG1hcHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIG9yIGJ1ZmZlciBib3VuZGFyeSBjYWxjdWxhdGlvbnMuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjb3ZlciBhbnkgcGFja2V0IGhhbmRsaW5nIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZiN2NkNWJjYzQ4MmRlYjgwMmI4OTIyN2ZjODQwZmE5YjY5ODFiMDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE0OjQ3OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCA5MWIxNDExMmUyNGYwLi4wOGEzOTI3MmYyNmEwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMjY5LDcgJiM0MzsyNjksNiBAQCBpZWVlODAyMTFfdHhfaF9keW5hbWljX3BzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0mZ3Q7c2tiLSZndDtkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtJmd0O3NrYik7CiAJYm9vbCBhc3NvYyA9IGZhbHNlOwpAQCAtMjc3LDIwICYjNDM7Mjc2LDYgQEAgaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIAlpZiAodW5saWtlbHkoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAotCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmYW1wO3R4LSZndDtsb2NhbC0mZ3Q7c2Nhbm5pbmcpKSAmYW1wOyZhbXA7Ci0JICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsICZhbXA7dHgtJmd0O3NkYXRhLSZndDtzdGF0ZSkgJmFtcDsmYW1wOwotCSAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItJmd0O2ZyYW1lX2NvbnRyb2wpICZhbXA7JmFtcDsKLQkgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLSZndDtmcmFtZV9jb250cm9sKSkKLQkJLyoKLQkJICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5Ci0JCSAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZQotCQkgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZQotCQkgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG8KLQkJICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW0KLQkJICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuCi0JCSAqLwotCQlyZXR1cm4gVFhfRFJPUDsKLQogCWlmICh0eC0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX09DQikKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCkBAIC04MDUsNiAmIzQzOzc5MCwzMyBAQCBpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKJiM0MztzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQomIzQzO2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0mZ3Q7c2tiLSZndDtkYXRhOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LSZndDtza2IpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpCiYjNDM7CQlyZXR1cm4gVFhfQ09OVElOVUU7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmYW1wO3R4LSZndDtsb2NhbC0mZ3Q7c2Nhbm5pbmcpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCAmYW1wO3R4LSZndDtzZGF0YS0mZ3Q7c3RhdGUpICZhbXA7JmFtcDsKJiM0MzsJICAgICFpZWVlODAyMTFfaXNfcHJvYmVfcmVxKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLSZndDtmcmFtZV9jb250cm9sKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFdoZW4gc29mdHdhcmUgc2Nhbm5pbmcgb25seSBudWxsZnVuYyBmcmFtZXMgKHRvIG5vdGlmeQomIzQzOwkJICogdGhlIHNsZWVwIHN0YXRlIHRvIHRoZSBBUCkgYW5kIHByb2JlIHJlcXVlc3RzIChmb3IgdGhlCiYjNDM7CQkgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZQomIzQzOwkJICogc2VudCBhbmQgd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvCiYjNDM7CQkgKiBub25ldGhlbGVzcywgZHJvcCB0aGVtIHRvIGF2b2lkIHNlbmRpbmcgdGhlbQomIzQzOwkJICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiBUWF9EUk9QOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBUWF9DT05USU5VRTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19sZTE2IGllZWU4MDIxMV90eF9uZXh0X3NlcShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZCkKIHsKIAl1MTYgKnNlcSA9ICZhbXA7c3RhLSZndDt0aWRfc2VxW3RpZF07CkBAIC0xODY0LDYgJiM0MzsxODc2LDcgQEAgc3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogCQlnb3RvIHR4aF9kb25lOwogCX0KIAomIzQzOwlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTsKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9taWNoYWVsX21pY19hZGQpOwogCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKTsKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7CkBAIC00Njg2LDEwICYjNDM7NDY5OSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7CiAJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWUpOwogCi0JaWYgKHVubGlrZWx5KHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZhbXA7bG9jYWwtJmd0O3NjYW5uaW5nKSkgJmFtcDsmYW1wOwotCSAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCAmYW1wO3NkYXRhLSZndDtzdGF0ZSkpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KIAlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoIXNrYikpCiAJCXJldHVybjsKQEAgLTQ3NTYsMTEgJiM0Mzs0NzY1LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAlpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBsZW4pOwogCiAJaWVlZTgwMjExX3R4XzgwMjMoc2RhdGEsIHNrYiwgc3RhLCBmYWxzZSk7Ci0KLQlyZXR1cm47Ci0KLW91dF9mcmVlOgotCWtmcmVlX3NrYihza2IpOwogfQogCiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIGluIGEgV2lyZWxlc3MgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIGNoYW5nZXMgdG91Y2hpbmcgbmV0d29ya2luZyBjb2RlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNvbXBsZXggcGFja2V0IHByb2Nlc3NpbmcuCgpGaXJzdCwgSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgbmV0L21hYzgwMjExL3R4LmNgLiBUaGUgY29yZSBzZWVtcyB0byBiZSBhYm91dCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIG9mZi1jaGFubmVsIHNjYW5uaW5nIHdpdGhpbiB0aGUgdHJhbnNtaXNzaW9uIHBhdGguIFNwZWNpZmljYWxseToKCjEuICBUaGUgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgY2hlY2sgaW4gYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jYCBoYXMgYmVlbiAqcmVtb3ZlZCouIFRoaXMgaXMgY29uY2VybmluZywgYmVjYXVzZSBpdCYjMzk7cyBiZWVuIG1vdmVkLiBBbnl0aW1lIGEgY2hlY2sgaXMgcmVtb3ZlZCwgSSBuZWVkIHRvIGtub3cgd2h5LiBBcmUgd2UgbG9zaW5nIGEgY2hlY2s/IElzIHRoZSBmdW5jdGlvbmFsaXR5IHN0aWxsIHByZXNlbnQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlLgoyLiAgQSBuZXcgaGFuZGxlciwgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgLCBoYXMgYmVlbiAqY3JlYXRlZCogYW5kIGlzIGJlaW5nIGNhbGxlZCBsYXRlciBpbiB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgdmlhIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgYSByZWZhY3RvcmluZywgYnV0IGEgcmVmYWN0b3JpbmcgdGhhdCAqY291bGQqIGludHJvZHVjZSBzdWJ0bGUgdGltaW5nIGRpZmZlcmVuY2VzIG9yIGNvZGUgcGF0aCBjaGFuZ2VzLgozLiAgVGhlIGVhcmx5IGNoZWNrIGluIGBpZWVlODAyMTFfODAyM194bWl0YCByZWdhcmRpbmcgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgaGFzIGFsc28gYmVlbiAqcmVtb3ZlZCouIFRoaXMgbWlycm9ycyB0aGUgY2hhbmdlIGluIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgc28gaXQmIzM5O3MgYSByZWxhdGVkIGNvZGUgcGF0aC4KClNvLCBpdCBsb29rcyBsaWtlIHRoZSBndWFyZCBpcyBzdGlsbCBpbiBwbGFjZSwgaXQgaGFzIGJlZW4gbW92ZWQgdG8gYSBsYXRlIHN0YWdlIGhhbmRsZXIsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZG9uZSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHN0aWxsIGd1YXJkaW5nIHRoZSBjb2RlIHBhdGhzIGFwcHJvcHJpYXRlbHkuCgpOb3csIEkgbmVlZCB0byBrbm93IHRoZSAqd2h5Ki4gV2FzIHRoaXMgcHVyZWx5IGZvciBjb2RlIGNsYXJpdHk/IFBlcmZvcm1hbmNlPyBPciBpcyB0aGVyZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGx1cmtpbmcgaGVyZT8gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gc2VhcmNoIGZvciBtb3JlIGNvbnRleHQgb24gdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZXhwbGFuYXRpb25zIGZvciB0aGUgb3JpZ2luYWwgZGVjaXNpb24gdG8gbW92ZSB0aGUgZnVuY3Rpb24uIEkmIzM5O2xsIGxvb2sgZm9yIGJ1ZyByZXBvcnRzLCBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnMsIGNvbW1pdCBtZXNzYWdlcywgYW5kIHJlbGF0ZWQgY29kZSBjaGFuZ2VzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlc2UgY2hhbmdlcyBhcmUgc291bmQsIGFuZCBpZiB0aGV5IG1heSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludm9rZV90eF9oYW5kbGVyc19sYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz0xODI4PXN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMTg2NC0gKi9cbm5ldC9tYWM4MDIxMS90eC5jOjE4NjU6c3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxubmV0L21hYzgwMjExL3R4LmMtMTg2Ni17XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MTkwNj1zdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTE5MTEtXHRcdHJldHVybiByO1xubmV0L21hYzgwMjExL3R4LmM6MTkxMjpcdHJldHVybiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSh0eCk7XG5uZXQvbWFjODAyMTEvdHguYy0xOTEzLX1cbi0tXG5uZXQvbWFjODAyMTEvdHguYz0xOTU4PXN0YXRpYyBib29sIGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0xOTk1LVxubmV0L21hYzgwMjExL3R4LmM6MTk5NjpcdGlmICghaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoXHUwMDI2dHgpKVxubmV0L21hYzgwMjExL3R4LmMtMTk5Ny1cdFx0cmVzdWx0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsIFx1MDAyNnR4LnNrYnMsIHR4LnN0YSwgdHhwZW5kaW5nKTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz0zODg4PXN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MDE1LVx0fSBlbHNlIHtcbm5ldC9tYWM4MDIxMS90eC5jOjQwMTY6XHRcdGlmIChpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShcdTAwMjZ0eCkpXG5uZXQvbWFjODAyMTEvdHguYy00MDE3LVx0XHRcdGdvdG8gYmVnaW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGB0eC5jYDoKCioqRGl2aW5nIERlZXAgaW50byBgdHguY2AmIzM5O3MgQ29yZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYHR4LmNgIGJldHdlZW4gbGluZXMgMTg1MCBhbmQgMTkyMC4gVGhhdCYjMzk7cyBhIGRlY2VudCBjaHVuayBvZiBjb2RlLCBsaWtlbHkgaGFuZGxpbmcgYSBjcnVjaWFsIGFzcGVjdCBvZiB0aGUgdHJhbnNhY3Rpb24gcHJvY2Vzc2luZyBwaXBlbGluZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBXaGF0IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNhbGxlZCBqdXN0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBzZWN0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgYHR4LmNgIHRvIHByb3Blcmx5IG9yaWVudCBteXNlbGYuIElzIHRoaXMgcmVsYXRlZCB0byB0cmFuc2FjdGlvbiB2YWxpZGF0aW9uLCBzaWduaW5nLCBicm9hZGNhc3RpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoKTXkgZmlyc3QgcGFzcyB3aWxsIGJlIHRvIGlkZW50aWZ5IGFueSBtYWpvciBjb250cm9sIGZsb3cgc3RhdGVtZW50cyBsaWtlIGBpZmAsIGBmb3JgLCBvciBgc3dpdGNoYCBzdGF0ZW1lbnRzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSBsb2dpYyBmbG93LiBOZXh0LCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhhdCByYW5nZS4gQXJlIHRoZXJlIGFueSBjYWxscyB0byBvdGhlciBtb2R1bGVzIG9yIGN1c3RvbS1kZWZpbmVkIGZ1bmN0aW9ucz8gVGhvc2UgYXJlIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZywgb3IgYW55IHNwZWNpYWxpemVkIGxvZ2ljLCBpcyBoYXBwZW5pbmcuIEFyZSB0aGVyZSBhbnkgaW50ZXJhY3Rpb25zIHdpdGggZXh0ZXJuYWwgc3lzdGVtcz8gQXJlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIHJhbmdlIHRoYXQgSSBuZWVkIHRvIGJlIGZhbWlsaWFyIHdpdGg/IFVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgdGhvc2UgZnVuY3Rpb25zIHdpbGwgYmUgZXNzZW50aWFsLiBBbnkgcmVzb3VyY2UgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24ganVtcHMgb3V0IGFzIGFuIGltbWVkaWF0ZSBwb3RlbnRpYWwgaXNzdWUgdGhhdCBuZWVkcyB0byBiZSBzY3J1dGluaXplZC4KCkkgYW50aWNpcGF0ZSBzZWVpbmcgYSBsb3Qgb2YgYml0d2lzZSBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgcmVsYXRlZCB0byBoYXNoaW5nLCBzZXJpYWxpemF0aW9uLCBvciBjb25zZW5zdXMgbWVjaGFuaXNtcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBhbnkgbGlicmFyaWVzIG9yIGV4dGVybmFsIGRlcGVuZGVuY2llcyB1c2VkLiBGaW5hbGx5LCBJJiMzOTtsbCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBzZWN0aW9uIHNlZW1zIHBvdGVudGlhbGx5IGludm9sdmVkIHdpdGggdHJhbnNhY3Rpb25zLCBzbyBJJiMzOTtsbCBiZSBhbGVydCBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBpbXBhY3QgdGhyb3VnaHB1dCwgbGF0ZW5jeSwgb3Igc2VjdXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3R4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NTA6XHRcdFx0ZWxzZVxuMTg1MTpcdFx0XHRcdGllZWU4MDIxMV9wdXJnZV90eF9xdWV1ZShcdTAwMjZ0eC1cdTAwM2Vsb2NhbC1cdTAwM2VodywgXHUwMDI2dHgtXHUwMDNlc2ticyk7XG4xODUyOlx0XHRcdHJldHVybiAtMTtcbjE4NTM6XHRcdH0gZWxzZSBpZiAodW5saWtlbHkocmVzID09IFRYX1FVRVVFRCkpIHtcbjE4NTQ6XHRcdFx0STgwMl9ERUJVR19JTkModHgtXHUwMDNlbG9jYWwtXHUwMDNldHhfaGFuZGxlcnNfcXVldWVkKTtcbjE4NTU6XHRcdFx0cmV0dXJuIC0xO1xuMTg1NjpcdFx0fVxuMTg1NzpcdFxuMTg1ODpcdFx0cmV0dXJuIDA7XG4xODU5Olx0fVxuMTg2MDpcdFxuMTg2MTpcdC8qXG4xODYyOlx0ICogTGF0ZSBoYW5kbGVycyBjYW4gYmUgY2FsbGVkIHdoaWxlIHRoZSBzdGEgbG9jayBpcyBoZWxkLiBIYW5kbGVycyB0aGF0IGNhblxuMTg2MzpcdCAqIGNhdXNlIHBhY2tldHMgdG8gYmUgZ2VuZXJhdGVkIHdpbGwgY2F1c2UgZGVhZGxvY2shXG4xODY0Olx0ICovXG4xODY1Olx0c3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuMTg2NjpcdHtcbjE4Njc6XHRcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtXHUwMDNlc2tiKTtcbjE4Njg6XHRcdGllZWU4MDIxMV90eF9yZXN1bHQgcmVzID0gVFhfQ09OVElOVUU7XG4xODY5Olx0XG4xODcwOlx0XHRpZiAoIWllZWU4MDIxMV9od19jaGVjayhcdTAwMjZ0eC1cdTAwM2Vsb2NhbC1cdTAwM2VodywgSEFTX1JBVEVfQ09OVFJPTCkpXG4xODcxOlx0XHRcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3JhdGVfY3RybCk7XG4xODcyOlx0XG4xODczOlx0XHRpZiAodW5saWtlbHkoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0lOVEZMX1JFVFJBTlNNSVNTSU9OKSkge1xuMTg3NDpcdFx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnR4LVx1MDAzZXNrYnMsIHR4LVx1MDAzZXNrYik7XG4xODc1Olx0XHRcdHR4LVx1MDAzZXNrYiA9IE5VTEw7XG4xODc2Olx0XHRcdGdvdG8gdHhoX2RvbmU7XG4xODc3Olx0XHR9XG4xODc4Olx0XG4xODc5Olx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTtcbjE4ODA6XHRcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7XG4xODgxOlx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZSk7XG4xODgyOlx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7XG4xODgzOlx0XHQvKiBoYW5kbGVycyBhZnRlciBmcmFnbWVudCBtdXN0IGJlIGF3YXJlIG9mIHR4IGluZm8gZnJhZ21lbnRhdGlvbiEgKi9cbjE4ODQ6XHRcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3N0YXRzKTtcbjE4ODU6XHRcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2VuY3J5cHQpO1xuMTg4NjpcdFx0aWYgKCFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIEhBU19SQVRFX0NPTlRST0wpKVxuMTg4NzpcdFx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jYWxjdWxhdGVfZHVyYXRpb24pO1xuMTg4ODpcdCN1bmRlZiBDQUxMX1RYSFxuMTg4OTpcdFxuMTg5MDpcdCB0eGhfZG9uZTpcbjE4OTE6XHRcdGlmICh1bmxpa2VseShyZXMgPT0gVFhfRFJPUCkpIHtcbjE4OTI6XHRcdFx0dHgtXHUwMDNlc2RhdGEtXHUwMDNldHhfaGFuZGxlcnNfZHJvcCYjNDM7JiM0Mzs7XG4xODkzOlx0XHRcdGlmICh0eC1cdTAwM2Vza2IpXG4xODk0Olx0XHRcdFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIHR4LVx1MDAzZXNrYik7XG4xODk1Olx0XHRcdGVsc2VcbjE4OTY6XHRcdFx0XHRpZWVlODAyMTFfcHVyZ2VfdHhfcXVldWUoXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIFx1MDAyNnR4LVx1MDAzZXNrYnMpO1xuMTg5NzpcdFx0XHRyZXR1cm4gLTE7XG4xODk4Olx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KHJlcyA9PSBUWF9RVUVVRUQpKSB7XG4xODk5Olx0XHRcdEk4MDJfREVCVUdfSU5DKHR4LVx1MDAzZWxvY2FsLVx1MDAzZXR4X2hhbmRsZXJzX3F1ZXVlZCk7XG4xOTAwOlx0XHRcdHJldHVybiAtMTtcbjE5MDE6XHRcdH1cbjE5MDI6XHRcbjE5MDM6XHRcdHJldHVybiAwO1xuMTkwNDpcdH1cbjE5MDU6XHRcbjE5MDY6XHRzdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuMTkwNzpcdHtcbjE5MDg6XHRcdGludCByID0gaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5KHR4KTtcbjE5MDk6XHRcbjE5MTA6XHRcdGlmIChyKVxuMTkxMTpcdFx0XHRyZXR1cm4gcjtcbjE5MTI6XHRcdHJldHVybiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSh0eCk7XG4xOTEzOlx0fVxuMTkxNDpcdFxuMTkxNTpcdGJvb2wgaWVlZTgwMjExX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuMTkxNjpcdFx0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBza19idWZmICpza2IsXG4xOTE3Olx0XHRcdFx0ICAgICAgaW50IGJhbmQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICoqc3RhKVxuMTkxODpcdHtcbjE5MTk6XHRcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7XG4xOTIwOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4xOTIxOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgdHg7XG4xOTIyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcbjE5MjM6XHRcbjE5MjQ6XHRcdGlmIChpZWVlODAyMTFfdHhfcHJlcGFyZShzZGF0YSwgXHUwMDI2dHgsIE5VTEwsIHNrYikgPT0gVFhfRFJPUCkge1xuMTkyNTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE5MjY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTkyNzpcdFx0fVxuMTkyODpcdFxuMTkyOTpcdFx0aW5mby1cdTAwM2ViYW5kID0gYmFuZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5NwoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiA3NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgUG90ZW50aWFsIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaCBhbmQgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSByaXNrcyB0aGF0IEtNU0FOIHdvdWxkIG5lZWQgdG8gZmxhZy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHdlJiMzOTtyZSBtb3ZpbmcgdGhlIG9mZi1jaGFubmVsIGNoZWNrIGZvciBUWCBwYWNrZXRzIHdpdGhpbiBtYWM4MDIxMSwgc3BlY2lmaWNhbGx5IGZyb20gdGhlIGVhcmx5IHRyYW5zbWl0IGhhbmRsZXJzIChgaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2NgIGNhbGxlZCBpbiBgaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5YCkgYW5kIHRoZSA4MDIuMyB0cmFuc21pdCBwYXRoIChgaWVlZTgwMjExXzgwMjNfeG1pdGApIHRvIHRoZSAqbGF0ZSogdHJhbnNtaXQgaGFuZGxlciBwaXBlbGluZSwgc3BlY2lmaWNhbGx5IGBpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsYCB3aXRoaW4gYGludm9rZV90eF9oYW5kbGVyc19sYXRlYC4KCk15IGZpcnN0IGltbWVkaWF0ZSBxdWVzdGlvbjogZG9lcyB0aGlzIGludm9sdmUgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHRoYXQgY291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBHb2luZyB0aHJvdWdoIHRoZSB1c3VhbCBjaGVja2xpc3Q6CgoxLiAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uOioqIE5vLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IG1vZGlmeSBhbnkga2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBzb2NrZXRzLCBvciBCUEYgYnVmZmVycy4gTm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGJlaW5nIGV4cG9zZWQuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIE5vLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBJdCYjMzk7cyByZWFkaW5nIGV4aXN0aW5nIHN0cnVjdCBmaWVsZHMgbGlrZSBgdHgtJmd0O2xvY2FsLSZndDtzY2FubmluZ2AsIGB0eC0mZ3Q7c2RhdGEtJmd0O3N0YXRlYCwgYGhkci0mZ3Q7ZnJhbWVfY29udHJvbGAsIGFuZCBgaW5mby0mZ3Q7ZmxhZ3NgIC0gYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsaXplZC4KMy4gICoqRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogIEkgc2VlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGluaXRpYWxpemF0aW9ucyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIGZpZWxkIG1pZ2h0IGNhdXNlIGlzc3VlcyBsYXRlci4KNC4gICoqQm91bmRzIENoZWNrcy9MZW5ndGggQ2hhbmdlczoqKiBObyBtb2RpZmljYXRpb25zIHRoYXQgd291bGQgYWxsb3cgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpTbywgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZXJlJiMzOTtzIG5vIGluaGVyZW50IHJpc2sgb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3Jpbmcgb2YgKndoZW4qIHRoZSBvZmYtY2hhbm5lbCBjaGVjayBoYXBwZW5zLCBub3QgKmhvdyogdGhlIGRhdGEgaXMgaGFuZGxlZC4gTXkgdW5kZXJzdGFuZGluZyBvZiBLTVNBTiBpcyB0aGF0IGl0JiMzOTtzIGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gS0FTQU4vb3RoZXIgc2FuaXRpemVycyBjb3ZlciBtZW1vcnkgY29ycnVwdGlvbiwgVUFGLCBPT0IsIGV0Yy4sIHdoaWNoIHRoaXMgaXNuJiMzOTt0IHRvdWNoaW5nLiBUaGlzIHBhdGNoIGRlYWxzIHdpdGggbW92aW5nIHRoZSBmaWx0ZXIuIEl0IG9wZXJhdGVzIG9uICpmdWxseSBpbml0aWFsaXplZCogU0tCIGNvbnRyb2wgYnVmZmVycyBhbmQgaGVhZGVycy4KClRoZXJlZm9yZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yIG9mIHRoZSBvZmYtY2hhbm5lbCBzY2FubmluZyBjaGVjayBpbiBtYWM4MDIxMSwgbW92aW5nIHRoZSBsb2NhdGlvbiBidXQgbm90IGFsdGVyaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBpbnRyb2R1Y2luZyBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCB0cmlnZ2VyIEtNU0FOLiBLQVNBTi9vdGhlciBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgb2ZmLWNoYW5uZWwgZnJhbWUgZmlsdGVyaW5nIGluIG1hYzgwMjExIGJ5IG1vdmluZyB0aGUgc29mdHdhcmUgc2Nhbm5pbmcgb2ZmLWNoYW5uZWwgZHJvcCBjaGVjayBmcm9tIGVhcmx5IFRYIGhhbmRsaW5nIChpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyBhbmQgaWVlZTgwMjExXzgwMjNfeG1pdCkgaW50byBhIGRlZGljYXRlZCBsYXRlIFRYIGhhbmRsZXIgKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpIGludm9rZWQgaW4gaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKS5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcGFja2V0IGRyb3AgZGVjaXNpb25zIGR1cmluZyBUWCBwcm9jZXNzaW5nIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBza2IgaGVhZGVycyBhbmQgc3RhdGUgYml0bWFwcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3IgYnVmZmVyIGJvdW5kYXJ5IGNhbGN1bGF0aW9ucy4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIGFueSBwYWNrZXQgaGFuZGxpbmcgb3IgbGlmZWN5Y2xlIGlzc3VlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG9mZi1jaGFubmVsIGZyYW1lIGZpbHRlcmluZyBpbiBtYWM4MDIxMSBieSBtb3ZpbmcgdGhlIHNvZnR3YXJlIHNjYW5uaW5nIG9mZi1jaGFubmVsIGRyb3AgY2hlY2sgZnJvbSBlYXJseSBUWCBoYW5kbGluZyAoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MgYW5kIGllZWU4MDIxMV84MDIzX3htaXQpIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIGluIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCkuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHBhY2tldCBkcm9wIGRlY2lzaW9ucyBkdXJpbmcgVFggcHJvY2Vzc2luZyBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgc2tiIGhlYWRlcnMgYW5kIHN0YXRlIGJpdG1hcHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIG9yIGJ1ZmZlciBib3VuZGFyeSBjYWxjdWxhdGlvbnMuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjb3ZlciBhbnkgcGFja2V0IGhhbmRsaW5nIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDc6NDIuMDIzNDU2MjU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk4MDI3MzgxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbFwiLFxuICAgIFwiaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVcIixcbiAgICBcImllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jXCIsXG4gICAgXCJpZWVlODAyMTFfODAyM194bWl0XCIsXG4gICAgXCJpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdFwiLFxuICAgIFwiaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyM1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG9mZi1jaGFubmVsIGZyYW1lIGZpbHRlcmluZyBpbiBtYWM4MDIxMSBieSBtb3ZpbmcgdGhlIHNvZnR3YXJlIHNjYW5uaW5nIG9mZi1jaGFubmVsIGRyb3AgY2hlY2sgZnJvbSBlYXJseSBUWCBoYW5kbGluZyAoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MgYW5kIGllZWU4MDIxMV84MDIzX3htaXQpIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIGluIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCkuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcGFja2V0IGRyb3AgZGVjaXNpb25zIGR1cmluZyBUWCBwcm9jZXNzaW5nIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBza2IgaGVhZGVycyBhbmQgc3RhdGUgYml0bWFwcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3IgYnVmZmVyIGJvdW5kYXJ5IGNhbGN1bGF0aW9ucy4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIGFueSBwYWNrZXQgaGFuZGxpbmcgb3IgbGlmZWN5Y2xlIGlzc3VlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbWFjODAyMTEgVFggcGF0aCBieSBjb25zb2xpZGF0aW5nIG9mZi1jaGFubmVsIGZyYW1lIGRyb3BwaW5nIGR1cmluZyBzb2Z0d2FyZSBzY2FubmluZyBpbnRvIGEgZGVkaWNhdGVkIGxhdGUgVFggaGFuZGxlciAoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCkgaW52b2tlZCB2aWEgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKSwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGNoZWNrcyBmcm9tIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKCkgYW5kIGllZWU4MDIxMV84MDIzX3htaXQoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB0cmFuc21pc3Npb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDc6NDIuMDIzNDYxMzg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ2Nzg5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YjdjZDViY2M0ODJkZWI4MDJiODkyMjdmYzg0MGZhOWI2OTgxYjAyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NDc6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xcbmluZGV4IDkxYjE0MTEyZTI0ZjAuLjA4YTM5MjcyZjI2YTAgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcXG4rKysgYi9uZXQvbWFjODAyMTEvdHguY1xcbkBAIC0yNjksNyArMjY5LDYgQEAgaWVlZTgwMjExX3R4X2hfZHluYW1pY19wcyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZVxcbiBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbiB7XFxuLVxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtXFx1MDAzZXNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC1cXHUwMDNlc2tiKTtcXG4gXFx0Ym9vbCBhc3NvYyA9IGZhbHNlO1xcbkBAIC0yNzcsMjAgKzI3Niw2IEBAIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXFxuIFxcdGlmICh1bmxpa2VseShpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKVxcbiBcXHRcXHRyZXR1cm4gVFhfQ09OVElOVUU7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlc2Nhbm5pbmcpKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgdGVzdF9iaXQoU0RBVEFfU1RBVEVfT0ZGQ0hBTk5FTCwgXFx1MDAyNnR4LVxcdTAwM2VzZGF0YS1cXHUwMDNlc3RhdGUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhaWVlZTgwMjExX2lzX2FueV9udWxsZnVuYyhoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpKVxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBXaGVuIHNvZnR3YXJlIHNjYW5uaW5nIG9ubHkgbnVsbGZ1bmMgZnJhbWVzICh0byBub3RpZnlcXG4tXFx0XFx0ICogdGhlIHNsZWVwIHN0YXRlIHRvIHRoZSBBUCkgYW5kIHByb2JlIHJlcXVlc3RzIChmb3IgdGhlXFxuLVxcdFxcdCAqIGFjdGl2ZSBzY2FuKSBhcmUgYWxsb3dlZCwgYWxsIG90aGVyIGZyYW1lcyBzaG91bGQgbm90IGJlXFxuLVxcdFxcdCAqIHNlbnQgYW5kIHdlIHNob3VsZCBub3QgZ2V0IGhlcmUsIGJ1dCBpZiB3ZSBkb1xcbi1cXHRcXHQgKiBub25ldGhlbGVzcywgZHJvcCB0aGVtIHRvIGF2b2lkIHNlbmRpbmcgdGhlbVxcbi1cXHRcXHQgKiBvZmYtY2hhbm5lbC4gU2VlIF9faWVlZTgwMjExX3N0YXJ0X3NjYW4oKSBmb3IgbW9yZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHJldHVybiBUWF9EUk9QO1xcbi1cXG4gXFx0aWYgKHR4LVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfT0NCKVxcbiBcXHRcXHRyZXR1cm4gVFhfQ09OVElOVUU7XFxuIFxcbkBAIC04MDUsNiArNzkwLDMzIEBAIGllZWU4MDIxMV90eF9oX3JhdGVfY3RybChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbiBcXHRyZXR1cm4gVFhfQ09OVElOVUU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lXFxuK2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcXG4re1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtXFx1MDAzZXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC1cXHUwMDNlc2tiKTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKVxcbitcXHRcXHRyZXR1cm4gVFhfQ09OVElOVUU7XFxuK1xcbitcXHRpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlc2Nhbm5pbmcpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGVzdF9iaXQoU0RBVEFfU1RBVEVfT0ZGQ0hBTk5FTCwgXFx1MDAyNnR4LVxcdTAwM2VzZGF0YS1cXHUwMDNlc3RhdGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhaWVlZTgwMjExX2lzX2FueV9udWxsZnVuYyhoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFdoZW4gc29mdHdhcmUgc2Nhbm5pbmcgb25seSBudWxsZnVuYyBmcmFtZXMgKHRvIG5vdGlmeVxcbitcXHRcXHQgKiB0aGUgc2xlZXAgc3RhdGUgdG8gdGhlIEFQKSBhbmQgcHJvYmUgcmVxdWVzdHMgKGZvciB0aGVcXG4rXFx0XFx0ICogYWN0aXZlIHNjYW4pIGFyZSBhbGxvd2VkLCBhbGwgb3RoZXIgZnJhbWVzIHNob3VsZCBub3QgYmVcXG4rXFx0XFx0ICogc2VudCBhbmQgd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvXFxuK1xcdFxcdCAqIG5vbmV0aGVsZXNzLCBkcm9wIHRoZW0gdG8gYXZvaWQgc2VuZGluZyB0aGVtXFxuK1xcdFxcdCAqIG9mZi1jaGFubmVsLiBTZWUgX19pZWVlODAyMTFfc3RhcnRfc2NhbigpIGZvciBtb3JlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuIFRYX0RST1A7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBUWF9DT05USU5VRTtcXG4rfVxcbitcXG4gc3RhdGljIF9fbGUxNiBpZWVlODAyMTFfdHhfbmV4dF9zZXEoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpXFxuIHtcXG4gXFx0dTE2ICpzZXEgPSBcXHUwMDI2c3RhLVxcdTAwM2V0aWRfc2VxW3RpZF07XFxuQEAgLTE4NjQsNiArMTg3Niw3IEBAIHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcXG4gXFx0XFx0Z290byB0eGhfZG9uZTtcXG4gXFx0fVxcbiBcXG4rXFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCk7XFxuIFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7XFxuIFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKTtcXG4gXFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZnJhZ21lbnQpO1xcbkBAIC00Njg2LDEwICs0Njk5LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0cXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7XFxuIFxcdHNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlKTtcXG4gXFxuLVxcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCBcXHUwMDI2bG9jYWwtXFx1MDAzZXNjYW5uaW5nKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsIFxcdTAwMjZzZGF0YS1cXHUwMDNlc3RhdGUpKVxcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXG4gXFx0c2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC00NzU2LDExICs0NzY1LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0aWVlZTgwMjExX3RwdF9sZWRfdHJpZ190eChsb2NhbCwgbGVuKTtcXG4gXFxuIFxcdGllZWU4MDIxMV90eF84MDIzKHNkYXRhLCBza2IsIHN0YSwgZmFsc2UpO1xcbi1cXG4tXFx0cmV0dXJuO1xcbi1cXG4tb3V0X2ZyZWU6XFxuLVxcdGtmcmVlX3NrYihza2IpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDc6NDIuNDE5MDM2NjI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MTM0MjkzNDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsXCIsXG4gICAgXCJpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZVwiLFxuICAgIFwiaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2NcIixcbiAgICBcImllZWU4MDIxMV84MDIzX3htaXRcIixcbiAgICBcImllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XCIsXG4gICAgXCJpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtYWM4MDIxMSBUWCBwYXRoIGJ5IGNvbnNvbGlkYXRpbmcgb2ZmLWNoYW5uZWwgZnJhbWUgZHJvcHBpbmcgZHVyaW5nIHNvZnR3YXJlIHNjYW5uaW5nIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIHZpYSBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpLCB3aGlsZSByZW1vdmluZyByZWR1bmRhbnQgY2hlY2tzIGZyb20gaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MoKSBhbmQgaWVlZTgwMjExXzgwMjNfeG1pdCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCB3aXJlbGVzcyBpbnRlcmZhY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKSwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZiN2NkNWJjYzQ4MmRlYjgwMmI4OTIyN2ZjODQwZmE5YjY5ODFiMDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE0OjQ3OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xuaW5kZXggOTFiMTQxMTJlMjRmMC4uMDhhMzkyNzJmMjZhMCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXG4rKysgYi9uZXQvbWFjODAyMTEvdHguY1xuQEAgLTI2OSw3ICsyNjksNiBAQCBpZWVlODAyMTFfdHhfaF9keW5hbWljX3BzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4gc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmVcbiBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIHtcbi1cbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtXHUwMDNlc2tiKTtcbiBcdGJvb2wgYXNzb2MgPSBmYWxzZTtcbkBAIC0yNzcsMjAgKzI3Niw2IEBAIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4gXHRpZiAodW5saWtlbHkoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpXG4gXHRcdHJldHVybiBUWF9DT05USU5VRTtcbiBcbi1cdGlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCBcdTAwMjZ0eC1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FubmluZykpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsIFx1MDAyNnR4LVx1MDAzZXNkYXRhLVx1MDAzZXN0YXRlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKVxuLVx0XHQvKlxuLVx0XHQgKiBXaGVuIHNvZnR3YXJlIHNjYW5uaW5nIG9ubHkgbnVsbGZ1bmMgZnJhbWVzICh0byBub3RpZnlcbi1cdFx0ICogdGhlIHNsZWVwIHN0YXRlIHRvIHRoZSBBUCkgYW5kIHByb2JlIHJlcXVlc3RzIChmb3IgdGhlXG4tXHRcdCAqIGFjdGl2ZSBzY2FuKSBhcmUgYWxsb3dlZCwgYWxsIG90aGVyIGZyYW1lcyBzaG91bGQgbm90IGJlXG4tXHRcdCAqIHNlbnQgYW5kIHdlIHNob3VsZCBub3QgZ2V0IGhlcmUsIGJ1dCBpZiB3ZSBkb1xuLVx0XHQgKiBub25ldGhlbGVzcywgZHJvcCB0aGVtIHRvIGF2b2lkIHNlbmRpbmcgdGhlbVxuLVx0XHQgKiBvZmYtY2hhbm5lbC4gU2VlIF9faWVlZTgwMjExX3N0YXJ0X3NjYW4oKSBmb3IgbW9yZS5cbi1cdFx0ICovXG4tXHRcdHJldHVybiBUWF9EUk9QO1xuLVxuIFx0aWYgKHR4LVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX09DQilcbiBcdFx0cmV0dXJuIFRYX0NPTlRJTlVFO1xuIFxuQEAgLTgwNSw2ICs3OTAsMzMgQEAgaWVlZTgwMjExX3R4X2hfcmF0ZV9jdHJsKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4gXHRyZXR1cm4gVFhfQ09OVElOVUU7XG4gfVxuIFxuK3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lXG4raWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbitcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtXHUwMDNlc2tiKTtcbitcbitcdGlmICh1bmxpa2VseShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSlcbitcdFx0cmV0dXJuIFRYX0NPTlRJTlVFO1xuK1xuK1x0aWYgKHVubGlrZWx5KHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsIFx1MDAyNnR4LVx1MDAzZWxvY2FsLVx1MDAzZXNjYW5uaW5nKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGVzdF9iaXQoU0RBVEFfU1RBVEVfT0ZGQ0hBTk5FTCwgXHUwMDI2dHgtXHUwMDNlc2RhdGEtXHUwMDNlc3RhdGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpZWVlODAyMTFfaXNfcHJvYmVfcmVxKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhaWVlZTgwMjExX2lzX2FueV9udWxsZnVuYyhoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbitcdFx0LypcbitcdFx0ICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5XG4rXHRcdCAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZVxuK1x0XHQgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZVxuK1x0XHQgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG9cbitcdFx0ICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW1cbitcdFx0ICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gVFhfRFJPUDtcbitcdH1cbitcbitcdHJldHVybiBUWF9DT05USU5VRTtcbit9XG4rXG4gc3RhdGljIF9fbGUxNiBpZWVlODAyMTFfdHhfbmV4dF9zZXEoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpXG4ge1xuIFx0dTE2ICpzZXEgPSBcdTAwMjZzdGEtXHUwMDNldGlkX3NlcVt0aWRdO1xuQEAgLTE4NjQsNiArMTg3Niw3IEBAIHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbiBcdFx0Z290byB0eGhfZG9uZTtcbiBcdH1cbiBcbitcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpO1xuIFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfbWljaGFlbF9taWNfYWRkKTtcbiBcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKTtcbiBcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2ZyYWdtZW50KTtcbkBAIC00Njg2LDEwICs0Njk5LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdHF1ZXVlID0gaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzZGF0YSwgc3RhLCBza2IpO1xuIFx0c2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWUpO1xuIFxuLVx0aWYgKHVubGlrZWx5KHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsIFx1MDAyNmxvY2FsLVx1MDAzZXNjYW5uaW5nKSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdGVzdF9iaXQoU0RBVEFfU1RBVEVfT0ZGQ0hBTk5FTCwgXHUwMDI2c2RhdGEtXHUwMDNlc3RhdGUpKVxuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVxuIFx0c2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAodW5saWtlbHkoIXNrYikpXG4gXHRcdHJldHVybjtcbkBAIC00NzU2LDExICs0NzY1LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGllZWU4MDIxMV90cHRfbGVkX3RyaWdfdHgobG9jYWwsIGxlbik7XG4gXG4gXHRpZWVlODAyMTFfdHhfODAyMyhzZGF0YSwgc2tiLCBzdGEsIGZhbHNlKTtcbi1cbi1cdHJldHVybjtcbi1cbi1vdXRfZnJlZTpcbi1cdGtmcmVlX3NrYihza2IpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ3OjQyLjQxOTAzODU5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDY0NTQ0NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2ggYW5kIGl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHJlbGF0ZWQgdG8gb2ZmLWNoYW5uZWwgb3BlcmF0aW9uIHdpdGhpbiB0aGUgYG5ldC9tYWM4MDIxMWAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0cmFuc21pdCBiZWhhdmlvci4gVGhlIGRpZmYgcG9pbnRzIHNxdWFyZWx5IGF0IGBuZXQvbWFjODAyMTEvdHguY2AsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSBpbiBhbnkgODAyLjExIGltcGxlbWVudGF0aW9uLlxuXG5UaGUgZmlyc3QgY2hhbmdlIGluIGBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYygpYCBqdW1wcyBvdXQuIFJlbW92aW5nIHRoZSBvZmYtY2hhbm5lbCBjaGVjayBkdXJpbmcgc2Nhbm5pbmcgaXMgaW50ZXJlc3RpbmcuIEl0IGltcGxpZXMgYSBzaGlmdCBpbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIG9mZi1jaGFubmVsIGFjdGl2aXR5IHdoZW4gYSBzdGF0aW9uIGlzIGFjdGl2ZWx5IHNjYW5uaW5nIGZvciBuZXR3b3Jrcy4gVGhlbiwgdGhlIGludHJvZHVjdGlvbiBvZiBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCgpYCBhbmQgdGhlIGxhdGUgaW52b2NhdGlvbiB3aXRoaW4gYGludm9rZV90eF9oYW5kbGVyc19sYXRlKClgIGlzIGNyaXRpY2FsLiBUaGlzIHNpZ25hbHMgYSBuZXcgdHggaGFuZGxlciBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gaGFuZGxlIG9mZi1jaGFubmVsIHNjZW5hcmlvcyBhbmQgaXQgc3VnZ2VzdHMgdGhhdCB0aGUgb2ZmLWNoYW5uZWwgaGFuZGxpbmcgbG9naWMgaXMgbm93IGJlaW5nIGRlZmVycmVkIHRvIHRoZSBsYXRlciBzdGFnZXMgb2YgdGhlIHRyYW5zbWl0IHByb2Nlc3MuIFRoaXMgbWF5IGltcGFjdCB2YXJpb3VzIGFzcGVjdHMsIHN1Y2ggYXMgdGhyb3VnaHB1dCwgbGF0ZW5jeSwgb3IgZXZlbiBmcmFtZSBvcmRlcmluZy4gSXQgd291bGQgYmUgaW1wb3J0YW50IHRvIHN0dWR5IHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuXG5cbkFkZGl0aW9uYWxseSwgdGhlIHJlbW92YWwgb2YgdGhlIHNwZWNpZmljIGNoZWNrIHdpdGhpbiBgaWVlZTgwMjExXzgwMjNfeG1pdCgpYCBpcyB3b3J0aCBub3RpbmcuIFRoaXMgYGdvdG8gb3V0X2ZyZWVgIHN0YXRlbWVudCB3YXMgbGlrZWx5IGEgZmFzdC1wYXRoIG9wdGltaXphdGlvbiBvciBhIHNhZmVndWFyZCB0byBwcmV2ZW50IHRyYW5zbWlzc2lvbiBvbiBvZmYtY2hhbm5lbC4gSXRzIHJlbW92YWwsIGVzcGVjaWFsbHkgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgbmV3IGhhbmRsZXIsIGluZGljYXRlcyBhIHBvdGVudGlhbGx5IG1vcmUgbnVhbmNlZCBhbmQgZmxleGlibGUgYXBwcm9hY2ggdG8gb2ZmLWNoYW5uZWwgdHJhbnNtaXNzaW9uLiBJdCBhbHNvIHN1Z2dlc3RzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNoZWNrIHdhcyBubyBsb25nZXIgbmVlZGVkIGJlY2F1c2UgdGhlIG5ldyBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCgpYCBoYW5kbGVyIGhhcyByZXBsYWNlZCBpdCBvciBpcyB0YWtpbmcgY2FyZSBvZiB0aGUgd29yayBkb25lIGJ5IHRoZSBlYXJsaWVyIGNoZWNrLlxuXG5UaGUgbmV4dCBxdWVzdGlvbjogaG93IHZ1bG5lcmFibGUgaXMgdGhpcyBjb2RlIHRvIGZ1enppbmc/IEtub3dpbmcgdGhhdCBgbWFjODAyMTFgIGlzIGhlYXZpbHkgZXhlcmNpc2VkIGJ5IHN5emthbGxlciB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAsIG5sODAyMTEsIGFuZCBzdGFuZGFyZCBzb2NrZXQgdHJhbnNtaXNzaW9ucywgSSdtIGFscmVhZHkgaW5jbGluZWQgdG8gYmVsaWV2ZSB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgYmUgZXhwb3NlZCB0byBzaWduaWZpY2FudCB0ZXN0aW5nIHByZXNzdXJlLiBUaGUgZmFjdCB0aGF0IHRoZXNlIGludGVyZmFjZXMgYXJlIHJlYWNoYWJsZSBtZWFucyBhbnkgYnVncyBpbnRyb2R1Y2VkIGhlcmUgaGF2ZSBhIGdvb2QgY2hhbmNlIG9mIGJlaW5nIGZvdW5kIHJlbGF0aXZlbHkgcXVpY2tseS4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgbW9yZSB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MDIuODgzNTkxMTEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDcxMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19NQUM4MDIxMSkgKz0gbWFjODAyMTEub1xcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS0zLVxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlPTU9bWFjODAyMTEteSA6PSBcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMzktXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjQwOm1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0xFRFMpICs9IGxlZC5vXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjQxOm1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICs9IFxcXFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDItXFx0ZGVidWdmcy5vIFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS00Ni1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NDc6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTUVTSCkgKz0gXFxcXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS00OC1cXHRtZXNoLm8gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlPTU5PXJjODAyMTFfbWluc3RyZWwteSA6PSBcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjEtXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjYyOnJjODAyMTFfbWluc3RyZWwtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgKz0gXFxcXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS02My1cXHRyYzgwMjExX21pbnN0cmVsX2h0X2RlYnVnZnMub1xcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS02NC1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NjU6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUwpICs9ICQocmM4MDIxMV9taW5zdHJlbC15KVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS02Ni1cXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz02MTM9c3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTcxMC1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxubmV0L21hYzgwMjExL2NmZy5jOjcxMTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNzEyLVxcdFxcdGlmIChzZGF0YS1cXHUwMDNldS5tZXNoLnNlY3VyaXR5ICE9IElFRUU4MDIxMV9NRVNIX1NFQ19OT05FKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTIxOTA9c3RhdGljIHZvaWQgc3RhX2FwcGx5X21lc2hfcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTIxOTMte1xcbm5ldC9tYWM4MDIxMS9jZmcuYzoyMTk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTk1LVxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLVxcdTAwM2VzZGF0YTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz0yNzg3PXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjg5My1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6Mjg5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjg5NS1zdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfbXBhdGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz00NDI4PXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9hZnRlcl9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ1MS1cXHRcXHRicmVhaztcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDQ1MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ1My1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NDU2Mz1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfY3NhX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGlua19kYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTQ2NTQtXFx0XFx0YnJlYWs7XFxubmV0L21hYzgwMjExL2NmZy5jOjQ2NTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTQ2NTYtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOiB7XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk5MT1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjAxMS1cXHQuZHVtcF9zdXJ2ZXkgPSBpZWVlODAyMTFfZHVtcF9zdXJ2ZXksXFxubmV0L21hYzgwMjExL2NmZy5jOjYwMTI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTYwMTMtXFx0LmFkZF9tcGF0aCA9IGllZWU4MDIxMV9hZGRfbXBhdGgsXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xMC1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxMTojaWZkZWYgQ09ORklHX01BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTEyLSNkZWZpbmUgTUFDODAyMTFfT0NCX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE2LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjE3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE4LSNkZWZpbmUgTUFDODAyMTFfSUJTU19ERUJVRyAxXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMi1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMzojaWZkZWYgQ09ORklHX01BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjQtI2RlZmluZSBNQUM4MDIxMV9QU19ERUJVRyAxXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yOC1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyOTojaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzAtI2RlZmluZSBNQUM4MDIxMV9IVF9ERUJVRyAxXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0zNC1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDozNTojaWZkZWYgQ09ORklHX01BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTM2LSNkZWZpbmUgTUFDODAyMTFfTVBMX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQwLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaC00Mi0jZGVmaW5lIE1BQzgwMjExX01QQVRIX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQ2LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQ3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaC00OC0jZGVmaW5lIE1BQzgwMjExX01IV01QX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTUyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjUzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTQtI2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTgtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTYwLSNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjQtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjYtI2RlZmluZSBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTcwLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjcxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVERMU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTcyLSNkZWZpbmUgTUFDODAyMTFfVERMU19ERUJVRyAxXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC03Ni1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3NzojaWZkZWYgQ09ORklHX01BQzgwMjExX1NUQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTc4LSNkZWZpbmUgTUFDODAyMTFfU1RBX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTgyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjgzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTg0LSNkZWZpbmUgTUFDODAyMTFfTUxNRV9ERUJVRyAxXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC04OC1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDo4OTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTkwLXZvaWQgX19zZGF0YV9pbmZvKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX3ByaW50ZigxLCAyKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM9NjMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVidWdmc19zaG9ydF9mb3BzIHN0YXRzXyAjI25hbWUjIyBfb3BzID0ge1xcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjM2LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM6NjM3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTYzOC0jZGVmaW5lIERFQlVHRlNfU1RBVFNfQUREKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnMuYz02NDk9dm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjgzLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM6Njg0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTY4NS1cXHRERUJVR0ZTX1NUQVRTX0FERChkb3QxMVRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTYtXFxubmV0L21hYzgwMjExL2RlYnVnZnMuaDo3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmgtOC12b2lkIGRlYnVnZnNfaHdfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oLTQtXFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaC02LXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTczNj1JRUVFODAyMTFfSUZfTElOS19GSUxFKGFkZHIsIGNvbmYtXFx1MDAzZWFkZHIsIE1BQyk7XFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtNzM3LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjczODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzktSUVFRTgwMjExX0lGX0ZJTEUoZXN0YWJfcGxpbmtzLCB1Lm1lc2guZXN0YWJfcGxpbmtzLCBBVE9NSUMpO1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9ODY4PXN0YXRpYyB2b2lkIGFkZF9pYnNzX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtODcyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjg3MzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzQtXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz05Mzc9c3RhdGljIHZvaWQgYWRkX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtOTQ5LVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo5NTA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtOTUxLVxcdFxcdGFkZF9tZXNoX2ZpbGVzKHNkYXRhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oLTEyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oOjEzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oLTE0LXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfcmVtb3ZlX25ldGRldihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC02LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oOjc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgtOC12b2lkIGllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbi0tXFxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaD00Nzc9c3RhdGljIGlubGluZSB2b2lkIGRydl9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC00OTQtXFxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaDo0OTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC00OTYtc3RhdGljIGlubGluZSB2b2lkIGRydl92aWZfYWRkX2RlYnVnZnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD03NzA9c3RydWN0IGllZWU4MDIxMV9pZl9tZXNoIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg1MC1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo4NTE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtODUyLSNkZWZpbmUgSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQyhtc2gsIG5hbWUpXFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTA5OT1zdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMTUxLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjExNTI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTE1My1cXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RpcjtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTExNTc9c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMjQ0LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjEyNDU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTI0Ni1cXHRzdHJ1Y3Qge1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTM2ND1lbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTEzNzktXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTM4MDojaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMzgxLXN0cnVjdCB0cHRfbGVkX3RyaWdnZXIge1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTQ0OD1zdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MjgtXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTYyOTojaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjMwLVxcdHN0cnVjdCBsZWRfdHJpZ2dlciB0eF9sZWQsIHJ4X2xlZCwgYXNzb2NfbGVkLCByYWRpb19sZWQ7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjM2LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE2Mzc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MzgtXFx0LyogU05NUCBjb3VudGVycyAqL1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTY2NC0jZGVmaW5lIEk4MDJfREVCVUdfSU5DKGMpIChjKSsrXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTY2NTojZWxzZSAvKiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMgKi9cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjY2LSNkZWZpbmUgSTgwMl9ERUJVR19JTkMoYykgZG8geyB9IHdoaWxlICgwKVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE2Njc6I2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSUyAqL1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2NjgtXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjk1LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE2OTY6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTY5Ny1cXHRzdHJ1Y3QgbG9jYWxfZGVidWdmc2RlbnRyaWVzIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI5NDI9dTMyIGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yOTQ1LVxcdFxcdFxcdFxcdCAgICAgICBpbnQgbGVuLCBib29sIGFtcGR1KTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyOTQ2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yOTQ3LSNkZWZpbmUgZGVidWdfbm9pbmxpbmUgbm9pbmxpbmVcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI5Nzg9aWVlZTgwMjExX3Vocl9jYXBfaWVfdG9fc3RhX3Vocl9jYXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yOTgzLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjI5ODQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQzgwMjExX0tVTklUX1RFU1QpXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjk4NS0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfSUZfTUFDODAyMTFfS1VOSVQoc3ltKSBFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHN5bSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuaD01OT1zdHJ1Y3QgaWVlZTgwMjExX2tleSB7XFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmgtMTIyLVxcbm5ldC9tYWM4MDIxMS9rZXkuaDoxMjM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2tleS5oLTEyNC1cXHRzdHJ1Y3Qge1xcbi0tXFxubmV0L21hYzgwMjExL2xlZC5oPTEzPXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfbGVkX3J4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbm5ldC9tYWM4MDIxMS9sZWQuaC0xNC17XFxubmV0L21hYzgwMjExL2xlZC5oOjE1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9sZWQuaC0xNi1cXHRpZiAoIWF0b21pY19yZWFkKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfbGVkX2FjdGl2ZSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvbGVkLmg9MjI9c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9sZWRfdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxubmV0L21hYzgwMjExL2xlZC5oLTIzLXtcXG5uZXQvbWFjODAyMTEvbGVkLmg6MjQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL2xlZC5oLTI1LVxcdGlmICghYXRvbWljX3JlYWQoXFx1MDAyNmxvY2FsLVxcdTAwM2V0eF9sZWRfYWN0aXZlKSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9sZWQuaC0zMC1cXG5uZXQvbWFjODAyMTEvbGVkLmg6MzE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL2xlZC5oLTMyLXZvaWQgaWVlZTgwMjExX2xlZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9sZWQuaD03MT1pZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgYnl0ZXMpXFxubmV0L21hYzgwMjExL2xlZC5oLTcyLXtcXG5uZXQvbWFjODAyMTEvbGVkLmg6NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL2xlZC5oLTc0LVxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZXRwdF9sZWRfYWN0aXZlKSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9sZWQuaD04MD1pZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgYnl0ZXMpXFxubmV0L21hYzgwMjExL2xlZC5oLTgxLXtcXG5uZXQvbWFjODAyMTEvbGVkLmg6ODI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL2xlZC5oLTgzLVxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZXRwdF9sZWRfYWN0aXZlKSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9tYWluLmM9MTEzOD1pbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxcbi0tXFxubmV0L21hYzgwMjExL21haW4uYy0xMzkzLVxcbm5ldC9tYWM4MDIxMS9tYWluLmM6MTM5NDojaWZuZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL21haW4uYy0xMzk1LVxcdC8qIG1lc2ggZGVwZW5kcyBvbiBLY29uZmlnLCBidXQgZHJpdmVycyBzaG91bGQgc2V0IGl0IGlmIHRoZXkgd2FudCAqL1xcbi0tXFxubmV0L21hYzgwMjExL21lc2guaD0zNzg9dm9pZCBtZXNoX3BhdGhfcmVmcmVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzgwLVxcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzgxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzgyLXN0YXRpYyBpbmxpbmVcXG4tLVxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM9ODEyPWludCBpZWVlODAyMTFfbWdtdF90eChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy04NDEtXFx0XFx0XFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jOjg0MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTg0My1cXHRcXHRmYWxsdGhyb3VnaDtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmM9MjQ9c3RhdGljIERFRklORV9NVVRFWChyYXRlX2N0cmxfbXV0ZXgpO1xcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMjUtXFxubmV0L21hYzgwMjExL3JhdGUuYzoyNjpzdGF0aWMgY2hhciAqaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyA9IENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUO1xcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMjctbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9kZWZhdWx0X3JjX2FsZ28sIGNoYXJwLCAwNjQ0KTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmM9MjE2PWllZWU4MDIxMV9yYXRlX2NvbnRyb2xfb3BzX2dldChjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYy0yMzItXFx0LyogTm90ZTogY2hlY2sgZm9yIFxcdTAwM2UgMCBpcyBpbnRlbnRpb25hbCB0byBhdm9pZCBjbGFuZyB3YXJuaW5nICovXFxubmV0L21hYzgwMjExL3JhdGUuYzoyMzM6XFx0aWYgKCFvcHMgXFx1MDAyNlxcdTAwMjYgKHN0cmxlbihDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVCkgXFx1MDAzZSAwKSlcXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTIzNC1cXHRcXHQvKiB0cnkgYnVpbHQtaW4gb25lIGlmIHNwZWNpZmljIGFsZyByZXF1ZXN0ZWQgYnV0IG5vdCBmb3VuZCAqL1xcbm5ldC9tYWM4MDIxMS9yYXRlLmM6MjM1OlxcdFxcdG9wcyA9IGllZWU4MDIxMV90cnlfcmF0ZV9jb250cm9sX29wc19nZXQoQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQpO1xcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMjM2LVxcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYy0yNDEtXFxubmV0L21hYzgwMjExL3JhdGUuYzoyNDI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL3JhdGUuYy0yNDMtc3RhdGljIHNzaXplX3QgcmNuYW1lX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLFxcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYz0yODE9c3RhdGljIHZvaWQgcmF0ZV9jb250cm9sX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTI4NS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjI4NjojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTI4Ny1cXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobG9jYWwtXFx1MDAzZWRlYnVnZnMucmNkaXIpO1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX2FkZF9zdGFfZGVidWdmcyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG5uZXQvbWFjODAyMTEvcmF0ZS5oLTU2LXtcXG5uZXQvbWFjODAyMTEvcmF0ZS5oOjU3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9yYXRlLmgtNTgtXFx0c3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IHN0YS1cXHUwMDNlcmF0ZV9jdHJsO1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuaD02Nz1zdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX2FkZF9kZWJ1Z2ZzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbm5ldC9tYWM4MDIxMS9yYXRlLmgtNjgte1xcbm5ldC9tYWM4MDIxMS9yYXRlLmg6Njk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL3JhdGUuaC03MC1cXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyO1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuaD05ND12b2lkIHJhdGVfY29udHJvbF9kZWluaXRpYWxpemUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpO1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuaC05Ny0vKiBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtcyAqL1xcbm5ldC9tYWM4MDIxMS9yYXRlLmg6OTg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9yYXRlLmgtOTktaW50IHJjODAyMTFfbWluc3RyZWxfaW5pdCh2b2lkKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM9MTA1OT1taW5zdHJlbF9odF91cGRhdGVfc3RhdHMoc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wLCBzdHJ1Y3QgbWluc3RyZWxfaHRfc3RhICptaSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTE4MS1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jOjExODI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYy0xMTgzLVxcdC8qIHVzZSBmaXhlZCBpbmRleCBpZiBzZXQgKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM9MTU5NT1taW5zdHJlbF9odF9nZXRfcmF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTYwNi1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jOjE2MDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYy0xNjA4LVxcdGlmIChtcC1cXHUwMDNlZml4ZWRfcmF0ZV9pZHggIT0gLTEpXFxuLS1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jPTE5MTU9bWluc3RyZWxfaHRfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuLS1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jLTE5NDgtXFxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYzoxOTQ5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTk1MC1zdGF0aWMgdm9pZCBtaW5zdHJlbF9odF9hZGRfZGVidWdmcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqcHJpdixcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM9MTk4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHJhdGVfY29udHJvbF9vcHMgbWFjODAyMTFfbWluc3RyZWxfaHQgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jLTE5OTMtXFx0LmZyZWUgPSBtaW5zdHJlbF9odF9mcmVlLFxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM6MTk5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jLTE5OTUtXFx0LmFkZF9kZWJ1Z2ZzID0gbWluc3RyZWxfaHRfYWRkX2RlYnVnZnMsXFxuLS1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5oPTc1PXN0cnVjdCBtaW5zdHJlbF9wcml2IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmgtODUtXFxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuaDo4NjojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5oLTg3LVxcdC8qXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz0xMDUxPXN0YXRpYyB2b2lkIGllZWU4MDIxMV92ZXJpZnlfYWxpZ25tZW50KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxubmV0L21hYzgwMjExL3J4LmMtMTA1Mi17XFxubmV0L21hYzgwMjExL3J4LmM6MTA1MzojaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvcnguYy0xMDU0LVxcdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZylyeC1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhIFxcdTAwMjYgMSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz0yNzk0PWllZWU4MDIxMV9kZWxpdmVyX3NrYihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtMjg5My1cXG5uZXQvbWFjODAyMTEvcnguYzoyODk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9yeC5jLTI4OTUtc3RhdGljIGJvb2xcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jPTI5NjE9aWVlZTgwMjExX3J4X21lc2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy0yOTYzLXtcXG5uZXQvbWFjODAyMTEvcnguYzoyOTY0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9yeC5jLTI5NjUtXFx0c3RydWN0IGllZWU4MDIxMV9pZl9tZXNoICppZm1zaCA9IFxcdTAwMjZzZGF0YS1cXHUwMDNldS5tZXNoO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NzI9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBzdGFfcmh0X3BhcmFtcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc3LVxcdC5rZXlfbGVuID0gRVRIX0FMRU4sXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6Nzg6XFx0Lm1heF9zaXplID0gQ09ORklHX01BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFLFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc5LX07XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz04MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIGxpbmtfc3RhX3JodF9wYXJhbXMgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04Ni1cXHQua2V5X2xlbiA9IEVUSF9BTEVOLFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjg3OlxcdC5tYXhfc2l6ZSA9IENPTkZJR19NQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRSxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04OC19O1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NDY4PXZvaWQgc3RhX2luZm9fZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHN0YV9pbmZvICpzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01MDYtXFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhzdGEtXFx1MDAzZXN0YS5yYXRlcykpO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjUwNzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01MDgtXFx0a2ZyZWUoc3RhLVxcdTAwM2VtZXNoKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTYzMz1fX3N0YV9pbmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY3LVxcdHdpcGh5X3dvcmtfaW5pdChcXHUwMDI2c3RhLVxcdTAwM2VhbXBkdV9tbG1lLndvcmssIGllZWU4MDIxMV9iYV9zZXNzaW9uX3dvcmspO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjY2ODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy02NjktXFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZikpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc5NS1cXHRzdGFfaW5mb19mcmVlX2xpbmsoXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6Nzk2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc5Ny1cXHRrZnJlZShzdGEtXFx1MDAzZW1lc2gpO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTEwNz1zdGF0aWMgdm9pZCBfX3N0YV9pbmZvX3JlY2FsY190aW0oc3RydWN0IHN0YV9pbmZvICpzdGEsIGJvb2wgaWdub3JlX3BlbmRpbmcpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMTIxLVxcdFxcdHBzID0gXFx1MDAyNnN0YS1cXHUwMDNlc2RhdGEtXFx1MDAzZWJzcy1cXHUwMDNlcHM7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MTEyMjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMTIzLVxcdH0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKFxcdTAwMjZzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2V2aWYpKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0yNzI4PXN0YXRpYyBpbmxpbmUgdTY0IHN0YV9nZXRfc3RhdHNfYnl0ZXMoc3RydWN0IGllZWU4MDIxMV9zdGFfcnhfc3RhdHMgKnJ4c3RhdHMpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0yNzQwLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjI3NDE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjc0Mi1zdGF0aWMgdm9pZCBzdGFfc2V0X21lc2hfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0zMDM4PXZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zMjIzLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjMyMjQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzIyNS1cXHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmKSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTUyNT1zdHJ1Y3QgbGlua19zdGFfaW5mbyB7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC01NzYtXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6NTc3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTU3OC1cXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RpcjtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTcxND1zdHJ1Y3Qgc3RhX2luZm8ge1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtNzMxLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjczMjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03MzMtXFx0c3RydWN0IG1lc2hfc3RhICptZXNoO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtNzcyLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjc3MzojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03NzQtXFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19kaXI7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD03OTk9c3RhdGljIGlubGluZSBlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUgc3RhX3BsaW5rX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTgwMC17XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6ODAxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTgwMi1cXHRyZXR1cm4gc3RhLVxcdTAwM2VtZXNoLVxcdTAwM2VwbGlua19zdGF0ZTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90ZXN0cy8ua3VuaXRjb25maWc9Mj1DT05GSUdfQ0ZHODAyMTE9eVxcbm5ldC9tYWM4MDIxMS90ZXN0cy8ua3VuaXRjb25maWc6MzpDT05GSUdfTUFDODAyMTE9eVxcbm5ldC9tYWM4MDIxMS90ZXN0cy8ua3VuaXRjb25maWc6NDpDT05GSUdfTUFDODAyMTFfS1VOSVRfVEVTVD15XFxuLS1cXG5uZXQvbWFjODAyMTEvdGVzdHMvTWFrZWZpbGU9MT1tYWM4MDIxMS10ZXN0cy15ICs9IG1vZHVsZS5vIHV0aWwubyBlbGVtcy5vIG1mcC5vIHRwZS5vIGNoYW4tbW9kZS5vIHMxZ190aW0ubyB0dGxtLm9cXG5uZXQvbWFjODAyMTEvdGVzdHMvTWFrZWZpbGUtMi1cXG5uZXQvbWFjODAyMTEvdGVzdHMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfTUFDODAyMTFfS1VOSVRfVEVTVCkgKz0gbWFjODAyMTEtdGVzdHMub1xcbi0tXFxubmV0L21hYzgwMjExL3RyYWNlLmMtMTMtXFxubmV0L21hYzgwMjExL3RyYWNlLmM6MTQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvdHJhY2UuYy0xNS12b2lkIF9fc2RhdGFfaW5mbyhjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbm5ldC9tYWM4MDIxMS90cmFjZV9tc2cuaC02LVxcbm5ldC9tYWM4MDIxMS90cmFjZV9tc2cuaDo3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL3RyYWNlX21zZy5oLTgtXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0yNzA9aWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTI5MC1cXHRcXHRcXHQgICAgIGllZWU4MDIxMV9pc19kYXRhKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpKSB7XFxubmV0L21hYzgwMjExL3R4LmM6MjkxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS90eC5jLTI5Mi1cXHRcXHRcXHRzZGF0YV9pbmZvKHR4LVxcdTAwM2VzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTE2OTE9c3RhdGljIGJvb2wgaWVlZTgwMjExX3R4X2ZyYWdzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMTcwNC1cXG5uZXQvbWFjODAyMTEvdHguYzoxNzA1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS90eC5jLTE3MDYtXFx0XFx0aWYgKFdBUk5fT05fT05DRShxIFxcdTAwM2U9IGxvY2FsLVxcdTAwM2Vody5xdWV1ZXMpKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0yNTEzPWludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTI1MzctXFx0XFx0YnJlYWs7XFxubmV0L21hYzgwMjExL3R4LmM6MjUzODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvdHguYy0yNTM5LVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTI2NTY9c3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMjY4Mi1cXG5uZXQvbWFjODAyMTEvdHguYzoyNjgzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS90eC5jLTI2ODQtXFx0aWYgKGxvY2FsLVxcdTAwM2Vmb3JjZV90eF9zdGF0dXMpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yNzU1LVxcdFxcdGJyZWFrO1xcbm5ldC9tYWM4MDIxMS90eC5jOjI3NTY6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3R4LmMtMjc1Ny1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yOTQzLVxcdFxcdCAgICAgICFpZWVlODAyMTFfaXNfb3VyX2FkZHIoc2RhdGEsIHNrYi1cXHUwMDNlZGF0YSArIEVUSF9BTEVOLCBOVUxMKSkpKSB7XFxubmV0L21hYzgwMjExL3R4LmM6Mjk0NDojaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvdHguYy0yOTQ1LVxcdFxcdG5ldF9pbmZvX3JhdGVsaW1pdGVkKFxcXCIlczogZHJvcHBlZCBmcmFtZSB0byAlcE0gKHVuYXV0aG9yaXplZCBwb3J0KVxcXFxuXFxcIixcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTMwMTctXFxubmV0L21hYzgwMjExL3R4LmM6MzAxODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvdHguYy0zMDE5LVxcdGlmIChtZXNoaGRybGVuIFxcdTAwM2UgMClcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTMwNjQtXFx0XFx0ICAgIGxpbmtfaWQgIT0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQpIHtcXG5uZXQvbWFjODAyMTEvdHguYzozMDY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS90eC5jLTMwNjYtXFx0XFx0XFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXFxcIiVzOiBkcm9wcGVkIGZyYW1lIHRvICVwTSB3aXRoIGJhZCBsaW5rIElEIHJlcXVlc3QgKCVkIHZzLiAlZClcXFxcblxcXCIsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0zNzQ3PXZvaWQgX19pZWVlODAyMTFfeG1pdF9mYXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMzc5My1cXG5uZXQvbWFjODAyMTEvdHguYzozNzk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS90eC5jLTM3OTUtXFx0aWYgKGxvY2FsLVxcdTAwM2Vmb3JjZV90eF9zdGF0dXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjAyLjkzMTA2NzEzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMDk0MDI1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhvc2UgY29kZSBzZWN0aW9uczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIG1hYzgwMjExIFRYIFBhdGgqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBtYWM4MDIxMSB0cmFuc21pdCBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb2RlIGhhbmRsZXMgdGhlIGNvbXBsZXggZGFuY2Ugb2YgZ2V0dGluZyBhIHBhY2tldCBmcm9tIHRoZSBkcml2ZXIgdG8gdGhlIGFpci4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gYG5ldC9tYWM4MDIxMS90eC5jYC4gTXkgaW5pdGlhbCB0YXJnZXRzIGFyZSBsaW5lcyAxODYwLTE5MDAgYW5kIDQ2ODAtNDc4MC4gVGhvc2Ugc2VjdGlvbnMgbGlrZWx5IHJlcHJlc2VudCBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgVFggcHJvY2VzcyDigJMgcGVyaGFwcyByZWxhdGVkIHRvIHBhY2tldCBzY2hlZHVsaW5nLCByYXRlIGFkYXB0YXRpb24sIGhhcmR3YXJlIGludGVyYWN0aW9ucywgb3IgbWF5YmUgZXZlbiBwb3dlciBzYXZlIGhhbmRsaW5nIG9uIHRoZSB0cmFuc21pdCBzaWRlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHNwZWNpZmljIGFyZWFzIHdpbGwgb2ZmZXIgZ29vZCBjb250ZXh0IGZvciB0aGUgcmVzdCBvZiB0aGUgZmlsZS5cblxuSSBhbHNvIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBjb25maWd1cmVkLCBzbyBJJ2xsIGJlIHJlZmVycmluZyB0byB0aGUgYEtjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhhdCdzIGdvaW5nIG9uLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBjaG9zZW4gY29uZmlndXJhdGlvbiwgYW5kIGhvdyB0aGVzZSBzZXR0aW5ncyBpbmZsdWVuY2UgdGhlIGNvZGUgcGF0aHMgaW4gYHR4LmNgIHRoYXQgSSdtIGV4YW1pbmluZy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZXNlIGZlYXR1cmVzIHJlbGF0ZSB0byBkaWZmZXJlbnQgaGFyZHdhcmUgcGxhdGZvcm1zIG9yIHByb3RvY29sIGltcGxlbWVudGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MDYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODowNi45NDA0NzE2MjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL3R4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRcXG4xODYxOlxcdC8qXFxuMTg2MjpcXHQgKiBMYXRlIGhhbmRsZXJzIGNhbiBiZSBjYWxsZWQgd2hpbGUgdGhlIHN0YSBsb2NrIGlzIGhlbGQuIEhhbmRsZXJzIHRoYXQgY2FuXFxuMTg2MzpcXHQgKiBjYXVzZSBwYWNrZXRzIHRvIGJlIGdlbmVyYXRlZCB3aWxsIGNhdXNlIGRlYWRsb2NrIVxcbjE4NjQ6XFx0ICovXFxuMTg2NTpcXHRzdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVyc19sYXRlKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXFxuMTg2NjpcXHR7XFxuMTg2NzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LVxcdTAwM2Vza2IpO1xcbjE4Njg6XFx0XFx0aWVlZTgwMjExX3R4X3Jlc3VsdCByZXMgPSBUWF9DT05USU5VRTtcXG4xODY5OlxcdFxcbjE4NzA6XFx0XFx0aWYgKCFpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIEhBU19SQVRFX0NPTlRST0wpKVxcbjE4NzE6XFx0XFx0XFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfcmF0ZV9jdHJsKTtcXG4xODcyOlxcdFxcbjE4NzM6XFx0XFx0aWYgKHVubGlrZWx5KGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX0lOVEZMX1JFVFJBTlNNSVNTSU9OKSkge1xcbjE4NzQ6XFx0XFx0XFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2dHgtXFx1MDAzZXNrYnMsIHR4LVxcdTAwM2Vza2IpO1xcbjE4NzU6XFx0XFx0XFx0dHgtXFx1MDAzZXNrYiA9IE5VTEw7XFxuMTg3NjpcXHRcXHRcXHRnb3RvIHR4aF9kb25lO1xcbjE4Nzc6XFx0XFx0fVxcbjE4Nzg6XFx0XFxuMTg3OTpcXHRcXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTtcXG4xODgwOlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7XFxuMTg4MTpcXHRcXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZSk7XFxuMTg4MjpcXHRcXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7XFxuMTg4MzpcXHRcXHQvKiBoYW5kbGVycyBhZnRlciBmcmFnbWVudCBtdXN0IGJlIGF3YXJlIG9mIHR4IGluZm8gZnJhZ21lbnRhdGlvbiEgKi9cXG4xODg0OlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3N0YXRzKTtcXG4xODg1OlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2VuY3J5cHQpO1xcbjE4ODY6XFx0XFx0aWYgKCFpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIEhBU19SQVRFX0NPTlRST0wpKVxcbjE4ODc6XFx0XFx0XFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2FsY3VsYXRlX2R1cmF0aW9uKTtcXG4xODg4OlxcdCN1bmRlZiBDQUxMX1RYSFxcbjE4ODk6XFx0XFxuMTg5MDpcXHQgdHhoX2RvbmU6XFxuMTg5MTpcXHRcXHRpZiAodW5saWtlbHkocmVzID09IFRYX0RST1ApKSB7XFxuMTg5MjpcXHRcXHRcXHR0eC1cXHUwMDNlc2RhdGEtXFx1MDAzZXR4X2hhbmRsZXJzX2Ryb3ArKztcXG4xODkzOlxcdFxcdFxcdGlmICh0eC1cXHUwMDNlc2tiKVxcbjE4OTQ6XFx0XFx0XFx0XFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIHR4LVxcdTAwM2Vza2IpO1xcbjE4OTU6XFx0XFx0XFx0ZWxzZVxcbjE4OTY6XFx0XFx0XFx0XFx0aWVlZTgwMjExX3B1cmdlX3R4X3F1ZXVlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LCBcXHUwMDI2dHgtXFx1MDAzZXNrYnMpO1xcbjE4OTc6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjE4OTg6XFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShyZXMgPT0gVFhfUVVFVUVEKSkge1xcbjE4OTk6XFx0XFx0XFx0STgwMl9ERUJVR19JTkModHgtXFx1MDAzZWxvY2FsLVxcdTAwM2V0eF9oYW5kbGVyc19xdWV1ZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODowNi45NDA2OTQ0MzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMyNDgwMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTUFDODAyMTEgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBNQUM4MDIxMS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHdpcmVsZXNzIHN0YWNrIGFyZSBjb25maWd1cmVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlLCBkZWJ1Z2dpbmcgcG90ZW50aWFsIGlzc3Vlcywgb3IgZXZlbiBzaW1wbHkgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMuIEkgbmVlZCBhIGNsZWFyIHZpZXcgb2YgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCBob3cgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGludGVyYWN0LiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBkcml2ZXIgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzLiBMZXQncyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoLi4uIHRpbWUgdG8gc2VlIHdoYXQgdGhvc2UgS2NvbmZpZyBmaWxlcyByZXZlYWwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODowOS4xNzMxNzc2OTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMjgzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MDkuMjIwMjEwMDEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY0NTIwMDI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCA0MCBsaW5lcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBzdGFjayBhcmUgbGlrZWx5IGRlZmluZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IG1lbnUgZW50cmllcywgZGVmYXVsdCB2YWx1ZXMsIGhlbHAgdGV4dHMsIGFuZCBwb3RlbnRpYWxseSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLiBJJ20gbG9va2luZyBmb3IgdGhlIGZvdW5kYXRpb25hbCBidWlsZGluZyBibG9ja3MsIHRoZSB0b3AtbGV2ZWwgY2F0ZWdvcmllcyB1bmRlciB3aGljaCBtb3JlIHNwZWNpZmljIHdpcmVsZXNzIGZlYXR1cmVzIGFyZSBncm91cGVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIGFuZCBzdHJ1Y3R1cmUgb2YgdGhlIGNvbmZpZ3VyYWJsZSBlbGVtZW50cyB3aXRoaW4gdGhlIGRyaXZlci4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yOlxuXG4qKm1hYzgwMjExIENvbmZpZ3VyYXRpb24gT3ZlcnZpZXcqKlxuXG5BbHJpZ2h0LCBJJ20gbm93IGluIHRoZSBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBza2ltIHRoZSBmaXJzdCA0MCBsaW5lcy4gSW1tZWRpYXRlbHkgSSdtIHRyeWluZyB0byBpZGVudGlmeSB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuIFdoYXQgYXJlIHRoZSBtYWpvciBzZWN0aW9ucz8gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXMgZGVmaW5lZD8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIGxpbmVzIHdpbGwgZGVmaW5lIHRoZSBjb3JlIG1vZHVsZSwgcGVyaGFwcyBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgYSBmZXcgaGlnaC1sZXZlbCBvcHRpb25zIGxpa2UgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBlbnRpcmUgc3Vic3lzdGVtLiBBcmUgdGhlcmUgYW55IGluaXRpYWwgZGVmYXVsdHMgc2V0LCBvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQganVtcHMgb3V0PyBUaGlzIGlzIHRoZSBpbml0aWFsIHNldHVwOyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIG1vcmUgc3BlY2lmaWMgc2V0dGluZ3MgYnVpbGQuIEkgYW0gZ29pbmcgdG8gdHJ5IGFuZCBpZGVudGlmeSBob3cgdGhpcyBtb2R1bGUgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWFjODAyMTEgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzE5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MTEuODY1NDE0MDU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xcbiAgMjI6XFx0XFx0Ym9vbFxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcXG4gIDI1OlxcdFxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4gIDI2OlxcdFxcdHNlbGVjdCBNQUM4MDIxMV9IQVNfUkNcXG4gIDI3OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAnbWluc3RyZWwnIFRYIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y2hvaWNlXFxuICAzMjpcXHRcXHRwcm9tcHQgXFxcIkRlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4gIDMzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFfSEFTX1JDXFxuICAzNDpcXHRcXHRkZWZhdWx0IE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgZGVmYXVsdCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXFxuICAzNzpcXHRcXHQgIG1hYzgwMjExIHdpbGwgdXNlLiBOb3RlIHRoYXQgdGhpcyBkZWZhdWx0IGNhbiBzdGlsbCBiZVxcbiAgMzg6XFx0XFx0ICBvdmVycmlkZGVuIHRocm91Z2ggdGhlIGllZWU4MDIxMV9kZWZhdWx0X3JjX2FsZ28gbW9kdWxlXFxuICAzOTpcXHRcXHQgIHBhcmFtZXRlciBpZiBkaWZmZXJlbnQgYWxnb3JpdGhtcyBhcmUgYXZhaWxhYmxlLlxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjExLjg2NTQ5NDk2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDE2MzEwMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbWFjODAyMTEgVFggUGF0aCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgY2hhbmdlOiBJdCdzIGEgcmVsb2NhdGlvbiBvZiB0aGUgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgY2hlY2sgd2l0aGluIHRoZSBtYWM4MDIxMSB0cmFuc21pdCBwYXRoLiBQcmV2aW91c2x5LCB0aGlzIGNoZWNrIHdhcyBwZXJmb3JtZWQgaW4gdHdvIHBsYWNlcywgYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKClgIGFuZCBgaWVlZTgwMjExXzgwMjNfeG1pdCgpYCwgdmVyeSBlYXJseSBpbiB0aGUgdHJhbnNtaXQgcHJvY2Vzcy4gVGhlIHBhdGNoIHN0cmF0ZWdpY2FsbHkgaW50cm9kdWNlcyBhIG5ldyB0cmFuc21pdCBoYW5kbGVyLCBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCgpYCwgYW5kIGludGVncmF0ZXMgaXQgbGF0ZXIgaW4gdGhlIHByb2Nlc3MgdmlhIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpYC4gVGhpcyBhbHNvIG1lYW5zIHRoZSBkdXBsaWNhdGUgY2hlY2tzIGluIHRoZSBwcmV2aW91cyB0d28gZnVuY3Rpb25zIGhhdmUgYmVlbiByZW1vdmVkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXZhbHVhdGUgd2hldGhlciB0aGlzIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nLiBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgeWVzLiBtYWM4MDIxMSBpcyByZWFkaWx5IGFjY2Vzc2libGUgZm9yIHRlc3RpbmcsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIG1hYzgwMjExX2h3c2ltLCBuZXRsaW5rL25sODAyMTEsIGFuZCBuZXR3b3JrIHNvY2tldHMgd2l0aCBwYWNrZXQgaW5qZWN0aW9uLiBUaGUgbW9kaWZpY2F0aW9uIGRpcmVjdGx5IGltcGFjdHMgZXhlY3V0YWJsZSBrZXJuZWwgbmV0d29ya2luZyBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgVFggcGF0aCBoYW5kbGluZyBkdXJpbmcgc2Nhbm5pbmcgYW5kIG9mZi1jaGFubmVsIHRyYW5zaXRpb25zLiBNb3ZpbmcgdGhpcyBjaGVjayB0byBhIFwibGF0ZVwiIGhhbmRsZXIgYWx0ZXJzIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyB0aW1lbGluZSwgaW50cm9kdWNpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIHN0YXRlIHRyYW5zaXRpb25zLCBhbmQgaW50cm9kdWNlIG9yIHJldmVhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBzY2FubmluZyBvcGVyYXRpb25zIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJdCdzIGFsc28gd29ydGggaW52ZXN0aWdhdGluZyBhbnkgc2hpZnRzIGluIHNrYiBsaWZlY3ljbGVzIG9yIHF1ZXVlIGhhbmRsaW5nIHRoYXQgdGhpcyBjaGFuZ2UgbWlnaHQgY2F1c2UuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGBpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsYCBpcyBub24tc3RhdGljIG9yIGlmIHRoZSBgZGVidWdfbm9pbmxpbmVgIG1hY3JvIGNhdXNlcyBpdCB0byBiZSBpbmxpbmVkLiBJIHNlZSB0aGF0IHRoaXMgaXMgY29uZGl0aW9uYWwuIGBDT05GSUdfTUFDODAyMTFfTk9JTkxJTkVgIGRldGVybWluZXMgaWYgYGRlYnVnX25vaW5saW5lYCBpcyBkZWZpbmVkIGFzIGBub2lubGluZWAgKHdoaWNoIHByb2R1Y2VzIGEgc3ltYm9sKSBvciBpcyBhbiBlbXB0eSBkZWZpbml0aW9uLCBhbmQgdGhlcmVmb3JlLCBhbiBpbmxpbmVkIGZ1bmN0aW9uLiBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgaWYgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBsb29rIGZvciB0aGlzIHN5bWJvbC5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBpZGVudGlmeSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGFuZCBoYW5kbGVycyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYGludm9rZV90eF9oYW5kbGVyc19sYXRlKClgIGFuZCBmcmFtZSB0cmFuc21pc3Npb24uIEknbGwgaGF2ZSB0byBncmVwIGZvciBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVgIGFuZCBjYWxsZXIgZnVuY3Rpb25zIGluIGBuZXQvbWFjODAyMTEvdHguY2AgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIG5ldyBoYW5kbGVyIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MTkuODgxODA5MDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjI4NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludm9rZV90eF9oYW5kbGVyc19sYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvdHguYz0xODI4PXN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0xODY0LSAqL1xcbm5ldC9tYWM4MDIxMS90eC5jOjE4NjU6c3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbm5ldC9tYWM4MDIxMS90eC5jLTE4NjYte1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MTkwNj1zdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMTkxMS1cXHRcXHRyZXR1cm4gcjtcXG5uZXQvbWFjODAyMTEvdHguYzoxOTEyOlxcdHJldHVybiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSh0eCk7XFxubmV0L21hYzgwMjExL3R4LmMtMTkxMy19XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0xOTU4PXN0YXRpYyBib29sIGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTE5OTUtXFxubmV0L21hYzgwMjExL3R4LmM6MTk5NjpcXHRpZiAoIWludm9rZV90eF9oYW5kbGVyc19sYXRlKFxcdTAwMjZ0eCkpXFxubmV0L21hYzgwMjExL3R4LmMtMTk5Ny1cXHRcXHRyZXN1bHQgPSBfX2llZWU4MDIxMV90eChsb2NhbCwgXFx1MDAyNnR4LnNrYnMsIHR4LnN0YSwgdHhwZW5kaW5nKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTM4ODg9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDAxNS1cXHR9IGVsc2Uge1xcbm5ldC9tYWM4MDIxMS90eC5jOjQwMTY6XFx0XFx0aWYgKGludm9rZV90eF9oYW5kbGVyc19sYXRlKFxcdTAwMjZ0eCkpXFxubmV0L21hYzgwMjExL3R4LmMtNDAxNy1cXHRcXHRcXHRnb3RvIGJlZ2luO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODoxOS45MjgwNDQ1ODVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUwMzU1ODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoZXNlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIDgwMi4xMSB0cmFuc21pc3Npb246XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIDgwMi4xMSBUcmFuc21pdCBQYXRoKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJ20gbG9va2luZyBhdCBhIHNlcXVlbmNlIG9mIGZ1bmN0aW9ucyB0aGF0IGxpa2VseSByZXByZXNlbnQgdGhlIGNvcmUgb2YgdGhlIDgwMi4xMSB0cmFuc21pc3Npb24gcHJvY2VzcyBpbiB0aGlzIGNvZGViYXNlLiBJIHNlZSBgaWVlZTgwMjExX3R4YCwgd2hpY2ggaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgZW50cnkgZnVuY3Rpb24gZm9yIGluaXRpYXRpbmcgYSB0cmFuc21pc3Npb24uIFRoZW4gd2UgaGF2ZSBgaWVlZTgwMjExX3R4X2RlcXVldWVgLCB3aGljaCB0ZWxscyBtZSB0aGF0IHRoaXMgYXJjaGl0ZWN0dXJlIGxpa2VseSB1c2VzIGEgcXVldWUtYmFzZWQgc3lzdGVtIGZvciBtYW5hZ2luZyBvdXRnb2luZyBwYWNrZXRzIOKAkyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5leHQsIGBpZWVlODAyMTFfODAyM194bWl0YCBpcyBpbnRlcmVzdGluZy4gVGhlIFwiODAyM1wiIG5hbWluZyBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIHRoZSBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uIHByb2Nlc3MsIGNvbnZlcnRpbmcgdGhlIDgwMi4xMSBmcmFtZXMgdG8gYW4gRXRoZXJuZXQgZm9ybWF0LCBwZXJoYXBzIGZvciBhIGJyaWRnZSBvciBhIHdpcmVkIGNvbm5lY3Rpb24gaW4gYSBtaXhlZCBuZXR3b3JrLiBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVgIGhpbnRzIGF0IGEgY2FsbGJhY2sgb3IgYSBwb3N0LXByb2Nlc3Npbmcgc3RhZ2UsIHdoZXJlIHNvbWUgZGVsYXllZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgaXMgY29tcGxldGVkLiBUaGlzIGNvdWxkIGJlIHRoaW5ncyBsaWtlIHVwZGF0aW5nIHN0YXRpc3RpY3MsIG1hbmFnaW5nIHJldHJpZXMsIG9yIGZyZWVpbmcgYnVmZmVycy4gRmluYWxseSwgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgIGlzIGltbWVkaWF0ZWx5IGludHJpZ3VpbmcuIFRoZSBcIm9mZmNoYW5uZWxcIiBwYXJ0IGltcGxpZXMgc29tZSBmb3JtIG9mIGNoYW5uZWwgc2Nhbm5pbmcgb3IgY29udHJvbCwgd2hpY2ggc3VnZ2VzdHMgdGhlIHBvc3NpYmlsaXR5IG9mIGhhbmRsaW5nIHRyYW5zbWlzc2lvbiBvbiBub24tcHJpbWFyeSBjaGFubmVscywgbWF5YmUgZm9yIGZlYXR1cmVzIGxpa2UgREZTIChEeW5hbWljIEZyZXF1ZW5jeSBTZWxlY3Rpb24pLCBvciBjaGFubmVsIGhvcHBpbmcgaW4gc29tZSBjaXJjdW1zdGFuY2VzLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBpZWVlODAyMTFfODAyM194bWl0YCwgSSBzaG91bGQgaW52ZXN0aWdhdGUgaXRzIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgd2hhdCAqY2FsbHMqIHRoYXQgZnVuY3Rpb24gd2lsbCBpbGx1bWluYXRlIGhvdyBhbmQgd2hlcmUgdGhlIEV0aGVybmV0LXJlbGF0ZWQgZW5jYXBzdWxhdGlvbiBoYXBwZW5zIGluIHRoZSBvdmVyYWxsIHRyYW5zbWlzc2lvbiBmbG93LiBUaGlzIHdpbGwgbGlrZWx5IHByb3ZpZGUgdmFsdWFibGUgY29udGV4dCBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRpZmZlcmVudCBmcmFtZSB0eXBlcyBhbmQgbmV0d29yayBpbnRlcmZhY2VzLiBJdCdzIGEga2V5IHBhcnQgb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MTEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODoyNC40MzE2MDU1OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTQzNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV84MDIzX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS90eC5jPTQ2Njc9c3RhdGljIGJvb2wgaWVlZTgwMjExX3R4XzgwMjMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00Njg2LVxcbm5ldC9tYWM4MDIxMS90eC5jOjQ2ODc6c3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvdHguYy00Njg4LVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NDc5MD1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ4MzUtXFx0c2tfcGFjaW5nX3NoaWZ0X3VwZGF0ZShza2ItXFx1MDAzZXNrLCBzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LnR4X3NrX3BhY2luZ19zaGlmdCk7XFxubmV0L21hYzgwMjExL3R4LmM6NDgzNjpcXHRpZWVlODAyMTFfODAyM194bWl0KHNkYXRhLCBkZXYsIHN0YSwga2V5LCBza2IpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTQ4MzctXFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjI0LjQ3Njc1NDYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDYyNDkwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIHRoZSA4MDIuMyBUcmFuc21pc3Npb24gUGF0aCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gc3BlY2lmaWNhbGx5IHNjcnV0aW5pemUgdGhlIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjNgIGZ1bmN0aW9uIGFuZCBpdHMgY291bnRlcnBhcnQsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzYC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUsIGVzcGVjaWFsbHkgYXJvdW5kIDgwMi4zIGZyYW1lcywgd2hpY2ggaXMgb2Z0ZW4gYSBzb3VyY2Ugb2YgY29udGVudGlvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgbm90IGp1c3QgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLCBidXQgYWxzbyB3aGVyZSB0aGV5J3JlIGJlaW5nIGNhbGxlZCBmcm9tLiBBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIG9yIGNvZGUgcGF0aHMgdHJpZ2dlcmluZyB0aGVzZSBmdW5jdGlvbnM/IEFyZSB0aGVyZSBwYXJ0aWN1bGFyIGNhbGxlcnMgb3IgY29udGV4dHMgdGhhdCBzZWVtIHRvIGJlIGV4aGliaXRpbmcgcGVyZm9ybWFuY2UgaXNzdWVzLCBvciBhdCBsZWFzdCB0aGF0IHdhcnJhbnQgY2xvc2VyIGluc3BlY3Rpb24/IFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgYWN0aW9uYWJsZSBpbnNpZ2h0IGlzIGxpa2VseSB0byBsaWUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgYW5kIGRhdGEgZmxvdyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIGlzIGNydWNpYWwgdG8gaWRlbnRpZnlpbmcgYW55IGJvdHRsZW5lY2tzLiBJ4oCZbGwgc3RhcnQgdHJhY2luZyBhbmQgcHJvZmlsaW5nIHRvIGRldGVybWluZSB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjI3LjQyMzAwNjAzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ2Mjc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdWJpZl9zdGFydF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMjI4PW5ldGRldl90eF90IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjI5LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjMwOm5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIzMS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjIzMjpuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIzMy1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjIzNDp2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjM1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9kYXRhaWZfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTQ0LVxcdC5uZG9fdW5pbml0XFx0XFx0PSBpZWVlODAyMTFfdW5pbml0LFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk0NTpcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0LFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0Ni1cXHQubmRvX3NldF9yeF9tb2RlXFx0PSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0LFxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MTA0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9kYXRhaWZfODAyM19vcHMgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDUwLVxcdC5uZG9fdW5pbml0XFx0XFx0PSBpZWVlODAyMTFfdW5pbml0LFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEwNTE6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTItXFx0Lm5kb19zZXRfcnhfbW9kZVxcdD0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYz01Mzc9c3RhdGljIHZvaWQgaWVlZTgwMjExX3RkbHNfdGRfdHhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YXR1cy5jLTU2Ni1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6NTY3OlxcdFxcdFxcdGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHRlYXJkb3duX3NrYiwgc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01NjgtXFx0XFx0fVxcbi0tXFxubmV0L21hYzgwMjExL3RkbHMuYz05OTc9aWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL3RkbHMuYy0xMTIyLVxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG5uZXQvbWFjODAyMTEvdGRscy5jOjExMjM6XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIGRldiwgZmxhZ3MsXFxubmV0L21hYzgwMjExL3RkbHMuYy0xMTI0LVxcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLCBOVUxMKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTQzNTI9RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KTtcXG5uZXQvbWFjODAyMTEvdHguYy00MzUzLVxcbm5ldC9tYWM4MDIxMS90eC5jOjQzNTQ6dm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21hYzgwMjExL3R4LmMtNDM1NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00NTQyPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4X29uZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ1NTItXFx0Y3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xcbm5ldC9tYWM4MDIxMS90eC5jOjQ1NTM6XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChvdXQsIHNkYXRhLVxcdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIE5VTEwpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTQ1NTQtfVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NDU1Nj1zdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDU2Ny1cXG5uZXQvbWFjODAyMTEvdHguYzo0NTY4OlxcdFxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBzZGF0YS1cXHUwMDNlZGV2LCAwLCBjdHJsX2ZsYWdzLFxcbm5ldC9tYWM4MDIxMS90eC5jLTQ1NjktXFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ1ODAtLyoqXFxubmV0L21hYzgwMjExL3R4LmM6NDU4MTogKiBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCAtIG5ldGlmIHN0YXJ0X3htaXQgZnVuY3Rpb24gZm9yIDgwMi4zIHZpZnNcXG5uZXQvbWFjODAyMTEvdHguYy00NTgyLSAqIEBza2I6IHBhY2tldCB0byBiZSBzZW50XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00NTg4LSAqL1xcbm5ldC9tYWM4MDIxMS90eC5jOjQ1ODk6bmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbWFjODAyMTEvdHguYy00NTkwLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDYwOC1cXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnF1ZXVlKSkpXFxubmV0L21hYzgwMjExL3R4LmM6NDYwOTpcXHRcXHRcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxcbm5ldC9tYWM4MDIxMS90eC5jLTQ2MTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00NjE5LW5vcm1hbDpcXG5uZXQvbWFjODAyMTEvdHguYzo0NjIwOlxcdFxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsXFxubmV0L21hYzgwMjExL3R4LmMtNDYyMS1cXHRcXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTQ2ODc9c3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ3MTQtXFx0XFx0XFx0LyogZmFsbCBiYWNrIHRvIG5vbi1vZmZsb2FkIHNsb3cgcGF0aCAqL1xcbm5ldC9tYWM4MDIxMS90eC5jOjQ3MTU6XFx0XFx0XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIGRldiwgMCxcXG5uZXQvbWFjODAyMTEvdHguYy00NzE2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NDc3MD1zdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ3ODktXFxubmV0L21hYzgwMjExL3R4LmM6NDc5MDpzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbWFjODAyMTEvdHguYy00NzkxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00ODM5LXNraXBfb2ZmbG9hZDpcXG5uZXQvbWFjODAyMTEvdHguYzo0ODQwOlxcdGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2KTtcXG5uZXQvbWFjODAyMTEvdHguYy00ODQxLW91dDpcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ4NDQtXFxubmV0L21hYzgwMjExL3R4LmM6NDg0NTpuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21hYzgwMjExL3R4LmMtNDg0Ni1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ4NjItXFx0XFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZxdWV1ZSkpKVxcbm5ldC9tYWM4MDIxMS90eC5jOjQ4NjM6XFx0XFx0XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzKHNrYiwgZGV2KTtcXG5uZXQvbWFjODAyMTEvdHguYy00ODY0LVxcdH0gZWxzZSB7XFxubmV0L21hYzgwMjExL3R4LmM6NDg2NTpcXHRcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc2tiLCBkZXYpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTQ4NjYtXFx0fVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NjUwMz1pbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNjYxMC1cXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxubmV0L21hYzgwMjExL3R4LmM6NjYxMTpcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2tiLVxcdTAwM2VkZXYsIGZsYWdzLCBjdHJsX2ZsYWdzLCBjb29raWUpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTY2MTItXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz02NjE3PWludCBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy02NjM4LVxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG5uZXQvbWFjODAyMTEvdHguYzo2NjM5OlxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBza2ItXFx1MDAzZWRldiwgMCxcXG5uZXQvbWFjODAyMTEvdHguYy02NjQwLVxcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjI3LjQ2OTQ3MzMyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODMyMjk1MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyA4MDIuMTEgVFggUGF0aCBTeW1ib2xzIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoZSA4MDIuMTEgdHJhbnNtaXQgcGF0aC4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6IGBpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsYCwgYGludm9rZV90eF9oYW5kbGVyc19sYXRlYCwgYGllZWU4MDIxMV84MDIzX3htaXRgLCBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgLCBhbmQgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjNgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFuZCBoYW5kbGVycyBJIG5lZWQgdG8gdHJhY2UuXG5cbk5vdywgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGBDT05GSUdfTUFDODAyMTFgLiBSaWdodCwgYENPTkZJR19NQUM4MDIxMWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX0NGRzgwMjExYCwgd2hpY2ggaXMgdG8gYmUgZXhwZWN0ZWQuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBub3RoaW5nIGVsc2UgaXMgcmVxdWlyZWQsIHRob3VnaCwganVzdCBpbiBjYXNlIHRoZXJlJ3Mgc29tZXRoaW5nIG5vbi1vYnZpb3VzLCBvciBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlIGtlcm5lbCB2ZXJzaW9uLiBTbyBJJ2xsIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgaW4gYm90aCBgbmV0L21hYzgwMjExL2AgYW5kIGBuZXQvd2lyZWxlc3MvYCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB2ZXJpZnkgdGhlcmUgYXJlIG5vIGhpZGRlbiByZXF1aXJlbWVudHMuIEdvb2QsIGdvb2QuIFdpdGggdGhpcyBpbml0aWFsIGZyYW1ld29yaywgSSBzaG91bGQgYmUgYWJsZSB0byBuYXZpZ2F0ZSB0aGUgY29kZSBtb3JlIGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODozNC4zMDE3NzExNTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDkyNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMVxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MzQuMzQ5ODY3NjUzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2Mjg1NTQ0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMSB0aHJvdWdoIDMwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgdG9wLWxldmVsIGRlZmluaXRpb25zIGFuZCBwZXJoYXBzIHRoZSBtYWluIG1lbnUgZW50cmllcyBhcmUgbG9jYXRlZC4gSSdsbCBiZXQgaXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGUgd2lyZWxlc3MgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUuIEkgZXhwZWN0IHRvIGdldCBhIGZlZWwgZm9yIGhvdyB2YXJpb3VzIHdpcmVsZXNzIHRlY2hub2xvZ2llcyBvciBmZWF0dXJlcyBhcmUgaW5pdGlhbGx5IGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCwgaGVscGluZyBtZSBuYXZpZ2F0ZSB0aGUgbW9yZSBzcGVjaWZpYywgZGV0YWlsZWQgY29uZmlndXJhdGlvbnMgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzA5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MzguOTc4NDI0NDU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0lSRUxFU1NfRVhUXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBXRVhUX0NPUkVcXG4gICA2OlxcdFxcdGRlZl9ib29sIHlcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIFdFWFRfUFJPQ1xcbiAgMTA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgV0VYVF9QUklWXFxuICAxNTpcXHRcXHRib29sXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBDRkc4MDIxMVxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuICAyMDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDIyOlxcdFxcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxcbiAgMjM6XFx0XFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJ3RcXG4gIDI0OlxcdFxcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxcbiAgMjg6XFx0XFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXFxuICAzNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MzguOTc4NDkxOTg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MDY3NDU4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBFdmFsdWF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBjb2RlLiBMZXQgbWUgc2VlLi4uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGFuZCBwb3NzaWJseSBgTkw4MDIxMWAgb3IgZXZlbiBgTUFDODAyMTFfSFdTSU1gPyBXYWl0IGEgbWludXRlLCBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgIGFyZSAqdGhlKiBkaXJlY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBjb21waWxpbmcgdGhpcyBwYXJ0aWN1bGFyIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBNQUM4MDIxMV9IV1NJTWAgaXMgYSByZWxldmFudCBkcml2ZXIgb3B0aW9uLCBvciBpZiBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgIGFsb25lIGFyZSBnb29kIGVub3VnaC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZywgYWggeWVzLCBgQ09ORklHX01BQzgwMjExYCAqZGVwZW5kcyogb24gYENPTkZJR19DRkc4MDIxMWAuIFJpZ2h0LCBzbyBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgIGl0IGlzLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgaW1wb3J0YW50IGluIG15IGFzc2Vzc21lbnQuIExldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrOlxuXG4xLiAgSXMgdGhpcyBwYXRjaCBldmVuIG1vZGlmeWluZyByZWFjaGFibGUgY29kZT8gWXVwLCBpdCdzIG1lc3Npbmcgd2l0aCB0aGUgdHJhbnNtaXQgcGF0aCBpbiBgbWFjODAyMTFgLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgb2ZmLWNoYW5uZWwgZnJhbWUgZmlsdGVyaW5nIGR1cmluZyBzY2FubmluZy4gVGhhdCdzIGRlZmluaXRlbHkgcmVsZXZhbnQuXG4yLiAgSXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IFllYWgsIGFic29sdXRlbHkuIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG4zLiAgUmlnaHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBNQUM4MDIxMWAgYW5kIGBDRkc4MDIxMWAuIEp1c3QgdG8gY29uZmlybS5cbjQuICBBbmQgZmluYWxseSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZTpcbiAgICAqICAgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgXG4gICAgKiAgIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZWBcbiAgICAqICAgYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jYFxuICAgICogICBgaWVlZTgwMjExXzgwMjNfeG1pdGBcbiAgICAqICAgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YFxuICAgICogICBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyM2BcblxuT2theSwgdGhhdCBzZWVtcyBsaWtlIGEgY29tcHJlaGVuc2l2ZSBsaXN0LiBJJ20gY29uZmlkZW50IHdpdGggdGhpcywgc28gbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM5NywiT3V0cHV0VG9rZW5zIjoyODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODo0My42ODUyNDAwNzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjcyOTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbFwiLFxuICAgIFwiaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVcIixcbiAgICBcImllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jXCIsXG4gICAgXCJpZWVlODAyMTFfODAyM194bWl0XCIsXG4gICAgXCJpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdFwiLFxuICAgIFwiaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyM1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbWFjODAyMTEgVFggcGF0aCBieSBjb25zb2xpZGF0aW5nIG9mZi1jaGFubmVsIGZyYW1lIGRyb3BwaW5nIGR1cmluZyBzb2Z0d2FyZSBzY2FubmluZyBpbnRvIGEgZGVkaWNhdGVkIGxhdGUgVFggaGFuZGxlciAoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCkgaW52b2tlZCB2aWEgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKSwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGNoZWNrcyBmcm9tIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKCkgYW5kIGllZWU4MDIxMV84MDIzX3htaXQoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB0cmFuc21pc3Npb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsXCIsXG4gICAgXCJpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZVwiLFxuICAgIFwiaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2NcIixcbiAgICBcImllZWU4MDIxMV84MDIzX3htaXRcIixcbiAgICBcImllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XCIsXG4gICAgXCJpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtYWM4MDIxMSBUWCBwYXRoIGJ5IGNvbnNvbGlkYXRpbmcgb2ZmLWNoYW5uZWwgZnJhbWUgZHJvcHBpbmcgZHVyaW5nIHNvZnR3YXJlIHNjYW5uaW5nIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIHZpYSBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpLCB3aGlsZSByZW1vdmluZyByZWR1bmRhbnQgY2hlY2tzIGZyb20gaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MoKSBhbmQgaWVlZTgwMjExXzgwMjNfeG1pdCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCB3aXJlbGVzcyBpbnRlcmZhY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKSwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODo0My43NjE5NzQ4MDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDY0MjA4MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6NDMuNzYyNDYwNDQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTgwNjM3MTc4NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBvZmYtY2hhbm5lbCBmcmFtZSBmaWx0ZXJpbmcgaW4gbWFjODAyMTEgYnkgbW92aW5nIHRoZSBzb2Z0d2FyZSBzY2FubmluZyBvZmYtY2hhbm5lbCBkcm9wIGNoZWNrIGZyb20gZWFybHkgVFggaGFuZGxpbmcgKGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jIGFuZCBpZWVlODAyMTFfODAyM194bWl0KSBpbnRvIGEgZGVkaWNhdGVkIGxhdGUgVFggaGFuZGxlciAoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCkgaW52b2tlZCBpbiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHBhY2tldCBkcm9wIGRlY2lzaW9ucyBkdXJpbmcgVFggcHJvY2Vzc2luZyBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgc2tiIGhlYWRlcnMgYW5kIHN0YXRlIGJpdG1hcHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIG9yIGJ1ZmZlciBib3VuZGFyeSBjYWxjdWxhdGlvbnMuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjb3ZlciBhbnkgcGFja2V0IGhhbmRsaW5nIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YjdjZDViY2M0ODJkZWI4MDJiODkyMjdmYzg0MGZhOWI2OTgxYjAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDo0Nzo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IDkxYjE0MTEyZTI0ZjAuLjA4YTM5MjcyZjI2YTAgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC0yNjksNyArMjY5LDYgQEAgaWVlZTgwMjExX3R4X2hfZHluYW1pY19wcyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lXG4gaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbiB7XG4tXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LVx1MDAzZXNrYik7XG4gXHRib29sIGFzc29jID0gZmFsc2U7XG5AQCAtMjc3LDIwICsyNzYsNiBAQCBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIFx0aWYgKHVubGlrZWx5KGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKVxuIFx0XHRyZXR1cm4gVFhfQ09OVElOVUU7XG4gXG4tXHRpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlc2Nhbm5pbmcpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCBcdTAwMjZ0eC1cdTAwM2VzZGF0YS1cdTAwM2VzdGF0ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFpZWVlODAyMTFfaXNfYW55X251bGxmdW5jKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSlcbi1cdFx0Lypcbi1cdFx0ICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5XG4tXHRcdCAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZVxuLVx0XHQgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZVxuLVx0XHQgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG9cbi1cdFx0ICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW1cbi1cdFx0ICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gVFhfRFJPUDtcbi1cbiBcdGlmICh0eC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9PQ0IpXG4gXHRcdHJldHVybiBUWF9DT05USU5VRTtcbiBcbkBAIC04MDUsNiArNzkwLDMzIEBAIGllZWU4MDIxMV90eF9oX3JhdGVfY3RybChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIFx0cmV0dXJuIFRYX0NPTlRJTlVFO1xuIH1cbiBcbitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZVxuK2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbit7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LVx1MDAzZXNrYik7XG4rXG4rXHRpZiAodW5saWtlbHkoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpXG4rXHRcdHJldHVybiBUWF9DT05USU5VRTtcbitcbitcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCBcdTAwMjZ0eC1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FubmluZykpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsIFx1MDAyNnR4LVx1MDAzZXNkYXRhLVx1MDAzZXN0YXRlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFdoZW4gc29mdHdhcmUgc2Nhbm5pbmcgb25seSBudWxsZnVuYyBmcmFtZXMgKHRvIG5vdGlmeVxuK1x0XHQgKiB0aGUgc2xlZXAgc3RhdGUgdG8gdGhlIEFQKSBhbmQgcHJvYmUgcmVxdWVzdHMgKGZvciB0aGVcbitcdFx0ICogYWN0aXZlIHNjYW4pIGFyZSBhbGxvd2VkLCBhbGwgb3RoZXIgZnJhbWVzIHNob3VsZCBub3QgYmVcbitcdFx0ICogc2VudCBhbmQgd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvXG4rXHRcdCAqIG5vbmV0aGVsZXNzLCBkcm9wIHRoZW0gdG8gYXZvaWQgc2VuZGluZyB0aGVtXG4rXHRcdCAqIG9mZi1jaGFubmVsLiBTZWUgX19pZWVlODAyMTFfc3RhcnRfc2NhbigpIGZvciBtb3JlLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIFRYX0RST1A7XG4rXHR9XG4rXG4rXHRyZXR1cm4gVFhfQ09OVElOVUU7XG4rfVxuK1xuIHN0YXRpYyBfX2xlMTYgaWVlZTgwMjExX3R4X25leHRfc2VxKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkKVxuIHtcbiBcdHUxNiAqc2VxID0gXHUwMDI2c3RhLVx1MDAzZXRpZF9zZXFbdGlkXTtcbkBAIC0xODY0LDYgKzE4NzYsNyBAQCBzdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVyc19sYXRlKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4gXHRcdGdvdG8gdHhoX2RvbmU7XG4gXHR9XG4gXG4rXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTtcbiBcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7XG4gXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZSk7XG4gXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7XG5AQCAtNDY4NiwxMCArNDY5OSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRxdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc2RhdGEsIHN0YSwgc2tiKTtcbiBcdHNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlKTtcbiBcbi1cdGlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCBcdTAwMjZsb2NhbC1cdTAwM2VzY2FubmluZykpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsIFx1MDAyNnNkYXRhLVx1MDAzZXN0YXRlKSlcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cbiBcdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHVubGlrZWx5KCFza2IpKVxuIFx0XHRyZXR1cm47XG5AQCAtNDc1NiwxMSArNDc2NSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBsZW4pO1xuIFxuIFx0aWVlZTgwMjExX3R4XzgwMjMoc2RhdGEsIHNrYiwgc3RhLCBmYWxzZSk7XG4tXG4tXHRyZXR1cm47XG4tXG4tb3V0X2ZyZWU6XG4tXHRrZnJlZV9za2Ioc2tiKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaWVlZTgwMjExX2NoZWNrX21jYXN0X29mZmxvYWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODo0My43NjI0NjEzMDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU1MjA4NTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gYSBXaXJlbGVzcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIGNoYW5nZXMgdG91Y2hpbmcgbmV0d29ya2luZyBjb2RlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNvbXBsZXggcGFja2V0IHByb2Nlc3NpbmcuXG5cbkZpcnN0LCBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYG5ldC9tYWM4MDIxMS90eC5jYC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBvZmYtY2hhbm5lbCBzY2FubmluZyB3aXRoaW4gdGhlIHRyYW5zbWlzc2lvbiBwYXRoLiBTcGVjaWZpY2FsbHk6XG5cbjEuICBUaGUgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgY2hlY2sgaW4gYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jYCBoYXMgYmVlbiAqcmVtb3ZlZCouIFRoaXMgaXMgY29uY2VybmluZywgYmVjYXVzZSBpdCdzIGJlZW4gbW92ZWQuIEFueXRpbWUgYSBjaGVjayBpcyByZW1vdmVkLCBJIG5lZWQgdG8ga25vdyB3aHkuIEFyZSB3ZSBsb3NpbmcgYSBjaGVjaz8gSXMgdGhlIGZ1bmN0aW9uYWxpdHkgc3RpbGwgcHJlc2VudD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UuXG4yLiAgQSBuZXcgaGFuZGxlciwgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgLCBoYXMgYmVlbiAqY3JlYXRlZCogYW5kIGlzIGJlaW5nIGNhbGxlZCBsYXRlciBpbiB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgdmlhIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQncyBhIHJlZmFjdG9yaW5nLCBidXQgYSByZWZhY3RvcmluZyB0aGF0ICpjb3VsZCogaW50cm9kdWNlIHN1YnRsZSB0aW1pbmcgZGlmZmVyZW5jZXMgb3IgY29kZSBwYXRoIGNoYW5nZXMuXG4zLiAgVGhlIGVhcmx5IGNoZWNrIGluIGBpZWVlODAyMTFfODAyM194bWl0YCByZWdhcmRpbmcgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgaGFzIGFsc28gYmVlbiAqcmVtb3ZlZCouIFRoaXMgbWlycm9ycyB0aGUgY2hhbmdlIGluIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgc28gaXQncyBhIHJlbGF0ZWQgY29kZSBwYXRoLlxuXG5TbywgaXQgbG9va3MgbGlrZSB0aGUgZ3VhcmQgaXMgc3RpbGwgaW4gcGxhY2UsIGl0IGhhcyBiZWVuIG1vdmVkIHRvIGEgbGF0ZSBzdGFnZSBoYW5kbGVyLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGRvbmUgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBpcyBzdGlsbCBndWFyZGluZyB0aGUgY29kZSBwYXRocyBhcHByb3ByaWF0ZWx5LlxuXG5Ob3csIEkgbmVlZCB0byBrbm93IHRoZSAqd2h5Ki4gV2FzIHRoaXMgcHVyZWx5IGZvciBjb2RlIGNsYXJpdHk/IFBlcmZvcm1hbmNlPyBPciBpcyB0aGVyZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGx1cmtpbmcgaGVyZT8gSSdtIGdvaW5nIHRvIGxldmVyYWdlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBzZWFyY2ggZm9yIG1vcmUgY29udGV4dCBvbiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGV4cGxhbmF0aW9ucyBmb3IgdGhlIG9yaWdpbmFsIGRlY2lzaW9uIHRvIG1vdmUgdGhlIGZ1bmN0aW9uLiBJJ2xsIGxvb2sgZm9yIGJ1ZyByZXBvcnRzLCBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnMsIGNvbW1pdCBtZXNzYWdlcywgYW5kIHJlbGF0ZWQgY29kZSBjaGFuZ2VzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gdGVsbCBpZiB0aGVzZSBjaGFuZ2VzIGFyZSBzb3VuZCwgYW5kIGlmIHRoZXkgbWF5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjUxLjMxNDU1MDg5OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NDA1MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvdHguYz0xODI4PXN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0xODY0LSAqL1xcbm5ldC9tYWM4MDIxMS90eC5jOjE4NjU6c3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbm5ldC9tYWM4MDIxMS90eC5jLTE4NjYte1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MTkwNj1zdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMTkxMS1cXHRcXHRyZXR1cm4gcjtcXG5uZXQvbWFjODAyMTEvdHguYzoxOTEyOlxcdHJldHVybiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSh0eCk7XFxubmV0L21hYzgwMjExL3R4LmMtMTkxMy19XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0xOTU4PXN0YXRpYyBib29sIGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTE5OTUtXFxubmV0L21hYzgwMjExL3R4LmM6MTk5NjpcXHRpZiAoIWludm9rZV90eF9oYW5kbGVyc19sYXRlKFxcdTAwMjZ0eCkpXFxubmV0L21hYzgwMjExL3R4LmMtMTk5Ny1cXHRcXHRyZXN1bHQgPSBfX2llZWU4MDIxMV90eChsb2NhbCwgXFx1MDAyNnR4LnNrYnMsIHR4LnN0YSwgdHhwZW5kaW5nKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTM4ODg9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDAxNS1cXHR9IGVsc2Uge1xcbm5ldC9tYWM4MDIxMS90eC5jOjQwMTY6XFx0XFx0aWYgKGludm9rZV90eF9oYW5kbGVyc19sYXRlKFxcdTAwMjZ0eCkpXFxubmV0L21hYzgwMjExL3R4LmMtNDAxNy1cXHRcXHRcXHRnb3RvIGJlZ2luO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODo1MS4zNTk5OTY5NzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzczOTEzNjA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYHR4LmNgOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHR4LmNgJ3MgQ29yZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGB0eC5jYCBiZXR3ZWVuIGxpbmVzIDE4NTAgYW5kIDE5MjAuIFRoYXQncyBhIGRlY2VudCBjaHVuayBvZiBjb2RlLCBsaWtlbHkgaGFuZGxpbmcgYSBjcnVjaWFsIGFzcGVjdCBvZiB0aGUgdHJhbnNhY3Rpb24gcHJvY2Vzc2luZyBwaXBlbGluZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFdoYXQgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgY2FsbGVkIGp1c3QgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHNlY3Rpb24/IEknbGwgcHJvYmFibHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGB0eC5jYCB0byBwcm9wZXJseSBvcmllbnQgbXlzZWxmLiBJcyB0aGlzIHJlbGF0ZWQgdG8gdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiwgc2lnbmluZywgYnJvYWRjYXN0aW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cblxuTXkgZmlyc3QgcGFzcyB3aWxsIGJlIHRvIGlkZW50aWZ5IGFueSBtYWpvciBjb250cm9sIGZsb3cgc3RhdGVtZW50cyBsaWtlIGBpZmAsIGBmb3JgLCBvciBgc3dpdGNoYCBzdGF0ZW1lbnRzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSBsb2dpYyBmbG93LiBOZXh0LCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGF0IHJhbmdlLiBBcmUgdGhlcmUgYW55IGNhbGxzIHRvIG90aGVyIG1vZHVsZXMgb3IgY3VzdG9tLWRlZmluZWQgZnVuY3Rpb25zPyBUaG9zZSBhcmUgbGlrZWx5IHdoZXJlIHRoZSBoZWF2eSBsaWZ0aW5nLCBvciBhbnkgc3BlY2lhbGl6ZWQgbG9naWMsIGlzIGhhcHBlbmluZy4gQXJlIHRoZXJlIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBleHRlcm5hbCBzeXN0ZW1zPyBBcmUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgcmFuZ2UgdGhhdCBJIG5lZWQgdG8gYmUgZmFtaWxpYXIgd2l0aD8gVW5kZXJzdGFuZGluZyBob3cgdGhlIGRhdGEgZmxvd3MgaW4gYW5kIG91dCBvZiB0aG9zZSBmdW5jdGlvbnMgd2lsbCBiZSBlc3NlbnRpYWwuIEFueSByZXNvdXJjZSBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiBqdW1wcyBvdXQgYXMgYW4gaW1tZWRpYXRlIHBvdGVudGlhbCBpc3N1ZSB0aGF0IG5lZWRzIHRvIGJlIHNjcnV0aW5pemVkLlxuXG5JIGFudGljaXBhdGUgc2VlaW5nIGEgbG90IG9mIGJpdHdpc2Ugb3BlcmF0aW9ucywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gaGFzaGluZywgc2VyaWFsaXphdGlvbiwgb3IgY29uc2Vuc3VzIG1lY2hhbmlzbXMuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBhbnkgbGlicmFyaWVzIG9yIGV4dGVybmFsIGRlcGVuZGVuY2llcyB1c2VkLiBGaW5hbGx5LCBJJ2xsIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaGlzIHNlY3Rpb24gc2VlbXMgcG90ZW50aWFsbHkgaW52b2x2ZWQgd2l0aCB0cmFuc2FjdGlvbnMsIHNvIEknbGwgYmUgYWxlcnQgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaW1wYWN0IHRocm91Z2hwdXQsIGxhdGVuY3ksIG9yIHNlY3VyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDE2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6NTUuMDk5MTM2MDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS90eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NTA6XFx0XFx0XFx0ZWxzZVxcbjE4NTE6XFx0XFx0XFx0XFx0aWVlZTgwMjExX3B1cmdlX3R4X3F1ZXVlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LCBcXHUwMDI2dHgtXFx1MDAzZXNrYnMpO1xcbjE4NTI6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjE4NTM6XFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShyZXMgPT0gVFhfUVVFVUVEKSkge1xcbjE4NTQ6XFx0XFx0XFx0STgwMl9ERUJVR19JTkModHgtXFx1MDAzZWxvY2FsLVxcdTAwM2V0eF9oYW5kbGVyc19xdWV1ZWQpO1xcbjE4NTU6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjE4NTY6XFx0XFx0fVxcbjE4NTc6XFx0XFxuMTg1ODpcXHRcXHRyZXR1cm4gMDtcXG4xODU5OlxcdH1cXG4xODYwOlxcdFxcbjE4NjE6XFx0LypcXG4xODYyOlxcdCAqIExhdGUgaGFuZGxlcnMgY2FuIGJlIGNhbGxlZCB3aGlsZSB0aGUgc3RhIGxvY2sgaXMgaGVsZC4gSGFuZGxlcnMgdGhhdCBjYW5cXG4xODYzOlxcdCAqIGNhdXNlIHBhY2tldHMgdG8gYmUgZ2VuZXJhdGVkIHdpbGwgY2F1c2UgZGVhZGxvY2shXFxuMTg2NDpcXHQgKi9cXG4xODY1OlxcdHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcXG4xODY2OlxcdHtcXG4xODY3OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtXFx1MDAzZXNrYik7XFxuMTg2ODpcXHRcXHRpZWVlODAyMTFfdHhfcmVzdWx0IHJlcyA9IFRYX0NPTlRJTlVFO1xcbjE4Njk6XFx0XFxuMTg3MDpcXHRcXHRpZiAoIWllZWU4MDIxMV9od19jaGVjayhcXHUwMDI2dHgtXFx1MDAzZWxvY2FsLVxcdTAwM2VodywgSEFTX1JBVEVfQ09OVFJPTCkpXFxuMTg3MTpcXHRcXHRcXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwpO1xcbjE4NzI6XFx0XFxuMTg3MzpcXHRcXHRpZiAodW5saWtlbHkoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfSU5URkxfUkVUUkFOU01JU1NJT04pKSB7XFxuMTg3NDpcXHRcXHRcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZ0eC1cXHUwMDNlc2ticywgdHgtXFx1MDAzZXNrYik7XFxuMTg3NTpcXHRcXHRcXHR0eC1cXHUwMDNlc2tiID0gTlVMTDtcXG4xODc2OlxcdFxcdFxcdGdvdG8gdHhoX2RvbmU7XFxuMTg3NzpcXHRcXHR9XFxuMTg3ODpcXHRcXG4xODc5OlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpO1xcbjE4ODA6XFx0XFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfbWljaGFlbF9taWNfYWRkKTtcXG4xODgxOlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKTtcXG4xODgyOlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2ZyYWdtZW50KTtcXG4xODgzOlxcdFxcdC8qIGhhbmRsZXJzIGFmdGVyIGZyYWdtZW50IG11c3QgYmUgYXdhcmUgb2YgdHggaW5mbyBmcmFnbWVudGF0aW9uISAqL1xcbjE4ODQ6XFx0XFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc3RhdHMpO1xcbjE4ODU6XFx0XFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZW5jcnlwdCk7XFxuMTg4NjpcXHRcXHRpZiAoIWllZWU4MDIxMV9od19jaGVjayhcXHUwMDI2dHgtXFx1MDAzZWxvY2FsLVxcdTAwM2VodywgSEFTX1JBVEVfQ09OVFJPTCkpXFxuMTg4NzpcXHRcXHRcXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jYWxjdWxhdGVfZHVyYXRpb24pO1xcbjE4ODg6XFx0I3VuZGVmIENBTExfVFhIXFxuMTg4OTpcXHRcXG4xODkwOlxcdCB0eGhfZG9uZTpcXG4xODkxOlxcdFxcdGlmICh1bmxpa2VseShyZXMgPT0gVFhfRFJPUCkpIHtcXG4xODkyOlxcdFxcdFxcdHR4LVxcdTAwM2VzZGF0YS1cXHUwMDNldHhfaGFuZGxlcnNfZHJvcCsrO1xcbjE4OTM6XFx0XFx0XFx0aWYgKHR4LVxcdTAwM2Vza2IpXFxuMTg5NDpcXHRcXHRcXHRcXHRpZWVlODAyMTFfZnJlZV90eHNrYihcXHUwMDI2dHgtXFx1MDAzZWxvY2FsLVxcdTAwM2VodywgdHgtXFx1MDAzZXNrYik7XFxuMTg5NTpcXHRcXHRcXHRlbHNlXFxuMTg5NjpcXHRcXHRcXHRcXHRpZWVlODAyMTFfcHVyZ2VfdHhfcXVldWUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIFxcdTAwMjZ0eC1cXHUwMDNlc2ticyk7XFxuMTg5NzpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTg5ODpcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KHJlcyA9PSBUWF9RVUVVRUQpKSB7XFxuMTg5OTpcXHRcXHRcXHRJODAyX0RFQlVHX0lOQyh0eC1cXHUwMDNlbG9jYWwtXFx1MDAzZXR4X2hhbmRsZXJzX3F1ZXVlZCk7XFxuMTkwMDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTkwMTpcXHRcXHR9XFxuMTkwMjpcXHRcXG4xOTAzOlxcdFxcdHJldHVybiAwO1xcbjE5MDQ6XFx0fVxcbjE5MDU6XFx0XFxuMTkwNjpcXHRzdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbjE5MDc6XFx0e1xcbjE5MDg6XFx0XFx0aW50IHIgPSBpbnZva2VfdHhfaGFuZGxlcnNfZWFybHkodHgpO1xcbjE5MDk6XFx0XFxuMTkxMDpcXHRcXHRpZiAocilcXG4xOTExOlxcdFxcdFxcdHJldHVybiByO1xcbjE5MTI6XFx0XFx0cmV0dXJuIGludm9rZV90eF9oYW5kbGVyc19sYXRlKHR4KTtcXG4xOTEzOlxcdH1cXG4xOTE0OlxcdFxcbjE5MTU6XFx0Ym9vbCBpZWVlODAyMTFfdHhfcHJlcGFyZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuMTkxNjpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE5MTc6XFx0XFx0XFx0XFx0ICAgICAgaW50IGJhbmQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICoqc3RhKVxcbjE5MTg6XFx0e1xcbjE5MTk6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB2aWZfdG9fc2RhdGEodmlmKTtcXG4xOTIwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4xOTIxOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB0eDtcXG4xOTIyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IyO1xcbjE5MjM6XFx0XFxuMTkyNDpcXHRcXHRpZiAoaWVlZTgwMjExX3R4X3ByZXBhcmUoc2RhdGEsIFxcdTAwMjZ0eCwgTlVMTCwgc2tiKSA9PSBUWF9EUk9QKSB7XFxuMTkyNTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xOTI2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xOTI3OlxcdFxcdH1cXG4xOTI4OlxcdFxcbjE5Mjk6XFx0XFx0aW5mby1cXHUwMDNlYmFuZCA9IGJhbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjU1LjEwMDA2MjM5MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzI2MDkxODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBvdGVudGlhbCBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoIGFuZCB3aGV0aGVyIGl0IGludHJvZHVjZXMgYW55IHJpc2tzIHRoYXQgS01TQU4gd291bGQgbmVlZCB0byBmbGFnLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2UncmUgbW92aW5nIHRoZSBvZmYtY2hhbm5lbCBjaGVjayBmb3IgVFggcGFja2V0cyB3aXRoaW4gbWFjODAyMTEsIHNwZWNpZmljYWxseSBmcm9tIHRoZSBlYXJseSB0cmFuc21pdCBoYW5kbGVycyAoYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jYCBjYWxsZWQgaW4gYGludm9rZV90eF9oYW5kbGVyc19lYXJseWApIGFuZCB0aGUgODAyLjMgdHJhbnNtaXQgcGF0aCAoYGllZWU4MDIxMV84MDIzX3htaXRgKSB0byB0aGUgKmxhdGUqIHRyYW5zbWl0IGhhbmRsZXIgcGlwZWxpbmUsIHNwZWNpZmljYWxseSBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbGAgd2l0aGluIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZWAuXG5cbk15IGZpcnN0IGltbWVkaWF0ZSBxdWVzdGlvbjogZG9lcyB0aGlzIGludm9sdmUgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHRoYXQgY291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBHb2luZyB0aHJvdWdoIHRoZSB1c3VhbCBjaGVja2xpc3Q6XG5cbjEuICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb246KiogTm8sIHRoaXMgcGF0Y2ggZG9lc24ndCBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UgdmlhIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgc29ja2V0cywgb3IgQlBGIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBiZWluZyBleHBvc2VkLlxuMi4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogTm8uIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gSXQncyByZWFkaW5nIGV4aXN0aW5nIHN0cnVjdCBmaWVsZHMgbGlrZSBgdHgtXHUwMDNlbG9jYWwtXHUwMDNlc2Nhbm5pbmdgLCBgdHgtXHUwMDNlc2RhdGEtXHUwMDNlc3RhdGVgLCBgaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2xgLCBhbmQgYGluZm8tXHUwMDNlZmxhZ3NgIC0gYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsaXplZC5cbjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqICBJIHNlZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBpbml0aWFsaXphdGlvbnMgd2hlcmUgYW4gdW5pbml0aWFsaXplZCBmaWVsZCBtaWdodCBjYXVzZSBpc3N1ZXMgbGF0ZXIuXG40LiAgKipCb3VuZHMgQ2hlY2tzL0xlbmd0aCBDaGFuZ2VzOioqIE5vIG1vZGlmaWNhdGlvbnMgdGhhdCB3b3VsZCBhbGxvdyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcy5cblxuU28sIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGVyZSdzIG5vIGluaGVyZW50IHJpc2sgb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3Jpbmcgb2YgKndoZW4qIHRoZSBvZmYtY2hhbm5lbCBjaGVjayBoYXBwZW5zLCBub3QgKmhvdyogdGhlIGRhdGEgaXMgaGFuZGxlZC4gTXkgdW5kZXJzdGFuZGluZyBvZiBLTVNBTiBpcyB0aGF0IGl0J3MgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBLQVNBTi9vdGhlciBzYW5pdGl6ZXJzIGNvdmVyIG1lbW9yeSBjb3JydXB0aW9uLCBVQUYsIE9PQiwgZXRjLiwgd2hpY2ggdGhpcyBpc24ndCB0b3VjaGluZy4gVGhpcyBwYXRjaCBkZWFscyB3aXRoIG1vdmluZyB0aGUgZmlsdGVyLiBJdCBvcGVyYXRlcyBvbiAqZnVsbHkgaW5pdGlhbGl6ZWQqIFNLQiBjb250cm9sIGJ1ZmZlcnMgYW5kIGhlYWRlcnMuXG5cblRoZXJlZm9yZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yIG9mIHRoZSBvZmYtY2hhbm5lbCBzY2FubmluZyBjaGVjayBpbiBtYWM4MDIxMSwgbW92aW5nIHRoZSBsb2NhdGlvbiBidXQgbm90IGFsdGVyaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBpbnRyb2R1Y2luZyBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCB0cmlnZ2VyIEtNU0FOLiBLQVNBTi9vdGhlciBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODk3LCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjAxLjgyNjE1NzQ3OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG9mZi1jaGFubmVsIGZyYW1lIGZpbHRlcmluZyBpbiBtYWM4MDIxMSBieSBtb3ZpbmcgdGhlIHNvZnR3YXJlIHNjYW5uaW5nIG9mZi1jaGFubmVsIGRyb3AgY2hlY2sgZnJvbSBlYXJseSBUWCBoYW5kbGluZyAoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MgYW5kIGllZWU4MDIxMV84MDIzX3htaXQpIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIGluIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCkuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcGFja2V0IGRyb3AgZGVjaXNpb25zIGR1cmluZyBUWCBwcm9jZXNzaW5nIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBza2IgaGVhZGVycyBhbmQgc3RhdGUgYml0bWFwcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3IgYnVmZmVyIGJvdW5kYXJ5IGNhbGN1bGF0aW9ucy4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIGFueSBwYWNrZXQgaGFuZGxpbmcgb3IgbGlmZWN5Y2xlIGlzc3VlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBvZmYtY2hhbm5lbCBmcmFtZSBmaWx0ZXJpbmcgaW4gbWFjODAyMTEgYnkgbW92aW5nIHRoZSBzb2Z0d2FyZSBzY2FubmluZyBvZmYtY2hhbm5lbCBkcm9wIGNoZWNrIGZyb20gZWFybHkgVFggaGFuZGxpbmcgKGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jIGFuZCBpZWVlODAyMTFfODAyM194bWl0KSBpbnRvIGEgZGVkaWNhdGVkIGxhdGUgVFggaGFuZGxlciAoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCkgaW52b2tlZCBpbiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHBhY2tldCBkcm9wIGRlY2lzaW9ucyBkdXJpbmcgVFggcHJvY2Vzc2luZyBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgc2tiIGhlYWRlcnMgYW5kIHN0YXRlIGJpdG1hcHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIG9yIGJ1ZmZlciBib3VuZGFyeSBjYWxjdWxhdGlvbnMuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjb3ZlciBhbnkgcGFja2V0IGhhbmRsaW5nIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowg2xfv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 14:30:15 +0000 UTC FinishedAt: 2026-09-07 14:49:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "068e5a0bc57e57d24cbf38def29cc5fb4db9a0df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211" ], "series_id": "1826f810-fb1b-4c2b-9727-21a36ecb7b59" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_tx_h_check_offchannel", "invoke_tx_handlers_late", "ieee80211_tx_h_check_assoc", "ieee80211_8023_xmit", "ieee80211_subif_start_xmit", "ieee80211_subif_start_xmit_8023" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCYjMzQ7LAogICAgJiMzNDtpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfODAyM194bWl0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgb2ZmLWNoYW5uZWwgZnJhbWUgZmlsdGVyaW5nIGluIG1hYzgwMjExIGJ5IG1vdmluZyB0aGUgc29mdHdhcmUgc2Nhbm5pbmcgb2ZmLWNoYW5uZWwgZHJvcCBjaGVjayBmcm9tIGVhcmx5IFRYIGhhbmRsaW5nIChpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyBhbmQgaWVlZTgwMjExXzgwMjNfeG1pdCkgaW50byBhIGRlZGljYXRlZCBsYXRlIFRYIGhhbmRsZXIgKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpIGludm9rZWQgaW4gaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKS5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcGFja2V0IGRyb3AgZGVjaXNpb25zIGR1cmluZyBUWCBwcm9jZXNzaW5nIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBza2IgaGVhZGVycyBhbmQgc3RhdGUgYml0bWFwcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3IgYnVmZmVyIGJvdW5kYXJ5IGNhbGN1bGF0aW9ucy4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIGFueSBwYWNrZXQgaGFuZGxpbmcgb3IgbGlmZWN5Y2xlIGlzc3VlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1hYzgwMjExIFRYIHBhdGggYnkgY29uc29saWRhdGluZyBvZmYtY2hhbm5lbCBmcmFtZSBkcm9wcGluZyBkdXJpbmcgc29mdHdhcmUgc2Nhbm5pbmcgaW50byBhIGRlZGljYXRlZCBsYXRlIFRYIGhhbmRsZXIgKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpIGludm9rZWQgdmlhIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCksIHdoaWxlIHJlbW92aW5nIHJlZHVuZGFudCBjaGVja3MgZnJvbSBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYygpIGFuZCBpZWVlODAyMTFfODAyM194bWl0KCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHdpcmVsZXNzIGludGVyZmFjZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YjdjZDViY2M0ODJkZWI4MDJiODkyMjdmYzg0MGZhOWI2OTgxYjAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDo0Nzo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCA5MWIxNDExMmUyNGYwLi4wOGEzOTI3MmYyNmEwIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtMjY5LDcgJiM0MzsyNjksNiBAQCBpZWVlODAyMTFfdHhfaF9keW5hbWljX3BzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4gc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmVcbiBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIHtcbi1cbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtXHUwMDNlc2tiKTtcbiBcdGJvb2wgYXNzb2MgPSBmYWxzZTtcbkBAIC0yNzcsMjAgJiM0MzsyNzYsNiBAQCBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIFx0aWYgKHVubGlrZWx5KGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKVxuIFx0XHRyZXR1cm4gVFhfQ09OVElOVUU7XG4gXG4tXHRpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlc2Nhbm5pbmcpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCBcdTAwMjZ0eC1cdTAwM2VzZGF0YS1cdTAwM2VzdGF0ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFpZWVlODAyMTFfaXNfYW55X251bGxmdW5jKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSlcbi1cdFx0Lypcbi1cdFx0ICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5XG4tXHRcdCAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZVxuLVx0XHQgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZVxuLVx0XHQgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG9cbi1cdFx0ICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW1cbi1cdFx0ICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gVFhfRFJPUDtcbi1cbiBcdGlmICh0eC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9PQ0IpXG4gXHRcdHJldHVybiBUWF9DT05USU5VRTtcbiBcbkBAIC04MDUsNiAmIzQzOzc5MCwzMyBAQCBpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbiBcdHJldHVybiBUWF9DT05USU5VRTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lXG4mIzQzO2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LVx1MDAzZXNrYik7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSlcbiYjNDM7XHRcdHJldHVybiBUWF9DT05USU5VRTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsIFx1MDAyNnR4LVx1MDAzZWxvY2FsLVx1MDAzZXNjYW5uaW5nKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsIFx1MDAyNnR4LVx1MDAzZXNkYXRhLVx1MDAzZXN0YXRlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhaWVlZTgwMjExX2lzX2FueV9udWxsZnVuYyhoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBXaGVuIHNvZnR3YXJlIHNjYW5uaW5nIG9ubHkgbnVsbGZ1bmMgZnJhbWVzICh0byBub3RpZnlcbiYjNDM7XHRcdCAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZVxuJiM0MztcdFx0ICogYWN0aXZlIHNjYW4pIGFyZSBhbGxvd2VkLCBhbGwgb3RoZXIgZnJhbWVzIHNob3VsZCBub3QgYmVcbiYjNDM7XHRcdCAqIHNlbnQgYW5kIHdlIHNob3VsZCBub3QgZ2V0IGhlcmUsIGJ1dCBpZiB3ZSBkb1xuJiM0MztcdFx0ICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW1cbiYjNDM7XHRcdCAqIG9mZi1jaGFubmVsLiBTZWUgX19pZWVlODAyMTFfc3RhcnRfc2NhbigpIGZvciBtb3JlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXR1cm4gVFhfRFJPUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBUWF9DT05USU5VRTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19sZTE2IGllZWU4MDIxMV90eF9uZXh0X3NlcShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZClcbiB7XG4gXHR1MTYgKnNlcSA9IFx1MDAyNnN0YS1cdTAwM2V0aWRfc2VxW3RpZF07XG5AQCAtMTg2NCw2ICYjNDM7MTg3Niw3IEBAIHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbiBcdFx0Z290byB0eGhfZG9uZTtcbiBcdH1cbiBcbiYjNDM7XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTtcbiBcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7XG4gXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZSk7XG4gXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7XG5AQCAtNDY4NiwxMCAmIzQzOzQ2OTksNiBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfODAyM194bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0cXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7XG4gXHRza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZSk7XG4gXG4tXHRpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgXHUwMDI2bG9jYWwtXHUwMDNlc2Nhbm5pbmcpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCBcdTAwMjZzZGF0YS1cdTAwM2VzdGF0ZSkpXG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXG4gXHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcbiBcdGlmICh1bmxpa2VseSghc2tiKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTQ3NTYsMTEgJiM0Mzs0NzY1LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGllZWU4MDIxMV90cHRfbGVkX3RyaWdfdHgobG9jYWwsIGxlbik7XG4gXG4gXHRpZWVlODAyMTFfdHhfODAyMyhzZGF0YSwgc2tiLCBzdGEsIGZhbHNlKTtcbi1cbi1cdHJldHVybjtcbi1cbi1vdXRfZnJlZTpcbi1cdGtmcmVlX3NrYihza2IpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwmIzM0OywKICAgICYjMzQ7aW52b2tlX3R4X2hhbmRsZXJzX2xhdGUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExXzgwMjNfeG1pdCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbWFjODAyMTEgVFggcGF0aCBieSBjb25zb2xpZGF0aW5nIG9mZi1jaGFubmVsIGZyYW1lIGRyb3BwaW5nIGR1cmluZyBzb2Z0d2FyZSBzY2FubmluZyBpbnRvIGEgZGVkaWNhdGVkIGxhdGUgVFggaGFuZGxlciAoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCkgaW52b2tlZCB2aWEgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKSwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGNoZWNrcyBmcm9tIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKCkgYW5kIGllZWU4MDIxMV84MDIzX3htaXQoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB0cmFuc21pc3Npb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZiN2NkNWJjYzQ4MmRlYjgwMmI4OTIyN2ZjODQwZmE5YjY5ODFiMDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE0OjQ3OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCA5MWIxNDExMmUyNGYwLi4wOGEzOTI3MmYyNmEwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMjY5LDcgJiM0MzsyNjksNiBAQCBpZWVlODAyMTFfdHhfaF9keW5hbWljX3BzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0mZ3Q7c2tiLSZndDtkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtJmd0O3NrYik7CiAJYm9vbCBhc3NvYyA9IGZhbHNlOwpAQCAtMjc3LDIwICYjNDM7Mjc2LDYgQEAgaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIAlpZiAodW5saWtlbHkoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAotCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmYW1wO3R4LSZndDtsb2NhbC0mZ3Q7c2Nhbm5pbmcpKSAmYW1wOyZhbXA7Ci0JICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsICZhbXA7dHgtJmd0O3NkYXRhLSZndDtzdGF0ZSkgJmFtcDsmYW1wOwotCSAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItJmd0O2ZyYW1lX2NvbnRyb2wpICZhbXA7JmFtcDsKLQkgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLSZndDtmcmFtZV9jb250cm9sKSkKLQkJLyoKLQkJICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5Ci0JCSAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZQotCQkgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZQotCQkgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG8KLQkJICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW0KLQkJICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuCi0JCSAqLwotCQlyZXR1cm4gVFhfRFJPUDsKLQogCWlmICh0eC0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX09DQikKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCkBAIC04MDUsNiAmIzQzOzc5MCwzMyBAQCBpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKJiM0MztzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQomIzQzO2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0mZ3Q7c2tiLSZndDtkYXRhOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LSZndDtza2IpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpCiYjNDM7CQlyZXR1cm4gVFhfQ09OVElOVUU7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmYW1wO3R4LSZndDtsb2NhbC0mZ3Q7c2Nhbm5pbmcpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCAmYW1wO3R4LSZndDtzZGF0YS0mZ3Q7c3RhdGUpICZhbXA7JmFtcDsKJiM0MzsJICAgICFpZWVlODAyMTFfaXNfcHJvYmVfcmVxKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLSZndDtmcmFtZV9jb250cm9sKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFdoZW4gc29mdHdhcmUgc2Nhbm5pbmcgb25seSBudWxsZnVuYyBmcmFtZXMgKHRvIG5vdGlmeQomIzQzOwkJICogdGhlIHNsZWVwIHN0YXRlIHRvIHRoZSBBUCkgYW5kIHByb2JlIHJlcXVlc3RzIChmb3IgdGhlCiYjNDM7CQkgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZQomIzQzOwkJICogc2VudCBhbmQgd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvCiYjNDM7CQkgKiBub25ldGhlbGVzcywgZHJvcCB0aGVtIHRvIGF2b2lkIHNlbmRpbmcgdGhlbQomIzQzOwkJICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiBUWF9EUk9QOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBUWF9DT05USU5VRTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19sZTE2IGllZWU4MDIxMV90eF9uZXh0X3NlcShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZCkKIHsKIAl1MTYgKnNlcSA9ICZhbXA7c3RhLSZndDt0aWRfc2VxW3RpZF07CkBAIC0xODY0LDYgJiM0MzsxODc2LDcgQEAgc3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogCQlnb3RvIHR4aF9kb25lOwogCX0KIAomIzQzOwlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTsKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9taWNoYWVsX21pY19hZGQpOwogCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKTsKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7CkBAIC00Njg2LDEwICYjNDM7NDY5OSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7CiAJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWUpOwogCi0JaWYgKHVubGlrZWx5KHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZhbXA7bG9jYWwtJmd0O3NjYW5uaW5nKSkgJmFtcDsmYW1wOwotCSAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCAmYW1wO3NkYXRhLSZndDtzdGF0ZSkpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KIAlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoIXNrYikpCiAJCXJldHVybjsKQEAgLTQ3NTYsMTEgJiM0Mzs0NzY1LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAlpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBsZW4pOwogCiAJaWVlZTgwMjExX3R4XzgwMjMoc2RhdGEsIHNrYiwgc3RhLCBmYWxzZSk7Ci0KLQlyZXR1cm47Ci0KLW91dF9mcmVlOgotCWtmcmVlX3NrYihza2IpOwogfQogCiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoIGFuZCBpdHMgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwYXRjaCByZWxhdGVkIHRvIG9mZi1jaGFubmVsIG9wZXJhdGlvbiB3aXRoaW4gdGhlIGBuZXQvbWFjODAyMTFgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdHJhbnNtaXQgYmVoYXZpb3IuIFRoZSBkaWZmIHBvaW50cyBzcXVhcmVseSBhdCBgbmV0L21hYzgwMjExL3R4LmNgLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgaW4gYW55IDgwMi4xMSBpbXBsZW1lbnRhdGlvbi4KClRoZSBmaXJzdCBjaGFuZ2UgaW4gYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKClgIGp1bXBzIG91dC4gUmVtb3ZpbmcgdGhlIG9mZi1jaGFubmVsIGNoZWNrIGR1cmluZyBzY2FubmluZyBpcyBpbnRlcmVzdGluZy4gSXQgaW1wbGllcyBhIHNoaWZ0IGluIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgb2ZmLWNoYW5uZWwgYWN0aXZpdHkgd2hlbiBhIHN0YXRpb24gaXMgYWN0aXZlbHkgc2Nhbm5pbmcgZm9yIG5ldHdvcmtzLiBUaGVuLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKClgIGFuZCB0aGUgbGF0ZSBpbnZvY2F0aW9uIHdpdGhpbiBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKWAgaXMgY3JpdGljYWwuIFRoaXMgc2lnbmFscyBhIG5ldyB0eCBoYW5kbGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoYW5kbGUgb2ZmLWNoYW5uZWwgc2NlbmFyaW9zIGFuZCBpdCBzdWdnZXN0cyB0aGF0IHRoZSBvZmYtY2hhbm5lbCBoYW5kbGluZyBsb2dpYyBpcyBub3cgYmVpbmcgZGVmZXJyZWQgdG8gdGhlIGxhdGVyIHN0YWdlcyBvZiB0aGUgdHJhbnNtaXQgcHJvY2Vzcy4gVGhpcyBtYXkgaW1wYWN0IHZhcmlvdXMgYXNwZWN0cywgc3VjaCBhcyB0aHJvdWdocHV0LCBsYXRlbmN5LCBvciBldmVuIGZyYW1lIG9yZGVyaW5nLiBJdCB3b3VsZCBiZSBpbXBvcnRhbnQgdG8gc3R1ZHkgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGluIGRldGFpbC4KCkFkZGl0aW9uYWxseSwgdGhlIHJlbW92YWwgb2YgdGhlIHNwZWNpZmljIGNoZWNrIHdpdGhpbiBgaWVlZTgwMjExXzgwMjNfeG1pdCgpYCBpcyB3b3J0aCBub3RpbmcuIFRoaXMgYGdvdG8gb3V0X2ZyZWVgIHN0YXRlbWVudCB3YXMgbGlrZWx5IGEgZmFzdC1wYXRoIG9wdGltaXphdGlvbiBvciBhIHNhZmVndWFyZCB0byBwcmV2ZW50IHRyYW5zbWlzc2lvbiBvbiBvZmYtY2hhbm5lbC4gSXRzIHJlbW92YWwsIGVzcGVjaWFsbHkgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgbmV3IGhhbmRsZXIsIGluZGljYXRlcyBhIHBvdGVudGlhbGx5IG1vcmUgbnVhbmNlZCBhbmQgZmxleGlibGUgYXBwcm9hY2ggdG8gb2ZmLWNoYW5uZWwgdHJhbnNtaXNzaW9uLiBJdCBhbHNvIHN1Z2dlc3RzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNoZWNrIHdhcyBubyBsb25nZXIgbmVlZGVkIGJlY2F1c2UgdGhlIG5ldyBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCgpYCBoYW5kbGVyIGhhcyByZXBsYWNlZCBpdCBvciBpcyB0YWtpbmcgY2FyZSBvZiB0aGUgd29yayBkb25lIGJ5IHRoZSBlYXJsaWVyIGNoZWNrLgoKVGhlIG5leHQgcXVlc3Rpb246IGhvdyB2dWxuZXJhYmxlIGlzIHRoaXMgY29kZSB0byBmdXp6aW5nPyBLbm93aW5nIHRoYXQgYG1hYzgwMjExYCBpcyBoZWF2aWx5IGV4ZXJjaXNlZCBieSBzeXprYWxsZXIgdGhyb3VnaCBgbWFjODAyMTFfaHdzaW1gLCBubDgwMjExLCBhbmQgc3RhbmRhcmQgc29ja2V0IHRyYW5zbWlzc2lvbnMsIEkmIzM5O20gYWxyZWFkeSBpbmNsaW5lZCB0byBiZWxpZXZlIHRoYXQgdGhpcyBjaGFuZ2Ugd2lsbCBiZSBleHBvc2VkIHRvIHNpZ25pZmljYW50IHRlc3RpbmcgcHJlc3N1cmUuIFRoZSBmYWN0IHRoYXQgdGhlc2UgaW50ZXJmYWNlcyBhcmUgcmVhY2hhYmxlIG1lYW5zIGFueSBidWdzIGludHJvZHVjZWQgaGVyZSBoYXZlIGEgZ29vZCBjaGFuY2Ugb2YgYmVpbmcgZm91bmQgcmVsYXRpdmVseSBxdWlja2x5LiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBzdGFydCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBtb3JlIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01BQzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19NQUM4MDIxMSkgJiM0Mzs9IG1hYzgwMjExLm9cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS0zLVxuLS1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZT01PW1hYzgwMjExLXkgOj0gXFxcbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMzktXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NDA6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTEVEUykgJiM0Mzs9IGxlZC5vXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NDE6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgJiM0Mzs9IFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDItXHRkZWJ1Z2ZzLm8gXFxcbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDYtXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NDc6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTUVTSCkgJiM0Mzs9IFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDgtXHRtZXNoLm8gXFxcbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU9NTk9cmM4MDIxMV9taW5zdHJlbC15IDo9IFxcXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlLTYxLVxubmV0L21hYzgwMjExL01ha2VmaWxlOjYyOnJjODAyMTFfbWluc3RyZWwtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgJiM0Mzs9IFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjMtXHRyYzgwMjExX21pbnN0cmVsX2h0X2RlYnVnZnMub1xubmV0L21hYzgwMjExL01ha2VmaWxlLTY0LVxubmV0L21hYzgwMjExL01ha2VmaWxlOjY1Om1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMKSAmIzQzOz0gJChyYzgwMjExX21pbnN0cmVsLXkpXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjYtXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTYxMz1zdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTcxMC1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbm5ldC9tYWM4MDIxMS9jZmcuYzo3MTE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtNzEyLVx0XHRpZiAoc2RhdGEtXHUwMDNldS5tZXNoLnNlY3VyaXR5ICE9IElFRUU4MDIxMV9NRVNIX1NFQ19OT05FKVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz0yMTkwPXN0YXRpYyB2b2lkIHN0YV9hcHBseV9tZXNoX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5My17XG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTk1LVx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTI3ODc9c3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjg5My1cbm5ldC9tYWM4MDIxMS9jZmcuYzoyODk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTI4OTUtc3RhdGljIGludCBpZWVlODAyMTFfYWRkX21wYXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTQ0Mjg9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X2FmdGVyX2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ1MS1cdFx0YnJlYWs7XG5uZXQvbWFjODAyMTEvY2ZnLmM6NDQ1MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy00NDUzLVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz00NTYzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTQ2NTQtXHRcdGJyZWFrO1xubmV0L21hYzgwMjExL2NmZy5jOjQ2NTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY1Ni1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoge1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01OTkxPWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjAxMS1cdC5kdW1wX3N1cnZleSA9IGllZWU4MDIxMV9kdW1wX3N1cnZleSxcbm5ldC9tYWM4MDIxMS9jZmcuYzo2MDEyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTYwMTMtXHQuYWRkX21wYXRoID0gaWVlZTgwMjExX2FkZF9tcGF0aCxcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xMC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjExOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xMi0jZGVmaW5lIE1BQzgwMjExX09DQl9ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMTYtXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxNzojaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE4LSNkZWZpbmUgTUFDODAyMTFfSUJTU19ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjItXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMzojaWZkZWYgQ09ORklHX01BQzgwMjExX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yNC0jZGVmaW5lIE1BQzgwMjExX1BTX0RFQlVHIDFcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yOC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjI5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTMwLSNkZWZpbmUgTUFDODAyMTFfSFRfREVCVUcgMVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTM0LVxubmV0L21hYzgwMjExL2RlYnVnLmg6MzU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NUExfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTM2LSNkZWZpbmUgTUFDODAyMTFfTVBMX0RFQlVHIDFcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC00MC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTVBBVEhfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQyLSNkZWZpbmUgTUFDODAyMTFfTVBBVEhfREVCVUcgMVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQ2LVxubmV0L21hYzgwMjExL2RlYnVnLmg6NDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NSFdNUF9ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmgtNDgtI2RlZmluZSBNQUM4MDIxMV9NSFdNUF9ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNTItXG5uZXQvbWFjODAyMTEvZGVidWcuaDo1MzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmgtNTQtI2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTU4LVxubmV0L21hYzgwMjExL2RlYnVnLmg6NTk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmgtNjAtI2RlZmluZSBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNjQtXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2NTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTY2LSNkZWZpbmUgTUFDODAyMTFfTUVTSF9QU19ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNzAtXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3MTojaWZkZWYgQ09ORklHX01BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTcyLSNkZWZpbmUgTUFDODAyMTFfVERMU19ERUJVRyAxXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtNzYtXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3NzojaWZkZWYgQ09ORklHX01BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmgtNzgtI2RlZmluZSBNQUM4MDIxMV9TVEFfREVCVUcgMVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTgyLVxubmV0L21hYzgwMjExL2RlYnVnLmg6ODM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NTE1FX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaC04NC0jZGVmaW5lIE1BQzgwMjExX01MTUVfREVCVUcgMVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTg4LVxubmV0L21hYzgwMjExL2RlYnVnLmg6ODk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTkwLXZvaWQgX19zZGF0YV9pbmZvKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX3ByaW50ZigxLCAyKTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jPTYzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGRlYnVnZnNfc2hvcnRfZm9wcyBzdGF0c18gIyNuYW1lIyMgX29wcyA9IHtcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjM2LVxubmV0L21hYzgwMjExL2RlYnVnZnMuYzo2Mzc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xubmV0L21hYzgwMjExL2RlYnVnZnMuYy02MzgtI2RlZmluZSBERUJVR0ZTX1NUQVRTX0FERChuYW1lKVx0XHRcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM9NjQ5PXZvaWQgZGVidWdmc19od19hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnMuYy02ODMtXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jOjY4NDojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTY4NS1cdERFQlVHRlNfU1RBVFNfQUREKGRvdDExVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50KTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTYtXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oOjc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTgtdm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmgtNC1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oOjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaC02LXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz03MzY9SUVFRTgwMjExX0lGX0xJTktfRklMRShhZGRyLCBjb25mLVx1MDAzZWFkZHIsIE1BQyk7XG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzctXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo3Mzg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzktSUVFRTgwMjExX0lGX0ZJTEUoZXN0YWJfcGxpbmtzLCB1Lm1lc2guZXN0YWJfcGxpbmtzLCBBVE9NSUMpO1xuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTg2OD1zdGF0aWMgdm9pZCBhZGRfaWJzc19maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzItXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo4NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzQtXG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9OTM3PXN0YXRpYyB2b2lkIGFkZF9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NDktXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo5NTA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy05NTEtXHRcdGFkZF9tZXNoX2ZpbGVzKHNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuaC0xMi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oOjEzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgtMTQtdm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW1vdmVfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC02LVxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmg6NzojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oLTgtdm9pZCBpZWVlODAyMTFfc3RhX2RlYnVnZnNfYWRkKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbi0tXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oPTQ3Nz1zdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC00OTQtXG5uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oOjQ5NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgtNDk2LXN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfdmlmX2FkZF9kZWJ1Z2ZzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTc3MD1zdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2gge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg1MC1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjg1MTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg1Mi0jZGVmaW5lIElFRUU4MDIxMV9JRlNUQV9NRVNIX0NUUl9JTkMobXNoLCBuYW1lKVx0XFxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0xMDk5PXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMTUxLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTE1MjojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTExNTMtXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2Rpcjtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0xMTU3PXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTEyNDQtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxMjQ1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTI0Ni1cdHN0cnVjdCB7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTM2ND1lbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMzc5LVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTM4MDojaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTEzODEtc3RydWN0IHRwdF9sZWRfdHJpZ2dlciB7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTQ0OD1zdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjI4LVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTYyOTojaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MzAtXHRzdHJ1Y3QgbGVkX3RyaWdnZXIgdHhfbGVkLCByeF9sZWQsIGFzc29jX2xlZCwgcmFkaW9fbGVkO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MzYtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNjM3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MzgtXHQvKiBTTk1QIGNvdW50ZXJzICovXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTY2NC0jZGVmaW5lIEk4MDJfREVCVUdfSU5DKGMpIChjKSYjNDM7JiM0Mztcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE2NjU6I2Vsc2UgLyogQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjY2LSNkZWZpbmUgSTgwMl9ERUJVR19JTkMoYykgZG8geyB9IHdoaWxlICgwKVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTY2NzojZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjY4LVxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2OTUtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxNjk2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTY5Ny1cdHN0cnVjdCBsb2NhbF9kZWJ1Z2ZzZGVudHJpZXMge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI5NDI9dTMyIGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjk0NS1cdFx0XHRcdCAgICAgICBpbnQgbGVuLCBib29sIGFtcGR1KTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjI5NDY6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjk0Ny0jZGVmaW5lIGRlYnVnX25vaW5saW5lIG5vaW5saW5lXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9Mjk3OD1pZWVlODAyMTFfdWhyX2NhcF9pZV90b19zdGFfdWhyX2NhcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yOTgzLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6Mjk4NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTUFDODAyMTFfS1VOSVRfVEVTVClcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI5ODUtI2RlZmluZSBFWFBPUlRfU1lNQk9MX0lGX01BQzgwMjExX0tVTklUKHN5bSkgRVhQT1JUX1NZTUJPTF9JRl9LVU5JVChzeW0pXG4tLVxubmV0L21hYzgwMjExL2tleS5oPTU5PXN0cnVjdCBpZWVlODAyMTFfa2V5IHtcbi0tXG5uZXQvbWFjODAyMTEva2V5LmgtMTIyLVxubmV0L21hYzgwMjExL2tleS5oOjEyMzojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9rZXkuaC0xMjQtXHRzdHJ1Y3Qge1xuLS1cbm5ldC9tYWM4MDIxMS9sZWQuaD0xMz1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2xlZF9yeChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbm5ldC9tYWM4MDIxMS9sZWQuaC0xNC17XG5uZXQvbWFjODAyMTEvbGVkLmg6MTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvbGVkLmgtMTYtXHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X2xlZF9hY3RpdmUpKVxuLS1cbm5ldC9tYWM4MDIxMS9sZWQuaD0yMj1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2xlZF90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbm5ldC9tYWM4MDIxMS9sZWQuaC0yMy17XG5uZXQvbWFjODAyMTEvbGVkLmg6MjQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvbGVkLmgtMjUtXHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZXR4X2xlZF9hY3RpdmUpKVxuLS1cbm5ldC9tYWM4MDIxMS9sZWQuaC0zMC1cbm5ldC9tYWM4MDIxMS9sZWQuaDozMTojaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFNcbm5ldC9tYWM4MDIxMS9sZWQuaC0zMi12b2lkIGllZWU4MDIxMV9sZWRfYXNzb2Moc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21hYzgwMjExL2xlZC5oPTcxPWllZWU4MDIxMV90cHRfbGVkX3RyaWdfdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBieXRlcylcbm5ldC9tYWM4MDIxMS9sZWQuaC03Mi17XG5uZXQvbWFjODAyMTEvbGVkLmg6NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvbGVkLmgtNzQtXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bG9jYWwtXHUwMDNldHB0X2xlZF9hY3RpdmUpKVxuLS1cbm5ldC9tYWM4MDIxMS9sZWQuaD04MD1pZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgYnl0ZXMpXG5uZXQvbWFjODAyMTEvbGVkLmgtODEte1xubmV0L21hYzgwMjExL2xlZC5oOjgyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL2xlZC5oLTgzLVx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxvY2FsLVx1MDAzZXRwdF9sZWRfYWN0aXZlKSlcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jPTExMzg9aW50IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEzOTMtXG5uZXQvbWFjODAyMTEvbWFpbi5jOjEzOTQ6I2lmbmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL21haW4uYy0xMzk1LVx0LyogbWVzaCBkZXBlbmRzIG9uIEtjb25maWcsIGJ1dCBkcml2ZXJzIHNob3VsZCBzZXQgaXQgaWYgdGhleSB3YW50ICovXG4tLVxubmV0L21hYzgwMjExL21lc2guaD0zNzg9dm9pZCBtZXNoX3BhdGhfcmVmcmVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM4MC1cbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzgxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL21lc2guaC0zODItc3RhdGljIGlubGluZVxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM9ODEyPWludCBpZWVlODAyMTFfbWdtdF90eChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODQxLVx0XHRcdG5lZWRfb2ZmY2hhbiA9IHRydWU7XG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jOjg0MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODQzLVx0XHRmYWxsdGhyb3VnaDtcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5jPTI0PXN0YXRpYyBERUZJTkVfTVVURVgocmF0ZV9jdHJsX211dGV4KTtcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMjUtXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjI2OnN0YXRpYyBjaGFyICppZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvID0gQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ7XG5uZXQvbWFjODAyMTEvcmF0ZS5jLTI3LW1vZHVsZV9wYXJhbShpZWVlODAyMTFfZGVmYXVsdF9yY19hbGdvLCBjaGFycCwgMDY0NCk7XG4tLVxubmV0L21hYzgwMjExL3JhdGUuYz0yMTY9aWVlZTgwMjExX3JhdGVfY29udHJvbF9vcHNfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubmV0L21hYzgwMjExL3JhdGUuYy0yMzItXHQvKiBOb3RlOiBjaGVjayBmb3IgXHUwMDNlIDAgaXMgaW50ZW50aW9uYWwgdG8gYXZvaWQgY2xhbmcgd2FybmluZyAqL1xubmV0L21hYzgwMjExL3JhdGUuYzoyMzM6XHRpZiAoIW9wcyBcdTAwMjZcdTAwMjYgKHN0cmxlbihDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVCkgXHUwMDNlIDApKVxubmV0L21hYzgwMjExL3JhdGUuYy0yMzQtXHRcdC8qIHRyeSBidWlsdC1pbiBvbmUgaWYgc3BlY2lmaWMgYWxnIHJlcXVlc3RlZCBidXQgbm90IGZvdW5kICovXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjIzNTpcdFx0b3BzID0gaWVlZTgwMjExX3RyeV9yYXRlX2NvbnRyb2xfb3BzX2dldChDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVCk7XG5uZXQvbWFjODAyMTEvcmF0ZS5jLTIzNi1cbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTI0MS1cbm5ldC9tYWM4MDIxMS9yYXRlLmM6MjQyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL3JhdGUuYy0yNDMtc3RhdGljIHNzaXplX3QgcmNuYW1lX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLFxuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmM9MjgxPXN0YXRpYyB2b2lkIHJhdGVfY29udHJvbF9mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmMtMjg1LVxubmV0L21hYzgwMjExL3JhdGUuYzoyODY6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTI4Ny1cdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShsb2NhbC1cdTAwM2VkZWJ1Z2ZzLnJjZGlyKTtcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5oPTU1PXN0YXRpYyBpbmxpbmUgdm9pZCByYXRlX2NvbnRyb2xfYWRkX3N0YV9kZWJ1Z2ZzKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxubmV0L21hYzgwMjExL3JhdGUuaC01Ni17XG5uZXQvbWFjODAyMTEvcmF0ZS5oOjU3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL3JhdGUuaC01OC1cdHN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBzdGEtXHUwMDNlcmF0ZV9jdHJsO1xuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmg9Njc9c3RhdGljIGlubGluZSB2b2lkIHJhdGVfY29udHJvbF9hZGRfZGVidWdmcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcbm5ldC9tYWM4MDIxMS9yYXRlLmgtNjgte1xubmV0L21hYzgwMjExL3JhdGUuaDo2OTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9yYXRlLmgtNzAtXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyO1xuLS1cbm5ldC9tYWM4MDIxMS9yYXRlLmg9OTQ9dm9pZCByYXRlX2NvbnRyb2xfZGVpbml0aWFsaXplKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcbi0tXG5uZXQvbWFjODAyMTEvcmF0ZS5oLTk3LS8qIFJhdGUgY29udHJvbCBhbGdvcml0aG1zICovXG5uZXQvbWFjODAyMTEvcmF0ZS5oOjk4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9yYXRlLmgtOTktaW50IHJjODAyMTFfbWluc3RyZWxfaW5pdCh2b2lkKTtcbi0tXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jPTEwNTk9bWluc3RyZWxfaHRfdXBkYXRlX3N0YXRzKHN0cnVjdCBtaW5zdHJlbF9wcml2ICptcCwgc3RydWN0IG1pbnN0cmVsX2h0X3N0YSAqbWkpXG4tLVxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYy0xMTgxLVxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYzoxMTgyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYy0xMTgzLVx0LyogdXNlIGZpeGVkIGluZGV4IGlmIHNldCAqL1xuLS1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM9MTU5NT1taW5zdHJlbF9odF9nZXRfcmF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSxcbi0tXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jLTE2MDYtXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jOjE2MDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jLTE2MDgtXHRpZiAobXAtXHUwMDNlZml4ZWRfcmF0ZV9pZHggIT0gLTEpXG4tLVxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYz0xOTE1PW1pbnN0cmVsX2h0X2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxuLS1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTk0OC1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM6MTk0OTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTk1MC1zdGF0aWMgdm9pZCBtaW5zdHJlbF9odF9hZGRfZGVidWdmcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqcHJpdixcbi0tXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jPTE5ODM9c3RhdGljIGNvbnN0IHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzIG1hYzgwMjExX21pbnN0cmVsX2h0ID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTk5My1cdC5mcmVlID0gbWluc3RyZWxfaHRfZnJlZSxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM6MTk5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTk5NS1cdC5hZGRfZGVidWdmcyA9IG1pbnN0cmVsX2h0X2FkZF9kZWJ1Z2ZzLFxuLS1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0Lmg9NzU9c3RydWN0IG1pbnN0cmVsX3ByaXYge1xuLS1cbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmgtODUtXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5oOjg2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuaC04Ny1cdC8qXG4tLVxubmV0L21hYzgwMjExL3J4LmM9MTA1MT1zdGF0aWMgdm9pZCBpZWVlODAyMTFfdmVyaWZ5X2FsaWdubWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxubmV0L21hYzgwMjExL3J4LmMtMTA1Mi17XG5uZXQvbWFjODAyMTEvcnguYzoxMDUzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL3J4LmMtMTA1NC1cdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZylyeC1cdTAwM2Vza2ItXHUwMDNlZGF0YSBcdTAwMjYgMSk7XG4tLVxubmV0L21hYzgwMjExL3J4LmM9Mjc5ND1pZWVlODAyMTFfZGVsaXZlcl9za2Ioc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbi0tXG5uZXQvbWFjODAyMTEvcnguYy0yODkzLVxubmV0L21hYzgwMjExL3J4LmM6Mjg5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9yeC5jLTI4OTUtc3RhdGljIGJvb2xcbi0tXG5uZXQvbWFjODAyMTEvcnguYz0yOTYxPWllZWU4MDIxMV9yeF9tZXNoX2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTI5NjMte1xubmV0L21hYzgwMjExL3J4LmM6Mjk2NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9yeC5jLTI5NjUtXHRzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gXHUwMDI2c2RhdGEtXHUwMDNldS5tZXNoO1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTcyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgc3RhX3JodF9wYXJhbXMgPSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNzctXHQua2V5X2xlbiA9IEVUSF9BTEVOLFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6Nzg6XHQubWF4X3NpemUgPSBDT05GSUdfTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkUsXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy03OS19O1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgbGlua19zdGFfcmh0X3BhcmFtcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04Ni1cdC5rZXlfbGVuID0gRVRIX0FMRU4sXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo4NzpcdC5tYXhfc2l6ZSA9IENPTkZJR19NQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRSxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTg4LX07XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NDY4PXZvaWQgc3RhX2luZm9fZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHN0YV9pbmZvICpzdGEpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTA2LVx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhzdGEtXHUwMDNlc3RhLnJhdGVzKSk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo1MDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01MDgtXHRrZnJlZShzdGEtXHUwMDNlbWVzaCk7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NjMzPV9fc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY3LVx0d2lwaHlfd29ya19pbml0KFx1MDAyNnN0YS1cdTAwM2VhbXBkdV9tbG1lLndvcmssIGllZWU4MDIxMV9iYV9zZXNzaW9uX3dvcmspO1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NjY4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY5LVx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNzk1LVx0c3RhX2luZm9fZnJlZV9saW5rKFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjc5NjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc5Ny1cdGtmcmVlKHN0YS1cdTAwM2VtZXNoKTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0xMTA3PXN0YXRpYyB2b2lkIF9fc3RhX2luZm9fcmVjYWxjX3RpbShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgYm9vbCBpZ25vcmVfcGVuZGluZylcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMTIxLVx0XHRwcyA9IFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2Vic3MtXHUwMDNlcHM7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxMTIyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTEyMy1cdH0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpKSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MjcyOD1zdGF0aWMgaW5saW5lIHU2NCBzdGFfZ2V0X3N0YXRzX2J5dGVzKHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpyeHN0YXRzKVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI3NDAtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyNzQxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjc0Mi1zdGF0aWMgdm9pZCBzdGFfc2V0X21lc2hfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MzAzOD12b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTMyMjMtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMjI0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzIyNS1cdGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goXHUwMDI2c2RhdGEtXHUwMDNldmlmKSlcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD01MjU9c3RydWN0IGxpbmtfc3RhX2luZm8ge1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTU3Ni1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjU3NzojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTU3OC1cdHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyO1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTcxND1zdHJ1Y3Qgc3RhX2luZm8ge1xuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTczMS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjczMjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTczMy1cdHN0cnVjdCBtZXNoX3N0YSAqbWVzaDtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03NzItXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo3NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03NzQtXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2Rpcjtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD03OTk9c3RhdGljIGlubGluZSBlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUgc3RhX3BsaW5rX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODAwLXtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjgwMTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTgwMi1cdHJldHVybiBzdGEtXHUwMDNlbWVzaC1cdTAwM2VwbGlua19zdGF0ZTtcbi0tXG5uZXQvbWFjODAyMTEvdGVzdHMvLmt1bml0Y29uZmlnPTI9Q09ORklHX0NGRzgwMjExPXlcbm5ldC9tYWM4MDIxMS90ZXN0cy8ua3VuaXRjb25maWc6MzpDT05GSUdfTUFDODAyMTE9eVxubmV0L21hYzgwMjExL3Rlc3RzLy5rdW5pdGNvbmZpZzo0OkNPTkZJR19NQUM4MDIxMV9LVU5JVF9URVNUPXlcbi0tXG5uZXQvbWFjODAyMTEvdGVzdHMvTWFrZWZpbGU9MT1tYWM4MDIxMS10ZXN0cy15ICYjNDM7PSBtb2R1bGUubyB1dGlsLm8gZWxlbXMubyBtZnAubyB0cGUubyBjaGFuLW1vZGUubyBzMWdfdGltLm8gdHRsbS5vXG5uZXQvbWFjODAyMTEvdGVzdHMvTWFrZWZpbGUtMi1cbm5ldC9tYWM4MDIxMS90ZXN0cy9NYWtlZmlsZTozOm9iai0kKENPTkZJR19NQUM4MDIxMV9LVU5JVF9URVNUKSAmIzQzOz0gbWFjODAyMTEtdGVzdHMub1xuLS1cbm5ldC9tYWM4MDIxMS90cmFjZS5jLTEzLVxubmV0L21hYzgwMjExL3RyYWNlLmM6MTQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS90cmFjZS5jLTE1LXZvaWQgX19zZGF0YV9pbmZvKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuLS1cbm5ldC9tYWM4MDIxMS90cmFjZV9tc2cuaC02LVxubmV0L21hYzgwMjExL3RyYWNlX21zZy5oOjc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS90cmFjZV9tc2cuaC04LVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTI3MD1pZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI5MC1cdFx0XHQgICAgIGllZWU4MDIxMV9pc19kYXRhKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSkpIHtcbm5ldC9tYWM4MDIxMS90eC5jOjI5MTojaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUdcbm5ldC9tYWM4MDIxMS90eC5jLTI5Mi1cdFx0XHRzZGF0YV9pbmZvKHR4LVx1MDAzZXNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTE2OTE9c3RhdGljIGJvb2wgaWVlZTgwMjExX3R4X2ZyYWdzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTE3MDQtXG5uZXQvbWFjODAyMTEvdHguYzoxNzA1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL3R4LmMtMTcwNi1cdFx0aWYgKFdBUk5fT05fT05DRShxIFx1MDAzZT0gbG9jYWwtXHUwMDNlaHcucXVldWVzKSkge1xuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTI1MTM9aW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI1MzctXHRcdGJyZWFrO1xubmV0L21hYzgwMjExL3R4LmM6MjUzODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS90eC5jLTI1MzktXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MjY1Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMjY4Mi1cbm5ldC9tYWM4MDIxMS90eC5jOjI2ODM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvdHguYy0yNjg0LVx0aWYgKGxvY2FsLVx1MDAzZWZvcmNlX3R4X3N0YXR1cylcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0yNzU1LVx0XHRicmVhaztcbm5ldC9tYWM4MDIxMS90eC5jOjI3NTY6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvdHguYy0yNzU3LVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI5NDMtXHRcdCAgICAgICFpZWVlODAyMTFfaXNfb3VyX2FkZHIoc2RhdGEsIHNrYi1cdTAwM2VkYXRhICYjNDM7IEVUSF9BTEVOLCBOVUxMKSkpKSB7XG5uZXQvbWFjODAyMTEvdHguYzoyOTQ0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xubmV0L21hYzgwMjExL3R4LmMtMjk0NS1cdFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6IGRyb3BwZWQgZnJhbWUgdG8gJXBNICh1bmF1dGhvcml6ZWQgcG9ydClcXG5cJiMzNDssXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMzAxNy1cbm5ldC9tYWM4MDIxMS90eC5jOjMwMTg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvdHguYy0zMDE5LVx0aWYgKG1lc2hoZHJsZW4gXHUwMDNlIDApXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMzA2NC1cdFx0ICAgIGxpbmtfaWQgIT0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQpIHtcbm5ldC9tYWM4MDIxMS90eC5jOjMwNjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvdHguYy0zMDY2LVx0XHRcdG5ldF9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0OyVzOiBkcm9wcGVkIGZyYW1lIHRvICVwTSB3aXRoIGJhZCBsaW5rIElEIHJlcXVlc3QgKCVkIHZzLiAlZClcXG5cJiMzNDssXG4tLVxubmV0L21hYzgwMjExL3R4LmM9Mzc0Nz12b2lkIF9faWVlZTgwMjExX3htaXRfZmFzdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0zNzkzLVxubmV0L21hYzgwMjExL3R4LmM6Mzc5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS90eC5jLTM3OTUtXHRpZiAobG9jYWwtXHUwMDNlZm9yY2VfdHhfc3RhdHVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODA2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRob3NlIGNvZGUgc2VjdGlvbnM6CgoqKkRpdmluZyBEZWVwIGludG8gbWFjODAyMTEgVFggUGF0aCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgbWFjODAyMTEgdHJhbnNtaXQgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBoYW5kbGVzIHRoZSBjb21wbGV4IGRhbmNlIG9mIGdldHRpbmcgYSBwYWNrZXQgZnJvbSB0aGUgZHJpdmVyIHRvIHRoZSBhaXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBgbmV0L21hYzgwMjExL3R4LmNgLiBNeSBpbml0aWFsIHRhcmdldHMgYXJlIGxpbmVzIDE4NjAtMTkwMCBhbmQgNDY4MC00NzgwLiBUaG9zZSBzZWN0aW9ucyBsaWtlbHkgcmVwcmVzZW50IGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBUWCBwcm9jZXNzIOKAkyBwZXJoYXBzIHJlbGF0ZWQgdG8gcGFja2V0IHNjaGVkdWxpbmcsIHJhdGUgYWRhcHRhdGlvbiwgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLCBvciBtYXliZSBldmVuIHBvd2VyIHNhdmUgaGFuZGxpbmcgb24gdGhlIHRyYW5zbWl0IHNpZGUuIFVuZGVyc3RhbmRpbmcgdGhvc2Ugc3BlY2lmaWMgYXJlYXMgd2lsbCBvZmZlciBnb29kIGNvbnRleHQgZm9yIHRoZSByZXN0IG9mIHRoZSBmaWxlLgoKSSBhbHNvIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBjb25maWd1cmVkLCBzbyBJJiMzOTtsbCBiZSByZWZlcnJpbmcgdG8gdGhlIGBLY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBjaG9zZW4gY29uZmlndXJhdGlvbiwgYW5kIGhvdyB0aGVzZSBzZXR0aW5ncyBpbmZsdWVuY2UgdGhlIGNvZGUgcGF0aHMgaW4gYHR4LmNgIHRoYXQgSSYjMzk7bSBleGFtaW5pbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlc2UgZmVhdHVyZXMgcmVsYXRlIHRvIGRpZmZlcmVudCBoYXJkd2FyZSBwbGF0Zm9ybXMgb3IgcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3R4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRcbjE4NjE6XHQvKlxuMTg2MjpcdCAqIExhdGUgaGFuZGxlcnMgY2FuIGJlIGNhbGxlZCB3aGlsZSB0aGUgc3RhIGxvY2sgaXMgaGVsZC4gSGFuZGxlcnMgdGhhdCBjYW5cbjE4NjM6XHQgKiBjYXVzZSBwYWNrZXRzIHRvIGJlIGdlbmVyYXRlZCB3aWxsIGNhdXNlIGRlYWRsb2NrIVxuMTg2NDpcdCAqL1xuMTg2NTpcdHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbjE4NjY6XHR7XG4xODY3Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LVx1MDAzZXNrYik7XG4xODY4Olx0XHRpZWVlODAyMTFfdHhfcmVzdWx0IHJlcyA9IFRYX0NPTlRJTlVFO1xuMTg2OTpcdFxuMTg3MDpcdFx0aWYgKCFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIEhBU19SQVRFX0NPTlRST0wpKVxuMTg3MTpcdFx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwpO1xuMTg3MjpcdFxuMTg3MzpcdFx0aWYgKHVubGlrZWx5KGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9JTlRGTF9SRVRSQU5TTUlTU0lPTikpIHtcbjE4NzQ6XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZ0eC1cdTAwM2Vza2JzLCB0eC1cdTAwM2Vza2IpO1xuMTg3NTpcdFx0XHR0eC1cdTAwM2Vza2IgPSBOVUxMO1xuMTg3NjpcdFx0XHRnb3RvIHR4aF9kb25lO1xuMTg3NzpcdFx0fVxuMTg3ODpcdFxuMTg3OTpcdFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCk7XG4xODgwOlx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9taWNoYWVsX21pY19hZGQpO1xuMTg4MTpcdFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc2VxdWVuY2UpO1xuMTg4MjpcdFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZnJhZ21lbnQpO1xuMTg4MzpcdFx0LyogaGFuZGxlcnMgYWZ0ZXIgZnJhZ21lbnQgbXVzdCBiZSBhd2FyZSBvZiB0eCBpbmZvIGZyYWdtZW50YXRpb24hICovXG4xODg0Olx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zdGF0cyk7XG4xODg1Olx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9lbmNyeXB0KTtcbjE4ODY6XHRcdGlmICghaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNnR4LVx1MDAzZWxvY2FsLVx1MDAzZWh3LCBIQVNfUkFURV9DT05UUk9MKSlcbjE4ODc6XHRcdFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2FsY3VsYXRlX2R1cmF0aW9uKTtcbjE4ODg6XHQjdW5kZWYgQ0FMTF9UWEhcbjE4ODk6XHRcbjE4OTA6XHQgdHhoX2RvbmU6XG4xODkxOlx0XHRpZiAodW5saWtlbHkocmVzID09IFRYX0RST1ApKSB7XG4xODkyOlx0XHRcdHR4LVx1MDAzZXNkYXRhLVx1MDAzZXR4X2hhbmRsZXJzX2Ryb3AmIzQzOyYjNDM7O1xuMTg5MzpcdFx0XHRpZiAodHgtXHUwMDNlc2tiKVxuMTg5NDpcdFx0XHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFx1MDAyNnR4LVx1MDAzZWxvY2FsLVx1MDAzZWh3LCB0eC1cdTAwM2Vza2IpO1xuMTg5NTpcdFx0XHRlbHNlXG4xODk2Olx0XHRcdFx0aWVlZTgwMjExX3B1cmdlX3R4X3F1ZXVlKFx1MDAyNnR4LVx1MDAzZWxvY2FsLVx1MDAzZWh3LCBcdTAwMjZ0eC1cdTAwM2Vza2JzKTtcbjE4OTc6XHRcdFx0cmV0dXJuIC0xO1xuMTg5ODpcdFx0fSBlbHNlIGlmICh1bmxpa2VseShyZXMgPT0gVFhfUVVFVUVEKSkge1xuMTg5OTpcdFx0XHRJODAyX0RFQlVHX0lOQyh0eC1cdTAwM2Vsb2NhbC1cdTAwM2V0eF9oYW5kbGVyc19xdWV1ZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1BQzgwMjExIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIE1BQzgwMjExLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBtYXAgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgd2lyZWxlc3Mgc3RhY2sgYXJlIGNvbmZpZ3VyZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJIG1ha2UsIGRlYnVnZ2luZyBwb3RlbnRpYWwgaXNzdWVzLCBvciBldmVuIHNpbXBseSBmb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3Nlcy4gSSBuZWVkIGEgY2xlYXIgdmlldyBvZiBob3cgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIGhvdyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgbWlnaHQgaW50ZXJhY3QuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBkcml2ZXIgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaC4uLiB0aW1lIHRvIHNlZSB3aGF0IHRob3NlIEtjb25maWcgZmlsZXMgcmV2ZWFsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzE5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCA0MCBsaW5lcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBzdGFjayBhcmUgbGlrZWx5IGRlZmluZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IG1lbnUgZW50cmllcywgZGVmYXVsdCB2YWx1ZXMsIGhlbHAgdGV4dHMsIGFuZCBwb3RlbnRpYWxseSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzLCB0aGUgdG9wLWxldmVsIGNhdGVnb3JpZXMgdW5kZXIgd2hpY2ggbW9yZSBzcGVjaWZpYyB3aXJlbGVzcyBmZWF0dXJlcyBhcmUgZ3JvdXBlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBhbmQgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmFibGUgZWxlbWVudHMgd2l0aGluIHRoZSBkcml2ZXIuIEkgd2lsbCBiZSBsb29raW5nIGZvcjoKCioqbWFjODAyMTEgQ29uZmlndXJhdGlvbiBPdmVydmlldyoqCgpBbHJpZ2h0LCBJJiMzOTttIG5vdyBpbiB0aGUgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNraW0gdGhlIGZpcnN0IDQwIGxpbmVzLiBJbW1lZGlhdGVseSBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuIFdoYXQgYXJlIHRoZSBtYWpvciBzZWN0aW9ucz8gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXMgZGVmaW5lZD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBsaW5lcyB3aWxsIGRlZmluZSB0aGUgY29yZSBtb2R1bGUsIHBlcmhhcHMgaXRzIGRlcGVuZGVuY2llcywgYW5kIGEgZmV3IGhpZ2gtbGV2ZWwgb3B0aW9ucyBsaWtlIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgZW50aXJlIHN1YnN5c3RlbS4gQXJlIHRoZXJlIGFueSBpbml0aWFsIGRlZmF1bHRzIHNldCwgb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IGp1bXBzIG91dD8gVGhpcyBpcyB0aGUgaW5pdGlhbCBzZXR1cDsgdGhlIGZvdW5kYXRpb24gdXBvbiB3aGljaCBtb3JlIHNwZWNpZmljIHNldHRpbmdzIGJ1aWxkLiBJIGFtIGdvaW5nIHRvIHRyeSBhbmQgaWRlbnRpZnkgaG93IHRoaXMgbW9kdWxlIGlzIGVuYWJsZWQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1hYzgwMjExIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1BQzgwMjExXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAgNTpcdFx0c2VsZWN0IENSWVBUT1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ19NQUNTXG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTFcbiAgMTQ6XHRcdCAgbmV0d29ya2luZyBzdGFjay5cbiAgMTU6XHRcbiAgMTY6XHRjb21tZW50IFwmIzM0O0NGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExPW5cbiAgMTg6XHRcbiAgMTk6XHRpZiBNQUM4MDIxMSAhPSBuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xuICAyMjpcdFx0Ym9vbFxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxuICAyNTpcdFx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbiAgMjY6XHRcdHNlbGVjdCBNQUM4MDIxMV9IQVNfUkNcbiAgMjc6XHRcdGRlZmF1bHQgeVxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAmIzM5O21pbnN0cmVsJiMzOTsgVFggcmF0ZSBjb250cm9sIGFsZ29yaXRobVxuICAzMDpcdFxuICAzMTpcdGNob2ljZVxuICAzMjpcdFx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuICAzMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9IQVNfUkNcbiAgMzQ6XHRcdGRlZmF1bHQgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBkZWZhdWx0IHJhdGUgY29udHJvbCBhbGdvcml0aG1cbiAgMzc6XHRcdCAgbWFjODAyMTEgd2lsbCB1c2UuIE5vdGUgdGhhdCB0aGlzIGRlZmF1bHQgY2FuIHN0aWxsIGJlXG4gIDM4Olx0XHQgIG92ZXJyaWRkZW4gdGhyb3VnaCB0aGUgaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyBtb2R1bGVcbiAgMzk6XHRcdCAgcGFyYW1ldGVyIGlmIGRpZmZlcmVudCBhbGdvcml0aG1zIGFyZSBhdmFpbGFibGUuXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTEgVFggUGF0aCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2U6IEl0JiMzOTtzIGEgcmVsb2NhdGlvbiBvZiB0aGUgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgY2hlY2sgd2l0aGluIHRoZSBtYWM4MDIxMSB0cmFuc21pdCBwYXRoLiBQcmV2aW91c2x5LCB0aGlzIGNoZWNrIHdhcyBwZXJmb3JtZWQgaW4gdHdvIHBsYWNlcywgYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKClgIGFuZCBgaWVlZTgwMjExXzgwMjNfeG1pdCgpYCwgdmVyeSBlYXJseSBpbiB0aGUgdHJhbnNtaXQgcHJvY2Vzcy4gVGhlIHBhdGNoIHN0cmF0ZWdpY2FsbHkgaW50cm9kdWNlcyBhIG5ldyB0cmFuc21pdCBoYW5kbGVyLCBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCgpYCwgYW5kIGludGVncmF0ZXMgaXQgbGF0ZXIgaW4gdGhlIHByb2Nlc3MgdmlhIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpYC4gVGhpcyBhbHNvIG1lYW5zIHRoZSBkdXBsaWNhdGUgY2hlY2tzIGluIHRoZSBwcmV2aW91cyB0d28gZnVuY3Rpb25zIGhhdmUgYmVlbiByZW1vdmVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4gVGhlIGFuc3dlciBpcyBhIGNsZWFyIHllcy4gbWFjODAyMTEgaXMgcmVhZGlseSBhY2Nlc3NpYmxlIGZvciB0ZXN0aW5nLCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBtYWM4MDIxMV9od3NpbSwgbmV0bGluay9ubDgwMjExLCBhbmQgbmV0d29yayBzb2NrZXRzIHdpdGggcGFja2V0IGluamVjdGlvbi4gVGhlIG1vZGlmaWNhdGlvbiBkaXJlY3RseSBpbXBhY3RzIGV4ZWN1dGFibGUga2VybmVsIG5ldHdvcmtpbmcgbG9naWMg4oCTIHNwZWNpZmljYWxseSwgdGhlIFRYIHBhdGggaGFuZGxpbmcgZHVyaW5nIHNjYW5uaW5nIGFuZCBvZmYtY2hhbm5lbCB0cmFuc2l0aW9ucy4gTW92aW5nIHRoaXMgY2hlY2sgdG8gYSAmIzM0O2xhdGUmIzM0OyBoYW5kbGVyIGFsdGVycyB0aGUgcGFja2V0IHByb2Nlc3NpbmcgdGltZWxpbmUsIGludHJvZHVjaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEl0IGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIGludHJvZHVjZSBvciByZXZlYWwgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gc2Nhbm5pbmcgb3BlcmF0aW9ucyBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbi4gSXQmIzM5O3MgYWxzbyB3b3J0aCBpbnZlc3RpZ2F0aW5nIGFueSBzaGlmdHMgaW4gc2tiIGxpZmVjeWNsZXMgb3IgcXVldWUgaGFuZGxpbmcgdGhhdCB0aGlzIGNoYW5nZSBtaWdodCBjYXVzZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgIGlzIG5vbi1zdGF0aWMgb3IgaWYgdGhlIGBkZWJ1Z19ub2lubGluZWAgbWFjcm8gY2F1c2VzIGl0IHRvIGJlIGlubGluZWQuIEkgc2VlIHRoYXQgdGhpcyBpcyBjb25kaXRpb25hbC4gYENPTkZJR19NQUM4MDIxMV9OT0lOTElORWAgZGV0ZXJtaW5lcyBpZiBgZGVidWdfbm9pbmxpbmVgIGlzIGRlZmluZWQgYXMgYG5vaW5saW5lYCAod2hpY2ggcHJvZHVjZXMgYSBzeW1ib2wpIG9yIGlzIGFuIGVtcHR5IGRlZmluaXRpb24sIGFuZCB0aGVyZWZvcmUsIGFuIGlubGluZWQgZnVuY3Rpb24uIEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgaWYgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBsb29rIGZvciB0aGlzIHN5bWJvbC4KRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGFuZCBoYW5kbGVycyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYGludm9rZV90eF9oYW5kbGVyc19sYXRlKClgIGFuZCBmcmFtZSB0cmFuc21pc3Npb24uIEkmIzM5O2xsIGhhdmUgdG8gZ3JlcCBmb3IgYGludm9rZV90eF9oYW5kbGVyc19sYXRlYCBhbmQgY2FsbGVyIGZ1bmN0aW9ucyBpbiBgbmV0L21hYzgwMjExL3R4LmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBuZXcgaGFuZGxlciBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz0xODI4PXN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMTg2NC0gKi9cbm5ldC9tYWM4MDIxMS90eC5jOjE4NjU6c3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxubmV0L21hYzgwMjExL3R4LmMtMTg2Ni17XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MTkwNj1zdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTE5MTEtXHRcdHJldHVybiByO1xubmV0L21hYzgwMjExL3R4LmM6MTkxMjpcdHJldHVybiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSh0eCk7XG5uZXQvbWFjODAyMTEvdHguYy0xOTEzLX1cbi0tXG5uZXQvbWFjODAyMTEvdHguYz0xOTU4PXN0YXRpYyBib29sIGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0xOTk1LVxubmV0L21hYzgwMjExL3R4LmM6MTk5NjpcdGlmICghaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoXHUwMDI2dHgpKVxubmV0L21hYzgwMjExL3R4LmMtMTk5Ny1cdFx0cmVzdWx0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsIFx1MDAyNnR4LnNrYnMsIHR4LnN0YSwgdHhwZW5kaW5nKTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz0zODg4PXN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MDE1LVx0fSBlbHNlIHtcbm5ldC9tYWM4MDIxMS90eC5jOjQwMTY6XHRcdGlmIChpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShcdTAwMjZ0eCkpXG5uZXQvbWFjODAyMTEvdHguYy00MDE3LVx0XHRcdGdvdG8gYmVnaW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTExCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gODAyLjExIHRyYW5zbWlzc2lvbjoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIDgwMi4xMSBUcmFuc21pdCBQYXRoKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IGEgc2VxdWVuY2Ugb2YgZnVuY3Rpb25zIHRoYXQgbGlrZWx5IHJlcHJlc2VudCB0aGUgY29yZSBvZiB0aGUgODAyLjExIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGluIHRoaXMgY29kZWJhc2UuIEkgc2VlIGBpZWVlODAyMTFfdHhgLCB3aGljaCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSBmdW5jdGlvbiBmb3IgaW5pdGlhdGluZyBhIHRyYW5zbWlzc2lvbi4gVGhlbiB3ZSBoYXZlIGBpZWVlODAyMTFfdHhfZGVxdWV1ZWAsIHdoaWNoIHRlbGxzIG1lIHRoYXQgdGhpcyBhcmNoaXRlY3R1cmUgbGlrZWx5IHVzZXMgYSBxdWV1ZS1iYXNlZCBzeXN0ZW0gZm9yIG1hbmFnaW5nIG91dGdvaW5nIHBhY2tldHMg4oCTIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gTmV4dCwgYGllZWU4MDIxMV84MDIzX3htaXRgIGlzIGludGVyZXN0aW5nLiBUaGUgJiMzNDs4MDIzJiMzNDsgbmFtaW5nIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uIHByb2Nlc3MsIGNvbnZlcnRpbmcgdGhlIDgwMi4xMSBmcmFtZXMgdG8gYW4gRXRoZXJuZXQgZm9ybWF0LCBwZXJoYXBzIGZvciBhIGJyaWRnZSBvciBhIHdpcmVkIGNvbm5lY3Rpb24gaW4gYSBtaXhlZCBuZXR3b3JrLiBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVgIGhpbnRzIGF0IGEgY2FsbGJhY2sgb3IgYSBwb3N0LXByb2Nlc3Npbmcgc3RhZ2UsIHdoZXJlIHNvbWUgZGVsYXllZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgaXMgY29tcGxldGVkLiBUaGlzIGNvdWxkIGJlIHRoaW5ncyBsaWtlIHVwZGF0aW5nIHN0YXRpc3RpY3MsIG1hbmFnaW5nIHJldHJpZXMsIG9yIGZyZWVpbmcgYnVmZmVycy4gRmluYWxseSwgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgIGlzIGltbWVkaWF0ZWx5IGludHJpZ3VpbmcuIFRoZSAmIzM0O29mZmNoYW5uZWwmIzM0OyBwYXJ0IGltcGxpZXMgc29tZSBmb3JtIG9mIGNoYW5uZWwgc2Nhbm5pbmcgb3IgY29udHJvbCwgd2hpY2ggc3VnZ2VzdHMgdGhlIHBvc3NpYmlsaXR5IG9mIGhhbmRsaW5nIHRyYW5zbWlzc2lvbiBvbiBub24tcHJpbWFyeSBjaGFubmVscywgbWF5YmUgZm9yIGZlYXR1cmVzIGxpa2UgREZTIChEeW5hbWljIEZyZXF1ZW5jeSBTZWxlY3Rpb24pLCBvciBjaGFubmVsIGhvcHBpbmcgaW4gc29tZSBjaXJjdW1zdGFuY2VzLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgaWVlZTgwMjExXzgwMjNfeG1pdGAsIEkgc2hvdWxkIGludmVzdGlnYXRlIGl0cyBjYWxsZXJzLiBVbmRlcnN0YW5kaW5nIHdoYXQgKmNhbGxzKiB0aGF0IGZ1bmN0aW9uIHdpbGwgaWxsdW1pbmF0ZSBob3cgYW5kIHdoZXJlIHRoZSBFdGhlcm5ldC1yZWxhdGVkIGVuY2Fwc3VsYXRpb24gaGFwcGVucyBpbiB0aGUgb3ZlcmFsbCB0cmFuc21pc3Npb24gZmxvdy4gVGhpcyB3aWxsIGxpa2VseSBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQgb24gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgZnJhbWUgdHlwZXMgYW5kIG5ldHdvcmsgaW50ZXJmYWNlcy4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfODAyM194bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS90eC5jPTQ2Njc9c3RhdGljIGJvb2wgaWVlZTgwMjExX3R4XzgwMjMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDY4Ni1cbm5ldC9tYWM4MDIxMS90eC5jOjQ2ODc6c3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS90eC5jLTQ2ODgtXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00NzkwPXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ4MzUtXHRza19wYWNpbmdfc2hpZnRfdXBkYXRlKHNrYi1cdTAwM2Vzaywgc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcudHhfc2tfcGFjaW5nX3NoaWZ0KTtcbm5ldC9tYWM4MDIxMS90eC5jOjQ4MzY6XHRpZWVlODAyMTFfODAyM194bWl0KHNkYXRhLCBkZXYsIHN0YSwga2V5LCBza2IpO1xubmV0L21hYzgwMjExL3R4LmMtNDgzNy1cdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIHRoZSA4MDIuMyBUcmFuc21pc3Npb24gUGF0aCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gc3BlY2lmaWNhbGx5IHNjcnV0aW5pemUgdGhlIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjNgIGZ1bmN0aW9uIGFuZCBpdHMgY291bnRlcnBhcnQsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzYC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUsIGVzcGVjaWFsbHkgYXJvdW5kIDgwMi4zIGZyYW1lcywgd2hpY2ggaXMgb2Z0ZW4gYSBzb3VyY2Ugb2YgY29udGVudGlvbi4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIG5vdCBqdXN0IHRoZXNlIHR3byBmdW5jdGlvbnMgdGhlbXNlbHZlcywgYnV0IGFsc28gd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgY2FsbGVkIGZyb20uIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgb3IgY29kZSBwYXRocyB0cmlnZ2VyaW5nIHRoZXNlIGZ1bmN0aW9ucz8gQXJlIHRoZXJlIHBhcnRpY3VsYXIgY2FsbGVycyBvciBjb250ZXh0cyB0aGF0IHNlZW0gdG8gYmUgZXhoaWJpdGluZyBwZXJmb3JtYW5jZSBpc3N1ZXMsIG9yIGF0IGxlYXN0IHRoYXQgd2FycmFudCBjbG9zZXIgaW5zcGVjdGlvbj8gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBhY3Rpb25hYmxlIGluc2lnaHQgaXMgbGlrZWx5IHRvIGxpZS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBhbmQgZGF0YSBmbG93IGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMgaXMgY3J1Y2lhbCB0byBpZGVudGlmeWluZyBhbnkgYm90dGxlbmVja3MuIEnigJlsbCBzdGFydCB0cmFjaW5nIGFuZCBwcm9maWxpbmcgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N1YmlmX3N0YXJ0X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjIyOD1uZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjI5LVx0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjMwOm5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjMxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjIzMjpuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjMzLVx0XHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjM0OnZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIzNS1cdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05NDQtXHQubmRvX3VuaW5pdFx0XHQ9IGllZWU4MDIxMV91bmluaXQsXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5NDU6XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0Ni1cdC5uZG9fc2V0X3J4X21vZGVcdD0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCxcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl84MDIzX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDUwLVx0Lm5kb191bmluaXRcdFx0PSBpZWVlODAyMTFfdW5pbml0LFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTA1MTpcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDUyLVx0Lm5kb19zZXRfcnhfbW9kZVx0PSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0LFxuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYz01Mzc9c3RhdGljIHZvaWQgaWVlZTgwMjExX3RkbHNfdGRfdHhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01NjYtXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6NTY3Olx0XHRcdGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHRlYXJkb3duX3NrYiwgc2tiLVx1MDAzZWRldik7XG5uZXQvbWFjODAyMTEvc3RhdHVzLmMtNTY4LVx0XHR9XG4tLVxubmV0L21hYzgwMjExL3RkbHMuYz05OTc9aWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS90ZGxzLmMtMTEyMi1cdGxvY2FsX2JoX2Rpc2FibGUoKTtcbm5ldC9tYWM4MDIxMS90ZGxzLmM6MTEyMzpcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIGZsYWdzLFxubmV0L21hYzgwMjExL3RkbHMuYy0xMTI0LVx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsIE5VTEwpO1xuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTQzNTI9RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KTtcbm5ldC9tYWM4MDIxMS90eC5jLTQzNTMtXG5uZXQvbWFjODAyMTEvdHguYzo0MzU0OnZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21hYzgwMjExL3R4LmMtNDM1NS1cdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00NTQyPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4X29uZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00NTUyLVx0Y3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xubmV0L21hYzgwMjExL3R4LmM6NDU1MzpcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQob3V0LCBzZGF0YS1cdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIE5VTEwpO1xubmV0L21hYzgwMjExL3R4LmMtNDU1NC19XG4tLVxubmV0L21hYzgwMjExL3R4LmM9NDU1Nj1zdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ1NjctXG5uZXQvbWFjODAyMTEvdHguYzo0NTY4Olx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2RhdGEtXHUwMDNlZGV2LCAwLCBjdHJsX2ZsYWdzLFxubmV0L21hYzgwMjExL3R4LmMtNDU2OS1cdFx0XHRcdFx0ICAgICBOVUxMKTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00NTgwLS8qKlxubmV0L21hYzgwMjExL3R4LmM6NDU4MTogKiBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCAtIG5ldGlmIHN0YXJ0X3htaXQgZnVuY3Rpb24gZm9yIDgwMi4zIHZpZnNcbm5ldC9tYWM4MDIxMS90eC5jLTQ1ODItICogQHNrYjogcGFja2V0IHRvIGJlIHNlbnRcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00NTg4LSAqL1xubmV0L21hYzgwMjExL3R4LmM6NDU4OTpuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L21hYzgwMjExL3R4LmMtNDU5MC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ2MDgtXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKVxubmV0L21hYzgwMjExL3R4LmM6NDYwOTpcdFx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxubmV0L21hYzgwMjExL3R4LmMtNDYxMC1cdFx0XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00NjE5LW5vcm1hbDpcbm5ldC9tYWM4MDIxMS90eC5jOjQ2MjA6XHRcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsXG5uZXQvbWFjODAyMTEvdHguYy00NjIxLVx0XHRcdFx0XHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYz00Njg3PXN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDcxNC1cdFx0XHQvKiBmYWxsIGJhY2sgdG8gbm9uLW9mZmxvYWQgc2xvdyBwYXRoICovXG5uZXQvbWFjODAyMTEvdHguYzo0NzE1Olx0XHRcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsXG5uZXQvbWFjODAyMTEvdHguYy00NzE2LVx0XHRcdFx0XHRcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTQ3NzA9c3RhdGljIGJvb2wgaWVlZTgwMjExX2NoZWNrX21jYXN0X29mZmxvYWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNDc4OS1cbm5ldC9tYWM4MDIxMS90eC5jOjQ3OTA6c3RhdGljIHZvaWQgX19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbWFjODAyMTEvdHguYy00NzkxLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ4Mzktc2tpcF9vZmZsb2FkOlxubmV0L21hYzgwMjExL3R4LmM6NDg0MDpcdGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2KTtcbm5ldC9tYWM4MDIxMS90eC5jLTQ4NDEtb3V0OlxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ4NDQtXG5uZXQvbWFjODAyMTEvdHguYzo0ODQ1Om5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9tYWM4MDIxMS90eC5jLTQ4NDYtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTQ4NjItXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKVxubmV0L21hYzgwMjExL3R4LmM6NDg2MzpcdFx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc2tiLCBkZXYpO1xubmV0L21hYzgwMjExL3R4LmMtNDg2NC1cdH0gZWxzZSB7XG5uZXQvbWFjODAyMTEvdHguYzo0ODY1Olx0XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc2tiLCBkZXYpO1xubmV0L21hYzgwMjExL3R4LmMtNDg2Ni1cdH1cbi0tXG5uZXQvbWFjODAyMTEvdHguYz02NTAzPWludCBpZWVlODAyMTFfdHhfY29udHJvbF9wb3J0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNjYxMC1cdGxvY2FsX2JoX2Rpc2FibGUoKTtcbm5ldC9tYWM4MDIxMS90eC5jOjY2MTE6XHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2tiLVx1MDAzZWRldiwgZmxhZ3MsIGN0cmxfZmxhZ3MsIGNvb2tpZSk7XG5uZXQvbWFjODAyMTEvdHguYy02NjEyLVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9NjYxNz1pbnQgaWVlZTgwMjExX3Byb2JlX21lc2hfbGluayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTY2MzgtXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG5uZXQvbWFjODAyMTEvdHguYzo2NjM5Olx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIHNrYi1cdTAwM2VkZXYsIDAsXG5uZXQvbWFjODAyMTEvdHguYy02NjQwLVx0XHRcdFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9TS0lQX01QQVRIX0xPT0tVUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwOTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIDgwMi4xMSBUWCBQYXRoIFN5bWJvbHMgYW5kIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB0aGUgODAyLjExIHRyYW5zbWl0IHBhdGguIEkmIzM5O3ZlIGdvdCBhIGxpc3QgaGVyZTogYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgLCBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVgLCBgaWVlZTgwMjExXzgwMjNfeG1pdGAsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAsIGFuZCBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyM2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYW5kIGhhbmRsZXJzIEkgbmVlZCB0byB0cmFjZS4KCk5vdywgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGBDT05GSUdfTUFDODAyMTFgLiBSaWdodCwgYENPTkZJR19NQUM4MDIxMWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX0NGRzgwMjExYCwgd2hpY2ggaXMgdG8gYmUgZXhwZWN0ZWQuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBub3RoaW5nIGVsc2UgaXMgcmVxdWlyZWQsIHRob3VnaCwganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBub24tb2J2aW91cywgb3Igc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBrZXJuZWwgdmVyc2lvbi4gU28gSSYjMzk7bGwgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyBpbiBib3RoIGBuZXQvbWFjODAyMTEvYCBhbmQgYG5ldC93aXJlbGVzcy9gIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSB0aGVyZSBhcmUgbm8gaGlkZGVuIHJlcXVpcmVtZW50cy4gR29vZCwgZ29vZC4gV2l0aCB0aGlzIGluaXRpYWwgZnJhbWV3b3JrLCBJIHNob3VsZCBiZSBhYmxlIHRvIG5hdmlnYXRlIHRoZSBjb2RlIG1vcmUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkc4MDIxMVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTcwOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0aGUgYG5ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDEgdGhyb3VnaCAzMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSB0b3AtbGV2ZWwgZGVmaW5pdGlvbnMgYW5kIHBlcmhhcHMgdGhlIG1haW4gbWVudSBlbnRyaWVzIGFyZSBsb2NhdGVkLiBJJiMzOTtsbCBiZXQgaXQmIzM5O3MgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZS4gSSBleHBlY3QgdG8gZ2V0IGEgZmVlbCBmb3IgaG93IHZhcmlvdXMgd2lyZWxlc3MgdGVjaG5vbG9naWVzIG9yIGZlYXR1cmVzIGFyZSBpbml0aWFsbHkgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCBoZWxwaW5nIG1lIG5hdmlnYXRlIHRoZSBtb3JlIHNwZWNpZmljLCBkZXRhaWxlZCBjb25maWd1cmF0aW9ucyBsYXRlciBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXSVJFTEVTU19FWFRcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgV0VYVF9DT1JFXG4gICA2Olx0XHRkZWZfYm9vbCB5XG4gICA3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExX1dFWFQgfHwgV0lSRUxFU1NfRVhUXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIFdFWFRfUFJPQ1xuICAxMDpcdFx0ZGVmX2Jvb2wgeVxuICAxMTpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBXRVhUX1BSSVZcbiAgMTU6XHRcdGJvb2xcbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgQ0ZHODAyMTFcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O2NmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcbiAgMjA6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjE6XHRcdHNlbGVjdCBDUkMzMlxuICAyMjpcdFx0IyBtYXkgbmVlZCB0byB1cGRhdGUgdGhpcyB3aGVuIGNlcnRpZmljYXRlcyBhcmUgY2hhbmdlZCBhbmQgYXJlXG4gIDIzOlx0XHQjIHVzaW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSwgdGhvdWdoIHJpZ2h0IG5vdyB0aGV5IHNob3VsZG4mIzM5O3RcbiAgMjQ6XHRcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxuICAyODpcdFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcbiAgMzE6XHRcbiAgMzI6XHRcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXG4gIDM1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzk3CgkJCQkJCQlvdXRwdXQ6IDI4MgoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEV2YWx1YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBjb2RlLiBMZXQgbWUgc2VlLi4uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGFuZCBwb3NzaWJseSBgTkw4MDIxMWAgb3IgZXZlbiBgTUFDODAyMTFfSFdTSU1gPyBXYWl0IGEgbWludXRlLCBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgIGFyZSAqdGhlKiBkaXJlY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBjb21waWxpbmcgdGhpcyBwYXJ0aWN1bGFyIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBNQUM4MDIxMV9IV1NJTWAgaXMgYSByZWxldmFudCBkcml2ZXIgb3B0aW9uLCBvciBpZiBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgIGFsb25lIGFyZSBnb29kIGVub3VnaC4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcsIGFoIHllcywgYENPTkZJR19NQUM4MDIxMWAgKmRlcGVuZHMqIG9uIGBDT05GSUdfQ0ZHODAyMTFgLiBSaWdodCwgc28gYE1BQzgwMjExYCBhbmQgYENGRzgwMjExYCBpdCBpcy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGltcG9ydGFudCBpbiBteSBhc3Nlc3NtZW50LiBMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2s6CgoxLiAgSXMgdGhpcyBwYXRjaCBldmVuIG1vZGlmeWluZyByZWFjaGFibGUgY29kZT8gWXVwLCBpdCYjMzk7cyBtZXNzaW5nIHdpdGggdGhlIHRyYW5zbWl0IHBhdGggaW4gYG1hYzgwMjExYCwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIG9mZi1jaGFubmVsIGZyYW1lIGZpbHRlcmluZyBkdXJpbmcgc2Nhbm5pbmcuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWxldmFudC4KMi4gIElzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBZZWFoLCBhYnNvbHV0ZWx5LiBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4KMy4gIFJpZ2h0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgLiBKdXN0IHRvIGNvbmZpcm0uCjQuICBBbmQgZmluYWxseSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZToKICAgICogICBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbGAKICAgICogICBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVgCiAgICAqICAgYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jYAogICAgKiAgIGBpZWVlODAyMTFfODAyM194bWl0YAogICAgKiAgIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdGAKICAgICogICBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyM2AKCk9rYXksIHRoYXQgc2VlbXMgbGlrZSBhIGNvbXByZWhlbnNpdmUgbGlzdC4gSSYjMzk7bSBjb25maWRlbnQgd2l0aCB0aGlzLCBzbyBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsJiMzNDssCiAgICAmIzM0O2ludm9rZV90eF9oYW5kbGVyc19sYXRlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV84MDIzX3htaXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyMyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIG1hYzgwMjExIFRYIHBhdGggYnkgY29uc29saWRhdGluZyBvZmYtY2hhbm5lbCBmcmFtZSBkcm9wcGluZyBkdXJpbmcgc29mdHdhcmUgc2Nhbm5pbmcgaW50byBhIGRlZGljYXRlZCBsYXRlIFRYIGhhbmRsZXIgKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpIGludm9rZWQgdmlhIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCksIHdoaWxlIHJlbW92aW5nIHJlZHVuZGFudCBjaGVja3MgZnJvbSBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYygpIGFuZCBpZWVlODAyMTFfODAyM194bWl0KCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHdpcmVsZXNzIGludGVyZmFjZXMgKHN1Y2ggYXMgbWFjODAyMTFfaHdzaW0pLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCYjMzQ7LAogICAgJiMzNDtpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfODAyM194bWl0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtYWM4MDIxMSBUWCBwYXRoIGJ5IGNvbnNvbGlkYXRpbmcgb2ZmLWNoYW5uZWwgZnJhbWUgZHJvcHBpbmcgZHVyaW5nIHNvZnR3YXJlIHNjYW5uaW5nIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIHZpYSBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpLCB3aGlsZSByZW1vdmluZyByZWR1bmRhbnQgY2hlY2tzIGZyb20gaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MoKSBhbmQgaWVlZTgwMjExXzgwMjNfeG1pdCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCB3aXJlbGVzcyBpbnRlcmZhY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKSwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG9mZi1jaGFubmVsIGZyYW1lIGZpbHRlcmluZyBpbiBtYWM4MDIxMSBieSBtb3ZpbmcgdGhlIHNvZnR3YXJlIHNjYW5uaW5nIG9mZi1jaGFubmVsIGRyb3AgY2hlY2sgZnJvbSBlYXJseSBUWCBoYW5kbGluZyAoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MgYW5kIGllZWU4MDIxMV84MDIzX3htaXQpIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIGluIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCkuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHBhY2tldCBkcm9wIGRlY2lzaW9ucyBkdXJpbmcgVFggcHJvY2Vzc2luZyBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgc2tiIGhlYWRlcnMgYW5kIHN0YXRlIGJpdG1hcHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIG9yIGJ1ZmZlciBib3VuZGFyeSBjYWxjdWxhdGlvbnMuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjb3ZlciBhbnkgcGFja2V0IGhhbmRsaW5nIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZiN2NkNWJjYzQ4MmRlYjgwMmI4OTIyN2ZjODQwZmE5YjY5ODFiMDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE0OjQ3OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCA5MWIxNDExMmUyNGYwLi4wOGEzOTI3MmYyNmEwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMjY5LDcgJiM0MzsyNjksNiBAQCBpZWVlODAyMTFfdHhfaF9keW5hbWljX3BzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKLQogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0mZ3Q7c2tiLSZndDtkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtJmd0O3NrYik7CiAJYm9vbCBhc3NvYyA9IGZhbHNlOwpAQCAtMjc3LDIwICYjNDM7Mjc2LDYgQEAgaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIAlpZiAodW5saWtlbHkoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAotCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmYW1wO3R4LSZndDtsb2NhbC0mZ3Q7c2Nhbm5pbmcpKSAmYW1wOyZhbXA7Ci0JICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsICZhbXA7dHgtJmd0O3NkYXRhLSZndDtzdGF0ZSkgJmFtcDsmYW1wOwotCSAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItJmd0O2ZyYW1lX2NvbnRyb2wpICZhbXA7JmFtcDsKLQkgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLSZndDtmcmFtZV9jb250cm9sKSkKLQkJLyoKLQkJICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5Ci0JCSAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZQotCQkgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZQotCQkgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG8KLQkJICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW0KLQkJICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuCi0JCSAqLwotCQlyZXR1cm4gVFhfRFJPUDsKLQogCWlmICh0eC0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX09DQikKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCkBAIC04MDUsNiAmIzQzOzc5MCwzMyBAQCBpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKJiM0MztzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQomIzQzO2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0mZ3Q7c2tiLSZndDtkYXRhOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LSZndDtza2IpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpCiYjNDM7CQlyZXR1cm4gVFhfQ09OVElOVUU7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmYW1wO3R4LSZndDtsb2NhbC0mZ3Q7c2Nhbm5pbmcpKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCAmYW1wO3R4LSZndDtzZGF0YS0mZ3Q7c3RhdGUpICZhbXA7JmFtcDsKJiM0MzsJICAgICFpZWVlODAyMTFfaXNfcHJvYmVfcmVxKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLSZndDtmcmFtZV9jb250cm9sKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFdoZW4gc29mdHdhcmUgc2Nhbm5pbmcgb25seSBudWxsZnVuYyBmcmFtZXMgKHRvIG5vdGlmeQomIzQzOwkJICogdGhlIHNsZWVwIHN0YXRlIHRvIHRoZSBBUCkgYW5kIHByb2JlIHJlcXVlc3RzIChmb3IgdGhlCiYjNDM7CQkgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZQomIzQzOwkJICogc2VudCBhbmQgd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvCiYjNDM7CQkgKiBub25ldGhlbGVzcywgZHJvcCB0aGVtIHRvIGF2b2lkIHNlbmRpbmcgdGhlbQomIzQzOwkJICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiBUWF9EUk9QOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBUWF9DT05USU5VRTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19sZTE2IGllZWU4MDIxMV90eF9uZXh0X3NlcShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZCkKIHsKIAl1MTYgKnNlcSA9ICZhbXA7c3RhLSZndDt0aWRfc2VxW3RpZF07CkBAIC0xODY0LDYgJiM0MzsxODc2LDcgQEAgc3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogCQlnb3RvIHR4aF9kb25lOwogCX0KIAomIzQzOwlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTsKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9taWNoYWVsX21pY19hZGQpOwogCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKTsKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7CkBAIC00Njg2LDEwICYjNDM7NDY5OSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7CiAJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWUpOwogCi0JaWYgKHVubGlrZWx5KHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZhbXA7bG9jYWwtJmd0O3NjYW5uaW5nKSkgJmFtcDsmYW1wOwotCSAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCAmYW1wO3NkYXRhLSZndDtzdGF0ZSkpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KIAlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoIXNrYikpCiAJCXJldHVybjsKQEAgLTQ3NTYsMTEgJiM0Mzs0NzY1LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAlpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBsZW4pOwogCiAJaWVlZTgwMjExX3R4XzgwMjMoc2RhdGEsIHNrYiwgc3RhLCBmYWxzZSk7Ci0KLQlyZXR1cm47Ci0KLW91dF9mcmVlOgotCWtmcmVlX3NrYihza2IpOwogfQogCiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIGluIGEgV2lyZWxlc3MgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIGNoYW5nZXMgdG91Y2hpbmcgbmV0d29ya2luZyBjb2RlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNvbXBsZXggcGFja2V0IHByb2Nlc3NpbmcuCgpGaXJzdCwgSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgbmV0L21hYzgwMjExL3R4LmNgLiBUaGUgY29yZSBzZWVtcyB0byBiZSBhYm91dCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIG9mZi1jaGFubmVsIHNjYW5uaW5nIHdpdGhpbiB0aGUgdHJhbnNtaXNzaW9uIHBhdGguIFNwZWNpZmljYWxseToKCjEuICBUaGUgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgY2hlY2sgaW4gYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jYCBoYXMgYmVlbiAqcmVtb3ZlZCouIFRoaXMgaXMgY29uY2VybmluZywgYmVjYXVzZSBpdCYjMzk7cyBiZWVuIG1vdmVkLiBBbnl0aW1lIGEgY2hlY2sgaXMgcmVtb3ZlZCwgSSBuZWVkIHRvIGtub3cgd2h5LiBBcmUgd2UgbG9zaW5nIGEgY2hlY2s/IElzIHRoZSBmdW5jdGlvbmFsaXR5IHN0aWxsIHByZXNlbnQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBjb250cm9sIGZsb3cgY2hhbmdlLgoyLiAgQSBuZXcgaGFuZGxlciwgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgLCBoYXMgYmVlbiAqY3JlYXRlZCogYW5kIGlzIGJlaW5nIGNhbGxlZCBsYXRlciBpbiB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgdmlhIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgYSByZWZhY3RvcmluZywgYnV0IGEgcmVmYWN0b3JpbmcgdGhhdCAqY291bGQqIGludHJvZHVjZSBzdWJ0bGUgdGltaW5nIGRpZmZlcmVuY2VzIG9yIGNvZGUgcGF0aCBjaGFuZ2VzLgozLiAgVGhlIGVhcmx5IGNoZWNrIGluIGBpZWVlODAyMTFfODAyM194bWl0YCByZWdhcmRpbmcgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgaGFzIGFsc28gYmVlbiAqcmVtb3ZlZCouIFRoaXMgbWlycm9ycyB0aGUgY2hhbmdlIGluIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgc28gaXQmIzM5O3MgYSByZWxhdGVkIGNvZGUgcGF0aC4KClNvLCBpdCBsb29rcyBsaWtlIHRoZSBndWFyZCBpcyBzdGlsbCBpbiBwbGFjZSwgaXQgaGFzIGJlZW4gbW92ZWQgdG8gYSBsYXRlIHN0YWdlIGhhbmRsZXIsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZG9uZSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHN0aWxsIGd1YXJkaW5nIHRoZSBjb2RlIHBhdGhzIGFwcHJvcHJpYXRlbHkuCgpOb3csIEkgbmVlZCB0byBrbm93IHRoZSAqd2h5Ki4gV2FzIHRoaXMgcHVyZWx5IGZvciBjb2RlIGNsYXJpdHk/IFBlcmZvcm1hbmNlPyBPciBpcyB0aGVyZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGx1cmtpbmcgaGVyZT8gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gc2VhcmNoIGZvciBtb3JlIGNvbnRleHQgb24gdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZXhwbGFuYXRpb25zIGZvciB0aGUgb3JpZ2luYWwgZGVjaXNpb24gdG8gbW92ZSB0aGUgZnVuY3Rpb24uIEkmIzM5O2xsIGxvb2sgZm9yIGJ1ZyByZXBvcnRzLCBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnMsIGNvbW1pdCBtZXNzYWdlcywgYW5kIHJlbGF0ZWQgY29kZSBjaGFuZ2VzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlc2UgY2hhbmdlcyBhcmUgc291bmQsIGFuZCBpZiB0aGV5IG1heSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludm9rZV90eF9oYW5kbGVyc19sYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYz0xODI4PXN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMTg2NC0gKi9cbm5ldC9tYWM4MDIxMS90eC5jOjE4NjU6c3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxubmV0L21hYzgwMjExL3R4LmMtMTg2Ni17XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MTkwNj1zdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTE5MTEtXHRcdHJldHVybiByO1xubmV0L21hYzgwMjExL3R4LmM6MTkxMjpcdHJldHVybiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSh0eCk7XG5uZXQvbWFjODAyMTEvdHguYy0xOTEzLX1cbi0tXG5uZXQvbWFjODAyMTEvdHguYz0xOTU4PXN0YXRpYyBib29sIGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0xOTk1LVxubmV0L21hYzgwMjExL3R4LmM6MTk5NjpcdGlmICghaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoXHUwMDI2dHgpKVxubmV0L21hYzgwMjExL3R4LmMtMTk5Ny1cdFx0cmVzdWx0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsIFx1MDAyNnR4LnNrYnMsIHR4LnN0YSwgdHhwZW5kaW5nKTtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz0zODg4PXN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy00MDE1LVx0fSBlbHNlIHtcbm5ldC9tYWM4MDIxMS90eC5jOjQwMTY6XHRcdGlmIChpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShcdTAwMjZ0eCkpXG5uZXQvbWFjODAyMTEvdHguYy00MDE3LVx0XHRcdGdvdG8gYmVnaW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGB0eC5jYDoKCioqRGl2aW5nIERlZXAgaW50byBgdHguY2AmIzM5O3MgQ29yZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYHR4LmNgIGJldHdlZW4gbGluZXMgMTg1MCBhbmQgMTkyMC4gVGhhdCYjMzk7cyBhIGRlY2VudCBjaHVuayBvZiBjb2RlLCBsaWtlbHkgaGFuZGxpbmcgYSBjcnVjaWFsIGFzcGVjdCBvZiB0aGUgdHJhbnNhY3Rpb24gcHJvY2Vzc2luZyBwaXBlbGluZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBXaGF0IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNhbGxlZCBqdXN0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBzZWN0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgYHR4LmNgIHRvIHByb3Blcmx5IG9yaWVudCBteXNlbGYuIElzIHRoaXMgcmVsYXRlZCB0byB0cmFuc2FjdGlvbiB2YWxpZGF0aW9uLCBzaWduaW5nLCBicm9hZGNhc3RpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoKTXkgZmlyc3QgcGFzcyB3aWxsIGJlIHRvIGlkZW50aWZ5IGFueSBtYWpvciBjb250cm9sIGZsb3cgc3RhdGVtZW50cyBsaWtlIGBpZmAsIGBmb3JgLCBvciBgc3dpdGNoYCBzdGF0ZW1lbnRzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSBsb2dpYyBmbG93LiBOZXh0LCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhhdCByYW5nZS4gQXJlIHRoZXJlIGFueSBjYWxscyB0byBvdGhlciBtb2R1bGVzIG9yIGN1c3RvbS1kZWZpbmVkIGZ1bmN0aW9ucz8gVGhvc2UgYXJlIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZywgb3IgYW55IHNwZWNpYWxpemVkIGxvZ2ljLCBpcyBoYXBwZW5pbmcuIEFyZSB0aGVyZSBhbnkgaW50ZXJhY3Rpb25zIHdpdGggZXh0ZXJuYWwgc3lzdGVtcz8gQXJlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIHJhbmdlIHRoYXQgSSBuZWVkIHRvIGJlIGZhbWlsaWFyIHdpdGg/IFVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgdGhvc2UgZnVuY3Rpb25zIHdpbGwgYmUgZXNzZW50aWFsLiBBbnkgcmVzb3VyY2UgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24ganVtcHMgb3V0IGFzIGFuIGltbWVkaWF0ZSBwb3RlbnRpYWwgaXNzdWUgdGhhdCBuZWVkcyB0byBiZSBzY3J1dGluaXplZC4KCkkgYW50aWNpcGF0ZSBzZWVpbmcgYSBsb3Qgb2YgYml0d2lzZSBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgcmVsYXRlZCB0byBoYXNoaW5nLCBzZXJpYWxpemF0aW9uLCBvciBjb25zZW5zdXMgbWVjaGFuaXNtcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBhbnkgbGlicmFyaWVzIG9yIGV4dGVybmFsIGRlcGVuZGVuY2llcyB1c2VkLiBGaW5hbGx5LCBJJiMzOTtsbCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBzZWN0aW9uIHNlZW1zIHBvdGVudGlhbGx5IGludm9sdmVkIHdpdGggdHJhbnNhY3Rpb25zLCBzbyBJJiMzOTtsbCBiZSBhbGVydCBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBpbXBhY3QgdGhyb3VnaHB1dCwgbGF0ZW5jeSwgb3Igc2VjdXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL3R4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NTA6XHRcdFx0ZWxzZVxuMTg1MTpcdFx0XHRcdGllZWU4MDIxMV9wdXJnZV90eF9xdWV1ZShcdTAwMjZ0eC1cdTAwM2Vsb2NhbC1cdTAwM2VodywgXHUwMDI2dHgtXHUwMDNlc2ticyk7XG4xODUyOlx0XHRcdHJldHVybiAtMTtcbjE4NTM6XHRcdH0gZWxzZSBpZiAodW5saWtlbHkocmVzID09IFRYX1FVRVVFRCkpIHtcbjE4NTQ6XHRcdFx0STgwMl9ERUJVR19JTkModHgtXHUwMDNlbG9jYWwtXHUwMDNldHhfaGFuZGxlcnNfcXVldWVkKTtcbjE4NTU6XHRcdFx0cmV0dXJuIC0xO1xuMTg1NjpcdFx0fVxuMTg1NzpcdFxuMTg1ODpcdFx0cmV0dXJuIDA7XG4xODU5Olx0fVxuMTg2MDpcdFxuMTg2MTpcdC8qXG4xODYyOlx0ICogTGF0ZSBoYW5kbGVycyBjYW4gYmUgY2FsbGVkIHdoaWxlIHRoZSBzdGEgbG9jayBpcyBoZWxkLiBIYW5kbGVycyB0aGF0IGNhblxuMTg2MzpcdCAqIGNhdXNlIHBhY2tldHMgdG8gYmUgZ2VuZXJhdGVkIHdpbGwgY2F1c2UgZGVhZGxvY2shXG4xODY0Olx0ICovXG4xODY1Olx0c3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuMTg2NjpcdHtcbjE4Njc6XHRcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtXHUwMDNlc2tiKTtcbjE4Njg6XHRcdGllZWU4MDIxMV90eF9yZXN1bHQgcmVzID0gVFhfQ09OVElOVUU7XG4xODY5Olx0XG4xODcwOlx0XHRpZiAoIWllZWU4MDIxMV9od19jaGVjayhcdTAwMjZ0eC1cdTAwM2Vsb2NhbC1cdTAwM2VodywgSEFTX1JBVEVfQ09OVFJPTCkpXG4xODcxOlx0XHRcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3JhdGVfY3RybCk7XG4xODcyOlx0XG4xODczOlx0XHRpZiAodW5saWtlbHkoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0lOVEZMX1JFVFJBTlNNSVNTSU9OKSkge1xuMTg3NDpcdFx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnR4LVx1MDAzZXNrYnMsIHR4LVx1MDAzZXNrYik7XG4xODc1Olx0XHRcdHR4LVx1MDAzZXNrYiA9IE5VTEw7XG4xODc2Olx0XHRcdGdvdG8gdHhoX2RvbmU7XG4xODc3Olx0XHR9XG4xODc4Olx0XG4xODc5Olx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTtcbjE4ODA6XHRcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7XG4xODgxOlx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZSk7XG4xODgyOlx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7XG4xODgzOlx0XHQvKiBoYW5kbGVycyBhZnRlciBmcmFnbWVudCBtdXN0IGJlIGF3YXJlIG9mIHR4IGluZm8gZnJhZ21lbnRhdGlvbiEgKi9cbjE4ODQ6XHRcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3N0YXRzKTtcbjE4ODU6XHRcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2VuY3J5cHQpO1xuMTg4NjpcdFx0aWYgKCFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIEhBU19SQVRFX0NPTlRST0wpKVxuMTg4NzpcdFx0XHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jYWxjdWxhdGVfZHVyYXRpb24pO1xuMTg4ODpcdCN1bmRlZiBDQUxMX1RYSFxuMTg4OTpcdFxuMTg5MDpcdCB0eGhfZG9uZTpcbjE4OTE6XHRcdGlmICh1bmxpa2VseShyZXMgPT0gVFhfRFJPUCkpIHtcbjE4OTI6XHRcdFx0dHgtXHUwMDNlc2RhdGEtXHUwMDNldHhfaGFuZGxlcnNfZHJvcCYjNDM7JiM0Mzs7XG4xODkzOlx0XHRcdGlmICh0eC1cdTAwM2Vza2IpXG4xODk0Olx0XHRcdFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIHR4LVx1MDAzZXNrYik7XG4xODk1Olx0XHRcdGVsc2VcbjE4OTY6XHRcdFx0XHRpZWVlODAyMTFfcHVyZ2VfdHhfcXVldWUoXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIFx1MDAyNnR4LVx1MDAzZXNrYnMpO1xuMTg5NzpcdFx0XHRyZXR1cm4gLTE7XG4xODk4Olx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KHJlcyA9PSBUWF9RVUVVRUQpKSB7XG4xODk5Olx0XHRcdEk4MDJfREVCVUdfSU5DKHR4LVx1MDAzZWxvY2FsLVx1MDAzZXR4X2hhbmRsZXJzX3F1ZXVlZCk7XG4xOTAwOlx0XHRcdHJldHVybiAtMTtcbjE5MDE6XHRcdH1cbjE5MDI6XHRcbjE5MDM6XHRcdHJldHVybiAwO1xuMTkwNDpcdH1cbjE5MDU6XHRcbjE5MDY6XHRzdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuMTkwNzpcdHtcbjE5MDg6XHRcdGludCByID0gaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5KHR4KTtcbjE5MDk6XHRcbjE5MTA6XHRcdGlmIChyKVxuMTkxMTpcdFx0XHRyZXR1cm4gcjtcbjE5MTI6XHRcdHJldHVybiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSh0eCk7XG4xOTEzOlx0fVxuMTkxNDpcdFxuMTkxNTpcdGJvb2wgaWVlZTgwMjExX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuMTkxNjpcdFx0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBza19idWZmICpza2IsXG4xOTE3Olx0XHRcdFx0ICAgICAgaW50IGJhbmQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICoqc3RhKVxuMTkxODpcdHtcbjE5MTk6XHRcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7XG4xOTIwOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4xOTIxOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgdHg7XG4xOTIyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcbjE5MjM6XHRcbjE5MjQ6XHRcdGlmIChpZWVlODAyMTFfdHhfcHJlcGFyZShzZGF0YSwgXHUwMDI2dHgsIE5VTEwsIHNrYikgPT0gVFhfRFJPUCkge1xuMTkyNTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE5MjY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTkyNzpcdFx0fVxuMTkyODpcdFxuMTkyOTpcdFx0aW5mby1cdTAwM2ViYW5kID0gYmFuZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5NwoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiA3NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgUG90ZW50aWFsIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaCBhbmQgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSByaXNrcyB0aGF0IEtNU0FOIHdvdWxkIG5lZWQgdG8gZmxhZy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHdlJiMzOTtyZSBtb3ZpbmcgdGhlIG9mZi1jaGFubmVsIGNoZWNrIGZvciBUWCBwYWNrZXRzIHdpdGhpbiBtYWM4MDIxMSwgc3BlY2lmaWNhbGx5IGZyb20gdGhlIGVhcmx5IHRyYW5zbWl0IGhhbmRsZXJzIChgaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2NgIGNhbGxlZCBpbiBgaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5YCkgYW5kIHRoZSA4MDIuMyB0cmFuc21pdCBwYXRoIChgaWVlZTgwMjExXzgwMjNfeG1pdGApIHRvIHRoZSAqbGF0ZSogdHJhbnNtaXQgaGFuZGxlciBwaXBlbGluZSwgc3BlY2lmaWNhbGx5IGBpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsYCB3aXRoaW4gYGludm9rZV90eF9oYW5kbGVyc19sYXRlYC4KCk15IGZpcnN0IGltbWVkaWF0ZSBxdWVzdGlvbjogZG9lcyB0aGlzIGludm9sdmUgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHRoYXQgY291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBHb2luZyB0aHJvdWdoIHRoZSB1c3VhbCBjaGVja2xpc3Q6CgoxLiAgKipVc2VyLVNwYWNlIEludGVyYWN0aW9uOioqIE5vLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IG1vZGlmeSBhbnkga2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBzb2NrZXRzLCBvciBCUEYgYnVmZmVycy4gTm8gdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGJlaW5nIGV4cG9zZWQuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIE5vLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBJdCYjMzk7cyByZWFkaW5nIGV4aXN0aW5nIHN0cnVjdCBmaWVsZHMgbGlrZSBgdHgtJmd0O2xvY2FsLSZndDtzY2FubmluZ2AsIGB0eC0mZ3Q7c2RhdGEtJmd0O3N0YXRlYCwgYGhkci0mZ3Q7ZnJhbWVfY29udHJvbGAsIGFuZCBgaW5mby0mZ3Q7ZmxhZ3NgIC0gYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsaXplZC4KMy4gICoqRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogIEkgc2VlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGluaXRpYWxpemF0aW9ucyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIGZpZWxkIG1pZ2h0IGNhdXNlIGlzc3VlcyBsYXRlci4KNC4gICoqQm91bmRzIENoZWNrcy9MZW5ndGggQ2hhbmdlczoqKiBObyBtb2RpZmljYXRpb25zIHRoYXQgd291bGQgYWxsb3cgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpTbywgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZXJlJiMzOTtzIG5vIGluaGVyZW50IHJpc2sgb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3Jpbmcgb2YgKndoZW4qIHRoZSBvZmYtY2hhbm5lbCBjaGVjayBoYXBwZW5zLCBub3QgKmhvdyogdGhlIGRhdGEgaXMgaGFuZGxlZC4gTXkgdW5kZXJzdGFuZGluZyBvZiBLTVNBTiBpcyB0aGF0IGl0JiMzOTtzIGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcy4gS0FTQU4vb3RoZXIgc2FuaXRpemVycyBjb3ZlciBtZW1vcnkgY29ycnVwdGlvbiwgVUFGLCBPT0IsIGV0Yy4sIHdoaWNoIHRoaXMgaXNuJiMzOTt0IHRvdWNoaW5nLiBUaGlzIHBhdGNoIGRlYWxzIHdpdGggbW92aW5nIHRoZSBmaWx0ZXIuIEl0IG9wZXJhdGVzIG9uICpmdWxseSBpbml0aWFsaXplZCogU0tCIGNvbnRyb2wgYnVmZmVycyBhbmQgaGVhZGVycy4KClRoZXJlZm9yZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yIG9mIHRoZSBvZmYtY2hhbm5lbCBzY2FubmluZyBjaGVjayBpbiBtYWM4MDIxMSwgbW92aW5nIHRoZSBsb2NhdGlvbiBidXQgbm90IGFsdGVyaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBpbnRyb2R1Y2luZyBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCB0cmlnZ2VyIEtNU0FOLiBLQVNBTi9vdGhlciBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgb2ZmLWNoYW5uZWwgZnJhbWUgZmlsdGVyaW5nIGluIG1hYzgwMjExIGJ5IG1vdmluZyB0aGUgc29mdHdhcmUgc2Nhbm5pbmcgb2ZmLWNoYW5uZWwgZHJvcCBjaGVjayBmcm9tIGVhcmx5IFRYIGhhbmRsaW5nIChpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyBhbmQgaWVlZTgwMjExXzgwMjNfeG1pdCkgaW50byBhIGRlZGljYXRlZCBsYXRlIFRYIGhhbmRsZXIgKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpIGludm9rZWQgaW4gaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKS5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcGFja2V0IGRyb3AgZGVjaXNpb25zIGR1cmluZyBUWCBwcm9jZXNzaW5nIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBza2IgaGVhZGVycyBhbmQgc3RhdGUgYml0bWFwcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3IgYnVmZmVyIGJvdW5kYXJ5IGNhbGN1bGF0aW9ucy4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIGFueSBwYWNrZXQgaGFuZGxpbmcgb3IgbGlmZWN5Y2xlIGlzc3VlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIG9mZi1jaGFubmVsIGZyYW1lIGZpbHRlcmluZyBpbiBtYWM4MDIxMSBieSBtb3ZpbmcgdGhlIHNvZnR3YXJlIHNjYW5uaW5nIG9mZi1jaGFubmVsIGRyb3AgY2hlY2sgZnJvbSBlYXJseSBUWCBoYW5kbGluZyAoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MgYW5kIGllZWU4MDIxMV84MDIzX3htaXQpIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIGluIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCkuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHBhY2tldCBkcm9wIGRlY2lzaW9ucyBkdXJpbmcgVFggcHJvY2Vzc2luZyBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgc2tiIGhlYWRlcnMgYW5kIHN0YXRlIGJpdG1hcHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIG9yIGJ1ZmZlciBib3VuZGFyeSBjYWxjdWxhdGlvbnMuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjb3ZlciBhbnkgcGFja2V0IGhhbmRsaW5nIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDc6NDIuMDIzNDU2MjU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk4MDI3MzgxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbFwiLFxuICAgIFwiaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVcIixcbiAgICBcImllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jXCIsXG4gICAgXCJpZWVlODAyMTFfODAyM194bWl0XCIsXG4gICAgXCJpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdFwiLFxuICAgIFwiaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyM1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG9mZi1jaGFubmVsIGZyYW1lIGZpbHRlcmluZyBpbiBtYWM4MDIxMSBieSBtb3ZpbmcgdGhlIHNvZnR3YXJlIHNjYW5uaW5nIG9mZi1jaGFubmVsIGRyb3AgY2hlY2sgZnJvbSBlYXJseSBUWCBoYW5kbGluZyAoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MgYW5kIGllZWU4MDIxMV84MDIzX3htaXQpIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIGluIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCkuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcGFja2V0IGRyb3AgZGVjaXNpb25zIGR1cmluZyBUWCBwcm9jZXNzaW5nIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBza2IgaGVhZGVycyBhbmQgc3RhdGUgYml0bWFwcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3IgYnVmZmVyIGJvdW5kYXJ5IGNhbGN1bGF0aW9ucy4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIGFueSBwYWNrZXQgaGFuZGxpbmcgb3IgbGlmZWN5Y2xlIGlzc3VlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbWFjODAyMTEgVFggcGF0aCBieSBjb25zb2xpZGF0aW5nIG9mZi1jaGFubmVsIGZyYW1lIGRyb3BwaW5nIGR1cmluZyBzb2Z0d2FyZSBzY2FubmluZyBpbnRvIGEgZGVkaWNhdGVkIGxhdGUgVFggaGFuZGxlciAoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCkgaW52b2tlZCB2aWEgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKSwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGNoZWNrcyBmcm9tIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKCkgYW5kIGllZWU4MDIxMV84MDIzX3htaXQoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB0cmFuc21pc3Npb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDc6NDIuMDIzNDYxMzg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ2Nzg5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YjdjZDViY2M0ODJkZWI4MDJiODkyMjdmYzg0MGZhOWI2OTgxYjAyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NDc6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xcbmluZGV4IDkxYjE0MTEyZTI0ZjAuLjA4YTM5MjcyZjI2YTAgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcXG4rKysgYi9uZXQvbWFjODAyMTEvdHguY1xcbkBAIC0yNjksNyArMjY5LDYgQEAgaWVlZTgwMjExX3R4X2hfZHluYW1pY19wcyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZVxcbiBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbiB7XFxuLVxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtXFx1MDAzZXNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC1cXHUwMDNlc2tiKTtcXG4gXFx0Ym9vbCBhc3NvYyA9IGZhbHNlO1xcbkBAIC0yNzcsMjAgKzI3Niw2IEBAIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXFxuIFxcdGlmICh1bmxpa2VseShpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKVxcbiBcXHRcXHRyZXR1cm4gVFhfQ09OVElOVUU7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlc2Nhbm5pbmcpKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgdGVzdF9iaXQoU0RBVEFfU1RBVEVfT0ZGQ0hBTk5FTCwgXFx1MDAyNnR4LVxcdTAwM2VzZGF0YS1cXHUwMDNlc3RhdGUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhaWVlZTgwMjExX2lzX2FueV9udWxsZnVuYyhoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpKVxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBXaGVuIHNvZnR3YXJlIHNjYW5uaW5nIG9ubHkgbnVsbGZ1bmMgZnJhbWVzICh0byBub3RpZnlcXG4tXFx0XFx0ICogdGhlIHNsZWVwIHN0YXRlIHRvIHRoZSBBUCkgYW5kIHByb2JlIHJlcXVlc3RzIChmb3IgdGhlXFxuLVxcdFxcdCAqIGFjdGl2ZSBzY2FuKSBhcmUgYWxsb3dlZCwgYWxsIG90aGVyIGZyYW1lcyBzaG91bGQgbm90IGJlXFxuLVxcdFxcdCAqIHNlbnQgYW5kIHdlIHNob3VsZCBub3QgZ2V0IGhlcmUsIGJ1dCBpZiB3ZSBkb1xcbi1cXHRcXHQgKiBub25ldGhlbGVzcywgZHJvcCB0aGVtIHRvIGF2b2lkIHNlbmRpbmcgdGhlbVxcbi1cXHRcXHQgKiBvZmYtY2hhbm5lbC4gU2VlIF9faWVlZTgwMjExX3N0YXJ0X3NjYW4oKSBmb3IgbW9yZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHJldHVybiBUWF9EUk9QO1xcbi1cXG4gXFx0aWYgKHR4LVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfT0NCKVxcbiBcXHRcXHRyZXR1cm4gVFhfQ09OVElOVUU7XFxuIFxcbkBAIC04MDUsNiArNzkwLDMzIEBAIGllZWU4MDIxMV90eF9oX3JhdGVfY3RybChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbiBcXHRyZXR1cm4gVFhfQ09OVElOVUU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lXFxuK2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcXG4re1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtXFx1MDAzZXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eC1cXHUwMDNlc2tiKTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKVxcbitcXHRcXHRyZXR1cm4gVFhfQ09OVElOVUU7XFxuK1xcbitcXHRpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlc2Nhbm5pbmcpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGVzdF9iaXQoU0RBVEFfU1RBVEVfT0ZGQ0hBTk5FTCwgXFx1MDAyNnR4LVxcdTAwM2VzZGF0YS1cXHUwMDNlc3RhdGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhaWVlZTgwMjExX2lzX2FueV9udWxsZnVuYyhoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFdoZW4gc29mdHdhcmUgc2Nhbm5pbmcgb25seSBudWxsZnVuYyBmcmFtZXMgKHRvIG5vdGlmeVxcbitcXHRcXHQgKiB0aGUgc2xlZXAgc3RhdGUgdG8gdGhlIEFQKSBhbmQgcHJvYmUgcmVxdWVzdHMgKGZvciB0aGVcXG4rXFx0XFx0ICogYWN0aXZlIHNjYW4pIGFyZSBhbGxvd2VkLCBhbGwgb3RoZXIgZnJhbWVzIHNob3VsZCBub3QgYmVcXG4rXFx0XFx0ICogc2VudCBhbmQgd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvXFxuK1xcdFxcdCAqIG5vbmV0aGVsZXNzLCBkcm9wIHRoZW0gdG8gYXZvaWQgc2VuZGluZyB0aGVtXFxuK1xcdFxcdCAqIG9mZi1jaGFubmVsLiBTZWUgX19pZWVlODAyMTFfc3RhcnRfc2NhbigpIGZvciBtb3JlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuIFRYX0RST1A7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBUWF9DT05USU5VRTtcXG4rfVxcbitcXG4gc3RhdGljIF9fbGUxNiBpZWVlODAyMTFfdHhfbmV4dF9zZXEoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpXFxuIHtcXG4gXFx0dTE2ICpzZXEgPSBcXHUwMDI2c3RhLVxcdTAwM2V0aWRfc2VxW3RpZF07XFxuQEAgLTE4NjQsNiArMTg3Niw3IEBAIHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcXG4gXFx0XFx0Z290byB0eGhfZG9uZTtcXG4gXFx0fVxcbiBcXG4rXFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCk7XFxuIFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7XFxuIFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKTtcXG4gXFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZnJhZ21lbnQpO1xcbkBAIC00Njg2LDEwICs0Njk5LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0cXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKHNkYXRhLCBzdGEsIHNrYik7XFxuIFxcdHNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlKTtcXG4gXFxuLVxcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCBcXHUwMDI2bG9jYWwtXFx1MDAzZXNjYW5uaW5nKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsIFxcdTAwMjZzZGF0YS1cXHUwMDNlc3RhdGUpKVxcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXG4gXFx0c2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC00NzU2LDExICs0NzY1LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0aWVlZTgwMjExX3RwdF9sZWRfdHJpZ190eChsb2NhbCwgbGVuKTtcXG4gXFxuIFxcdGllZWU4MDIxMV90eF84MDIzKHNkYXRhLCBza2IsIHN0YSwgZmFsc2UpO1xcbi1cXG4tXFx0cmV0dXJuO1xcbi1cXG4tb3V0X2ZyZWU6XFxuLVxcdGtmcmVlX3NrYihza2IpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDc6NDIuNDE5MDM2NjI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MTM0MjkzNDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsXCIsXG4gICAgXCJpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZVwiLFxuICAgIFwiaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2NcIixcbiAgICBcImllZWU4MDIxMV84MDIzX3htaXRcIixcbiAgICBcImllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XCIsXG4gICAgXCJpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtYWM4MDIxMSBUWCBwYXRoIGJ5IGNvbnNvbGlkYXRpbmcgb2ZmLWNoYW5uZWwgZnJhbWUgZHJvcHBpbmcgZHVyaW5nIHNvZnR3YXJlIHNjYW5uaW5nIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIHZpYSBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpLCB3aGlsZSByZW1vdmluZyByZWR1bmRhbnQgY2hlY2tzIGZyb20gaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MoKSBhbmQgaWVlZTgwMjExXzgwMjNfeG1pdCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCB3aXJlbGVzcyBpbnRlcmZhY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKSwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZiN2NkNWJjYzQ4MmRlYjgwMmI4OTIyN2ZjODQwZmE5YjY5ODFiMDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE0OjQ3OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xuaW5kZXggOTFiMTQxMTJlMjRmMC4uMDhhMzkyNzJmMjZhMCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXG4rKysgYi9uZXQvbWFjODAyMTEvdHguY1xuQEAgLTI2OSw3ICsyNjksNiBAQCBpZWVlODAyMTFfdHhfaF9keW5hbWljX3BzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4gc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmVcbiBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIHtcbi1cbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtXHUwMDNlc2tiKTtcbiBcdGJvb2wgYXNzb2MgPSBmYWxzZTtcbkBAIC0yNzcsMjAgKzI3Niw2IEBAIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4gXHRpZiAodW5saWtlbHkoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpXG4gXHRcdHJldHVybiBUWF9DT05USU5VRTtcbiBcbi1cdGlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCBcdTAwMjZ0eC1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FubmluZykpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsIFx1MDAyNnR4LVx1MDAzZXNkYXRhLVx1MDAzZXN0YXRlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKVxuLVx0XHQvKlxuLVx0XHQgKiBXaGVuIHNvZnR3YXJlIHNjYW5uaW5nIG9ubHkgbnVsbGZ1bmMgZnJhbWVzICh0byBub3RpZnlcbi1cdFx0ICogdGhlIHNsZWVwIHN0YXRlIHRvIHRoZSBBUCkgYW5kIHByb2JlIHJlcXVlc3RzIChmb3IgdGhlXG4tXHRcdCAqIGFjdGl2ZSBzY2FuKSBhcmUgYWxsb3dlZCwgYWxsIG90aGVyIGZyYW1lcyBzaG91bGQgbm90IGJlXG4tXHRcdCAqIHNlbnQgYW5kIHdlIHNob3VsZCBub3QgZ2V0IGhlcmUsIGJ1dCBpZiB3ZSBkb1xuLVx0XHQgKiBub25ldGhlbGVzcywgZHJvcCB0aGVtIHRvIGF2b2lkIHNlbmRpbmcgdGhlbVxuLVx0XHQgKiBvZmYtY2hhbm5lbC4gU2VlIF9faWVlZTgwMjExX3N0YXJ0X3NjYW4oKSBmb3IgbW9yZS5cbi1cdFx0ICovXG4tXHRcdHJldHVybiBUWF9EUk9QO1xuLVxuIFx0aWYgKHR4LVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX09DQilcbiBcdFx0cmV0dXJuIFRYX0NPTlRJTlVFO1xuIFxuQEAgLTgwNSw2ICs3OTAsMzMgQEAgaWVlZTgwMjExX3R4X2hfcmF0ZV9jdHJsKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4gXHRyZXR1cm4gVFhfQ09OVElOVUU7XG4gfVxuIFxuK3N0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lXG4raWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuK3tcbitcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbitcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtXHUwMDNlc2tiKTtcbitcbitcdGlmICh1bmxpa2VseShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSlcbitcdFx0cmV0dXJuIFRYX0NPTlRJTlVFO1xuK1xuK1x0aWYgKHVubGlrZWx5KHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsIFx1MDAyNnR4LVx1MDAzZWxvY2FsLVx1MDAzZXNjYW5uaW5nKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGVzdF9iaXQoU0RBVEFfU1RBVEVfT0ZGQ0hBTk5FTCwgXHUwMDI2dHgtXHUwMDNlc2RhdGEtXHUwMDNlc3RhdGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpZWVlODAyMTFfaXNfcHJvYmVfcmVxKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhaWVlZTgwMjExX2lzX2FueV9udWxsZnVuYyhoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbitcdFx0LypcbitcdFx0ICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5XG4rXHRcdCAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZVxuK1x0XHQgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZVxuK1x0XHQgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG9cbitcdFx0ICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW1cbitcdFx0ICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gVFhfRFJPUDtcbitcdH1cbitcbitcdHJldHVybiBUWF9DT05USU5VRTtcbit9XG4rXG4gc3RhdGljIF9fbGUxNiBpZWVlODAyMTFfdHhfbmV4dF9zZXEoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpXG4ge1xuIFx0dTE2ICpzZXEgPSBcdTAwMjZzdGEtXHUwMDNldGlkX3NlcVt0aWRdO1xuQEAgLTE4NjQsNiArMTg3Niw3IEBAIHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbiBcdFx0Z290byB0eGhfZG9uZTtcbiBcdH1cbiBcbitcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpO1xuIFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfbWljaGFlbF9taWNfYWRkKTtcbiBcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKTtcbiBcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2ZyYWdtZW50KTtcbkBAIC00Njg2LDEwICs0Njk5LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdHF1ZXVlID0gaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzZGF0YSwgc3RhLCBza2IpO1xuIFx0c2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWUpO1xuIFxuLVx0aWYgKHVubGlrZWx5KHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsIFx1MDAyNmxvY2FsLVx1MDAzZXNjYW5uaW5nKSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdGVzdF9iaXQoU0RBVEFfU1RBVEVfT0ZGQ0hBTk5FTCwgXHUwMDI2c2RhdGEtXHUwMDNlc3RhdGUpKVxuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVxuIFx0c2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAodW5saWtlbHkoIXNrYikpXG4gXHRcdHJldHVybjtcbkBAIC00NzU2LDExICs0NzY1LDYgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGllZWU4MDIxMV90cHRfbGVkX3RyaWdfdHgobG9jYWwsIGxlbik7XG4gXG4gXHRpZWVlODAyMTFfdHhfODAyMyhzZGF0YSwgc2tiLCBzdGEsIGZhbHNlKTtcbi1cbi1cdHJldHVybjtcbi1cbi1vdXRfZnJlZTpcbi1cdGtmcmVlX3NrYihza2IpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ3OjQyLjQxOTAzODU5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDY0NTQ0NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2ggYW5kIGl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHJlbGF0ZWQgdG8gb2ZmLWNoYW5uZWwgb3BlcmF0aW9uIHdpdGhpbiB0aGUgYG5ldC9tYWM4MDIxMWAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0cmFuc21pdCBiZWhhdmlvci4gVGhlIGRpZmYgcG9pbnRzIHNxdWFyZWx5IGF0IGBuZXQvbWFjODAyMTEvdHguY2AsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSBpbiBhbnkgODAyLjExIGltcGxlbWVudGF0aW9uLlxuXG5UaGUgZmlyc3QgY2hhbmdlIGluIGBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYygpYCBqdW1wcyBvdXQuIFJlbW92aW5nIHRoZSBvZmYtY2hhbm5lbCBjaGVjayBkdXJpbmcgc2Nhbm5pbmcgaXMgaW50ZXJlc3RpbmcuIEl0IGltcGxpZXMgYSBzaGlmdCBpbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIG9mZi1jaGFubmVsIGFjdGl2aXR5IHdoZW4gYSBzdGF0aW9uIGlzIGFjdGl2ZWx5IHNjYW5uaW5nIGZvciBuZXR3b3Jrcy4gVGhlbiwgdGhlIGludHJvZHVjdGlvbiBvZiBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCgpYCBhbmQgdGhlIGxhdGUgaW52b2NhdGlvbiB3aXRoaW4gYGludm9rZV90eF9oYW5kbGVyc19sYXRlKClgIGlzIGNyaXRpY2FsLiBUaGlzIHNpZ25hbHMgYSBuZXcgdHggaGFuZGxlciBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gaGFuZGxlIG9mZi1jaGFubmVsIHNjZW5hcmlvcyBhbmQgaXQgc3VnZ2VzdHMgdGhhdCB0aGUgb2ZmLWNoYW5uZWwgaGFuZGxpbmcgbG9naWMgaXMgbm93IGJlaW5nIGRlZmVycmVkIHRvIHRoZSBsYXRlciBzdGFnZXMgb2YgdGhlIHRyYW5zbWl0IHByb2Nlc3MuIFRoaXMgbWF5IGltcGFjdCB2YXJpb3VzIGFzcGVjdHMsIHN1Y2ggYXMgdGhyb3VnaHB1dCwgbGF0ZW5jeSwgb3IgZXZlbiBmcmFtZSBvcmRlcmluZy4gSXQgd291bGQgYmUgaW1wb3J0YW50IHRvIHN0dWR5IHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuXG5cbkFkZGl0aW9uYWxseSwgdGhlIHJlbW92YWwgb2YgdGhlIHNwZWNpZmljIGNoZWNrIHdpdGhpbiBgaWVlZTgwMjExXzgwMjNfeG1pdCgpYCBpcyB3b3J0aCBub3RpbmcuIFRoaXMgYGdvdG8gb3V0X2ZyZWVgIHN0YXRlbWVudCB3YXMgbGlrZWx5IGEgZmFzdC1wYXRoIG9wdGltaXphdGlvbiBvciBhIHNhZmVndWFyZCB0byBwcmV2ZW50IHRyYW5zbWlzc2lvbiBvbiBvZmYtY2hhbm5lbC4gSXRzIHJlbW92YWwsIGVzcGVjaWFsbHkgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgbmV3IGhhbmRsZXIsIGluZGljYXRlcyBhIHBvdGVudGlhbGx5IG1vcmUgbnVhbmNlZCBhbmQgZmxleGlibGUgYXBwcm9hY2ggdG8gb2ZmLWNoYW5uZWwgdHJhbnNtaXNzaW9uLiBJdCBhbHNvIHN1Z2dlc3RzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNoZWNrIHdhcyBubyBsb25nZXIgbmVlZGVkIGJlY2F1c2UgdGhlIG5ldyBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCgpYCBoYW5kbGVyIGhhcyByZXBsYWNlZCBpdCBvciBpcyB0YWtpbmcgY2FyZSBvZiB0aGUgd29yayBkb25lIGJ5IHRoZSBlYXJsaWVyIGNoZWNrLlxuXG5UaGUgbmV4dCBxdWVzdGlvbjogaG93IHZ1bG5lcmFibGUgaXMgdGhpcyBjb2RlIHRvIGZ1enppbmc/IEtub3dpbmcgdGhhdCBgbWFjODAyMTFgIGlzIGhlYXZpbHkgZXhlcmNpc2VkIGJ5IHN5emthbGxlciB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAsIG5sODAyMTEsIGFuZCBzdGFuZGFyZCBzb2NrZXQgdHJhbnNtaXNzaW9ucywgSSdtIGFscmVhZHkgaW5jbGluZWQgdG8gYmVsaWV2ZSB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgYmUgZXhwb3NlZCB0byBzaWduaWZpY2FudCB0ZXN0aW5nIHByZXNzdXJlLiBUaGUgZmFjdCB0aGF0IHRoZXNlIGludGVyZmFjZXMgYXJlIHJlYWNoYWJsZSBtZWFucyBhbnkgYnVncyBpbnRyb2R1Y2VkIGhlcmUgaGF2ZSBhIGdvb2QgY2hhbmNlIG9mIGJlaW5nIGZvdW5kIHJlbGF0aXZlbHkgcXVpY2tseS4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgbW9yZSB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MDIuODgzNTkxMTEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDcxMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19NQUM4MDIxMSkgKz0gbWFjODAyMTEub1xcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS0zLVxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlPTU9bWFjODAyMTEteSA6PSBcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMzktXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjQwOm1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0xFRFMpICs9IGxlZC5vXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjQxOm1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICs9IFxcXFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNDItXFx0ZGVidWdmcy5vIFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS00Ni1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NDc6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTUVTSCkgKz0gXFxcXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS00OC1cXHRtZXNoLm8gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlPTU5PXJjODAyMTFfbWluc3RyZWwteSA6PSBcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNjEtXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjYyOnJjODAyMTFfbWluc3RyZWwtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgKz0gXFxcXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS02My1cXHRyYzgwMjExX21pbnN0cmVsX2h0X2RlYnVnZnMub1xcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS02NC1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NjU6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUwpICs9ICQocmM4MDIxMV9taW5zdHJlbC15KVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS02Ni1cXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz02MTM9c3RhdGljIGludCBpZWVlODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTcxMC1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxubmV0L21hYzgwMjExL2NmZy5jOjcxMTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNzEyLVxcdFxcdGlmIChzZGF0YS1cXHUwMDNldS5tZXNoLnNlY3VyaXR5ICE9IElFRUU4MDIxMV9NRVNIX1NFQ19OT05FKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTIxOTA9c3RhdGljIHZvaWQgc3RhX2FwcGx5X21lc2hfcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTIxOTMte1xcbm5ldC9tYWM4MDIxMS9jZmcuYzoyMTk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTk1LVxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLVxcdTAwM2VzZGF0YTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz0yNzg3PXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjg5My1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6Mjg5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjg5NS1zdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfbXBhdGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz00NDI4PXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9hZnRlcl9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ1MS1cXHRcXHRicmVhaztcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDQ1MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ1My1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NDU2Mz1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfY3NhX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGlua19kYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTQ2NTQtXFx0XFx0YnJlYWs7XFxubmV0L21hYzgwMjExL2NmZy5jOjQ2NTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTQ2NTYtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOiB7XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTk5MT1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjAxMS1cXHQuZHVtcF9zdXJ2ZXkgPSBpZWVlODAyMTFfZHVtcF9zdXJ2ZXksXFxubmV0L21hYzgwMjExL2NmZy5jOjYwMTI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTYwMTMtXFx0LmFkZF9tcGF0aCA9IGllZWU4MDIxMV9hZGRfbXBhdGgsXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0xMC1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDoxMTojaWZkZWYgQ09ORklHX01BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTEyLSNkZWZpbmUgTUFDODAyMTFfT0NCX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE2LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjE3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTE4LSNkZWZpbmUgTUFDODAyMTFfSUJTU19ERUJVRyAxXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMi1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMzojaWZkZWYgQ09ORklHX01BQzgwMjExX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjQtI2RlZmluZSBNQUM4MDIxMV9QU19ERUJVRyAxXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yOC1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyOTojaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMzAtI2RlZmluZSBNQUM4MDIxMV9IVF9ERUJVRyAxXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0zNC1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDozNTojaWZkZWYgQ09ORklHX01BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTM2LSNkZWZpbmUgTUFDODAyMTFfTVBMX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQwLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTVBBVEhfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaC00Mi0jZGVmaW5lIE1BQzgwMjExX01QQVRIX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTQ2LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjQ3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUhXTVBfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaC00OC0jZGVmaW5lIE1BQzgwMjExX01IV01QX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTUyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjUzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTQtI2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTgtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTYwLSNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjQtXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjYtI2RlZmluZSBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTcwLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjcxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVERMU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTcyLSNkZWZpbmUgTUFDODAyMTFfVERMU19ERUJVRyAxXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC03Ni1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDo3NzojaWZkZWYgQ09ORklHX01BQzgwMjExX1NUQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTc4LSNkZWZpbmUgTUFDODAyMTFfU1RBX0RFQlVHIDFcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTgyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjgzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUxNRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTg0LSNkZWZpbmUgTUFDODAyMTFfTUxNRV9ERUJVRyAxXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC04OC1cXG5uZXQvbWFjODAyMTEvZGVidWcuaDo4OTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTkwLXZvaWQgX19zZGF0YV9pbmZvKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX3ByaW50ZigxLCAyKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM9NjMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVidWdmc19zaG9ydF9mb3BzIHN0YXRzXyAjI25hbWUjIyBfb3BzID0ge1xcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjM2LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM6NjM3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTYzOC0jZGVmaW5lIERFQlVHRlNfU1RBVFNfQUREKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnMuYz02NDk9dm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMtNjgzLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmM6Njg0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvZGVidWdmcy5jLTY4NS1cXHRERUJVR0ZTX1NUQVRTX0FERChkb3QxMVRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmcy5oLTYtXFxubmV0L21hYzgwMjExL2RlYnVnZnMuaDo3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmgtOC12b2lkIGRlYnVnZnNfaHdfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oLTQtXFxubmV0L21hYzgwMjExL2RlYnVnZnNfa2V5Lmg6NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaC02LXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTczNj1JRUVFODAyMTFfSUZfTElOS19GSUxFKGFkZHIsIGNvbmYtXFx1MDAzZWFkZHIsIE1BQyk7XFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtNzM3LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjczODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy03MzktSUVFRTgwMjExX0lGX0ZJTEUoZXN0YWJfcGxpbmtzLCB1Lm1lc2guZXN0YWJfcGxpbmtzLCBBVE9NSUMpO1xcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9ODY4PXN0YXRpYyB2b2lkIGFkZF9pYnNzX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtODcyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjg3MzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYy04NzQtXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz05Mzc9c3RhdGljIHZvaWQgYWRkX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtOTQ5LVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo5NTA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtOTUxLVxcdFxcdGFkZF9tZXNoX2ZpbGVzKHNkYXRhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oLTEyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oOjEzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oLTE0LXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfcmVtb3ZlX25ldGRldihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuaC02LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5oOjc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmgtOC12b2lkIGllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbi0tXFxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaD00Nzc9c3RhdGljIGlubGluZSB2b2lkIGRydl9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC00OTQtXFxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaDo0OTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2RyaXZlci1vcHMuaC00OTYtc3RhdGljIGlubGluZSB2b2lkIGRydl92aWZfYWRkX2RlYnVnZnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD03NzA9c3RydWN0IGllZWU4MDIxMV9pZl9tZXNoIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg1MC1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo4NTE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtODUyLSNkZWZpbmUgSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQyhtc2gsIG5hbWUpXFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTA5OT1zdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMTUxLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjExNTI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTE1My1cXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RpcjtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTExNTc9c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMjQ0LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjEyNDU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTI0Ni1cXHRzdHJ1Y3Qge1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTM2ND1lbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTEzNzktXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTM4MDojaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMzgxLXN0cnVjdCB0cHRfbGVkX3RyaWdnZXIge1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTQ0OD1zdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MjgtXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTYyOTojaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjMwLVxcdHN0cnVjdCBsZWRfdHJpZ2dlciB0eF9sZWQsIHJ4X2xlZCwgYXNzb2NfbGVkLCByYWRpb19sZWQ7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjM2LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE2Mzc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2MzgtXFx0LyogU05NUCBjb3VudGVycyAqL1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTY2NC0jZGVmaW5lIEk4MDJfREVCVUdfSU5DKGMpIChjKSsrXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MTY2NTojZWxzZSAvKiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMgKi9cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjY2LSNkZWZpbmUgSTgwMl9ERUJVR19JTkMoYykgZG8geyB9IHdoaWxlICgwKVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE2Njc6I2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9ERUJVR19DT1VOVEVSUyAqL1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTE2NjgtXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xNjk1LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjE2OTY6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTY5Ny1cXHRzdHJ1Y3QgbG9jYWxfZGVidWdmc2RlbnRyaWVzIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI5NDI9dTMyIGllZWU4MDIxMV9jYWxjX2V4cGVjdGVkX3R4X2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yOTQ1LVxcdFxcdFxcdFxcdCAgICAgICBpbnQgbGVuLCBib29sIGFtcGR1KTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyOTQ2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTk9JTkxJTkVcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yOTQ3LSNkZWZpbmUgZGVidWdfbm9pbmxpbmUgbm9pbmxpbmVcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI5Nzg9aWVlZTgwMjExX3Vocl9jYXBfaWVfdG9fc3RhX3Vocl9jYXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yOTgzLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjI5ODQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01BQzgwMjExX0tVTklUX1RFU1QpXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjk4NS0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfSUZfTUFDODAyMTFfS1VOSVQoc3ltKSBFWFBPUlRfU1lNQk9MX0lGX0tVTklUKHN5bSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9rZXkuaD01OT1zdHJ1Y3QgaWVlZTgwMjExX2tleSB7XFxuLS1cXG5uZXQvbWFjODAyMTEva2V5LmgtMTIyLVxcbm5ldC9tYWM4MDIxMS9rZXkuaDoxMjM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL2tleS5oLTEyNC1cXHRzdHJ1Y3Qge1xcbi0tXFxubmV0L21hYzgwMjExL2xlZC5oPTEzPXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfbGVkX3J4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbm5ldC9tYWM4MDIxMS9sZWQuaC0xNC17XFxubmV0L21hYzgwMjExL2xlZC5oOjE1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEU1xcbm5ldC9tYWM4MDIxMS9sZWQuaC0xNi1cXHRpZiAoIWF0b21pY19yZWFkKFxcdTAwMjZsb2NhbC1cXHUwMDNlcnhfbGVkX2FjdGl2ZSkpXFxuLS1cXG5uZXQvbWFjODAyMTEvbGVkLmg9MjI9c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9sZWRfdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxubmV0L21hYzgwMjExL2xlZC5oLTIzLXtcXG5uZXQvbWFjODAyMTEvbGVkLmg6MjQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL2xlZC5oLTI1LVxcdGlmICghYXRvbWljX3JlYWQoXFx1MDAyNmxvY2FsLVxcdTAwM2V0eF9sZWRfYWN0aXZlKSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9sZWQuaC0zMC1cXG5uZXQvbWFjODAyMTEvbGVkLmg6MzE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL2xlZC5oLTMyLXZvaWQgaWVlZTgwMjExX2xlZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9sZWQuaD03MT1pZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgYnl0ZXMpXFxubmV0L21hYzgwMjExL2xlZC5oLTcyLXtcXG5uZXQvbWFjODAyMTEvbGVkLmg6NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL2xlZC5oLTc0LVxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZXRwdF9sZWRfYWN0aXZlKSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9sZWQuaD04MD1pZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgYnl0ZXMpXFxubmV0L21hYzgwMjExL2xlZC5oLTgxLXtcXG5uZXQvbWFjODAyMTEvbGVkLmg6ODI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL2xlZC5oLTgzLVxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bG9jYWwtXFx1MDAzZXRwdF9sZWRfYWN0aXZlKSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9tYWluLmM9MTEzOD1pbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxcbi0tXFxubmV0L21hYzgwMjExL21haW4uYy0xMzkzLVxcbm5ldC9tYWM4MDIxMS9tYWluLmM6MTM5NDojaWZuZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL21haW4uYy0xMzk1LVxcdC8qIG1lc2ggZGVwZW5kcyBvbiBLY29uZmlnLCBidXQgZHJpdmVycyBzaG91bGQgc2V0IGl0IGlmIHRoZXkgd2FudCAqL1xcbi0tXFxubmV0L21hYzgwMjExL21lc2guaD0zNzg9dm9pZCBtZXNoX3BhdGhfcmVmcmVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzgwLVxcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzgxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzgyLXN0YXRpYyBpbmxpbmVcXG4tLVxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM9ODEyPWludCBpZWVlODAyMTFfbWdtdF90eChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy04NDEtXFx0XFx0XFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jOjg0MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTg0My1cXHRcXHRmYWxsdGhyb3VnaDtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmM9MjQ9c3RhdGljIERFRklORV9NVVRFWChyYXRlX2N0cmxfbXV0ZXgpO1xcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMjUtXFxubmV0L21hYzgwMjExL3JhdGUuYzoyNjpzdGF0aWMgY2hhciAqaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyA9IENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUO1xcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMjctbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9kZWZhdWx0X3JjX2FsZ28sIGNoYXJwLCAwNjQ0KTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYXRlLmM9MjE2PWllZWU4MDIxMV9yYXRlX2NvbnRyb2xfb3BzX2dldChjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYy0yMzItXFx0LyogTm90ZTogY2hlY2sgZm9yIFxcdTAwM2UgMCBpcyBpbnRlbnRpb25hbCB0byBhdm9pZCBjbGFuZyB3YXJuaW5nICovXFxubmV0L21hYzgwMjExL3JhdGUuYzoyMzM6XFx0aWYgKCFvcHMgXFx1MDAyNlxcdTAwMjYgKHN0cmxlbihDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVCkgXFx1MDAzZSAwKSlcXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTIzNC1cXHRcXHQvKiB0cnkgYnVpbHQtaW4gb25lIGlmIHNwZWNpZmljIGFsZyByZXF1ZXN0ZWQgYnV0IG5vdCBmb3VuZCAqL1xcbm5ldC9tYWM4MDIxMS9yYXRlLmM6MjM1OlxcdFxcdG9wcyA9IGllZWU4MDIxMV90cnlfcmF0ZV9jb250cm9sX29wc19nZXQoQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQpO1xcbm5ldC9tYWM4MDIxMS9yYXRlLmMtMjM2LVxcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYy0yNDEtXFxubmV0L21hYzgwMjExL3JhdGUuYzoyNDI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL3JhdGUuYy0yNDMtc3RhdGljIHNzaXplX3QgcmNuYW1lX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLFxcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuYz0yODE9c3RhdGljIHZvaWQgcmF0ZV9jb250cm9sX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTI4NS1cXG5uZXQvbWFjODAyMTEvcmF0ZS5jOjI4NjojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvcmF0ZS5jLTI4Ny1cXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobG9jYWwtXFx1MDAzZWRlYnVnZnMucmNkaXIpO1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX2FkZF9zdGFfZGVidWdmcyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcXG5uZXQvbWFjODAyMTEvcmF0ZS5oLTU2LXtcXG5uZXQvbWFjODAyMTEvcmF0ZS5oOjU3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9yYXRlLmgtNTgtXFx0c3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IHN0YS1cXHUwMDNlcmF0ZV9jdHJsO1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuaD02Nz1zdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX2FkZF9kZWJ1Z2ZzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxcbm5ldC9tYWM4MDIxMS9yYXRlLmgtNjgte1xcbm5ldC9tYWM4MDIxMS9yYXRlLmg6Njk6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL3JhdGUuaC03MC1cXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyO1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuaD05ND12b2lkIHJhdGVfY29udHJvbF9kZWluaXRpYWxpemUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpO1xcbi0tXFxubmV0L21hYzgwMjExL3JhdGUuaC05Ny0vKiBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtcyAqL1xcbm5ldC9tYWM4MDIxMS9yYXRlLmg6OTg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9yYXRlLmgtOTktaW50IHJjODAyMTFfbWluc3RyZWxfaW5pdCh2b2lkKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM9MTA1OT1taW5zdHJlbF9odF91cGRhdGVfc3RhdHMoc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wLCBzdHJ1Y3QgbWluc3RyZWxfaHRfc3RhICptaSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTE4MS1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jOjExODI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYy0xMTgzLVxcdC8qIHVzZSBmaXhlZCBpbmRleCBpZiBzZXQgKi9cXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM9MTU5NT1taW5zdHJlbF9odF9nZXRfcmF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTYwNi1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jOjE2MDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYy0xNjA4LVxcdGlmIChtcC1cXHUwMDNlZml4ZWRfcmF0ZV9pZHggIT0gLTEpXFxuLS1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jPTE5MTU9bWluc3RyZWxfaHRfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuLS1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jLTE5NDgtXFxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYzoxOTQ5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMtMTk1MC1zdGF0aWMgdm9pZCBtaW5zdHJlbF9odF9hZGRfZGVidWdmcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqcHJpdixcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM9MTk4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHJhdGVfY29udHJvbF9vcHMgbWFjODAyMTFfbWluc3RyZWxfaHQgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jLTE5OTMtXFx0LmZyZWUgPSBtaW5zdHJlbF9odF9mcmVlLFxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM6MTk5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jLTE5OTUtXFx0LmFkZF9kZWJ1Z2ZzID0gbWluc3RyZWxfaHRfYWRkX2RlYnVnZnMsXFxuLS1cXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5oPTc1PXN0cnVjdCBtaW5zdHJlbF9wcml2IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmgtODUtXFxubmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuaDo4NjojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5oLTg3LVxcdC8qXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz0xMDUxPXN0YXRpYyB2b2lkIGllZWU4MDIxMV92ZXJpZnlfYWxpZ25tZW50KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxubmV0L21hYzgwMjExL3J4LmMtMTA1Mi17XFxubmV0L21hYzgwMjExL3J4LmM6MTA1MzojaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvcnguYy0xMDU0LVxcdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZylyeC1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhIFxcdTAwMjYgMSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz0yNzk0PWllZWU4MDIxMV9kZWxpdmVyX3NrYihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtMjg5My1cXG5uZXQvbWFjODAyMTEvcnguYzoyODk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9yeC5jLTI4OTUtc3RhdGljIGJvb2xcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jPTI5NjE9aWVlZTgwMjExX3J4X21lc2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy0yOTYzLXtcXG5uZXQvbWFjODAyMTEvcnguYzoyOTY0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9yeC5jLTI5NjUtXFx0c3RydWN0IGllZWU4MDIxMV9pZl9tZXNoICppZm1zaCA9IFxcdTAwMjZzZGF0YS1cXHUwMDNldS5tZXNoO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NzI9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBzdGFfcmh0X3BhcmFtcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc3LVxcdC5rZXlfbGVuID0gRVRIX0FMRU4sXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6Nzg6XFx0Lm1heF9zaXplID0gQ09ORklHX01BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFLFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc5LX07XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz04MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIGxpbmtfc3RhX3JodF9wYXJhbXMgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04Ni1cXHQua2V5X2xlbiA9IEVUSF9BTEVOLFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjg3OlxcdC5tYXhfc2l6ZSA9IENPTkZJR19NQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRSxcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy04OC19O1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NDY4PXZvaWQgc3RhX2luZm9fZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHN0YV9pbmZvICpzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01MDYtXFx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhzdGEtXFx1MDAzZXN0YS5yYXRlcykpO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjUwNzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01MDgtXFx0a2ZyZWUoc3RhLVxcdTAwM2VtZXNoKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTYzMz1fX3N0YV9pbmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY3LVxcdHdpcGh5X3dvcmtfaW5pdChcXHUwMDI2c3RhLVxcdTAwM2VhbXBkdV9tbG1lLndvcmssIGllZWU4MDIxMV9iYV9zZXNzaW9uX3dvcmspO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjY2ODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy02NjktXFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZikpIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc5NS1cXHRzdGFfaW5mb19mcmVlX2xpbmsoXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayk7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6Nzk2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc5Ny1cXHRrZnJlZShzdGEtXFx1MDAzZW1lc2gpO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MTEwNz1zdGF0aWMgdm9pZCBfX3N0YV9pbmZvX3JlY2FsY190aW0oc3RydWN0IHN0YV9pbmZvICpzdGEsIGJvb2wgaWdub3JlX3BlbmRpbmcpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMTIxLVxcdFxcdHBzID0gXFx1MDAyNnN0YS1cXHUwMDNlc2RhdGEtXFx1MDAzZWJzcy1cXHUwMDNlcHM7XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6MTEyMjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMTIzLVxcdH0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKFxcdTAwMjZzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2V2aWYpKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0yNzI4PXN0YXRpYyBpbmxpbmUgdTY0IHN0YV9nZXRfc3RhdHNfYnl0ZXMoc3RydWN0IGllZWU4MDIxMV9zdGFfcnhfc3RhdHMgKnJ4c3RhdHMpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0yNzQwLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjI3NDE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjc0Mi1zdGF0aWMgdm9pZCBzdGFfc2V0X21lc2hfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0zMDM4PXZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0zMjIzLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjMyMjQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzIyNS1cXHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmKSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTUyNT1zdHJ1Y3QgbGlua19zdGFfaW5mbyB7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC01NzYtXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6NTc3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTU3OC1cXHRzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RpcjtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTcxND1zdHJ1Y3Qgc3RhX2luZm8ge1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtNzMxLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjczMjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03MzMtXFx0c3RydWN0IG1lc2hfc3RhICptZXNoO1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtNzcyLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oOjc3MzojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03NzQtXFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19kaXI7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD03OTk9c3RhdGljIGlubGluZSBlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUgc3RhX3BsaW5rX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTgwMC17XFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg6ODAxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTgwMi1cXHRyZXR1cm4gc3RhLVxcdTAwM2VtZXNoLVxcdTAwM2VwbGlua19zdGF0ZTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90ZXN0cy8ua3VuaXRjb25maWc9Mj1DT05GSUdfQ0ZHODAyMTE9eVxcbm5ldC9tYWM4MDIxMS90ZXN0cy8ua3VuaXRjb25maWc6MzpDT05GSUdfTUFDODAyMTE9eVxcbm5ldC9tYWM4MDIxMS90ZXN0cy8ua3VuaXRjb25maWc6NDpDT05GSUdfTUFDODAyMTFfS1VOSVRfVEVTVD15XFxuLS1cXG5uZXQvbWFjODAyMTEvdGVzdHMvTWFrZWZpbGU9MT1tYWM4MDIxMS10ZXN0cy15ICs9IG1vZHVsZS5vIHV0aWwubyBlbGVtcy5vIG1mcC5vIHRwZS5vIGNoYW4tbW9kZS5vIHMxZ190aW0ubyB0dGxtLm9cXG5uZXQvbWFjODAyMTEvdGVzdHMvTWFrZWZpbGUtMi1cXG5uZXQvbWFjODAyMTEvdGVzdHMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfTUFDODAyMTFfS1VOSVRfVEVTVCkgKz0gbWFjODAyMTEtdGVzdHMub1xcbi0tXFxubmV0L21hYzgwMjExL3RyYWNlLmMtMTMtXFxubmV0L21hYzgwMjExL3RyYWNlLmM6MTQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcXG5uZXQvbWFjODAyMTEvdHJhY2UuYy0xNS12b2lkIF9fc2RhdGFfaW5mbyhjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbm5ldC9tYWM4MDIxMS90cmFjZV9tc2cuaC02LVxcbm5ldC9tYWM4MDIxMS90cmFjZV9tc2cuaDo3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL3RyYWNlX21zZy5oLTgtXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0yNzA9aWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTI5MC1cXHRcXHRcXHQgICAgIGllZWU4MDIxMV9pc19kYXRhKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpKSB7XFxubmV0L21hYzgwMjExL3R4LmM6MjkxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS90eC5jLTI5Mi1cXHRcXHRcXHRzZGF0YV9pbmZvKHR4LVxcdTAwM2VzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTE2OTE9c3RhdGljIGJvb2wgaWVlZTgwMjExX3R4X2ZyYWdzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMTcwNC1cXG5uZXQvbWFjODAyMTEvdHguYzoxNzA1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS90eC5jLTE3MDYtXFx0XFx0aWYgKFdBUk5fT05fT05DRShxIFxcdTAwM2U9IGxvY2FsLVxcdTAwM2Vody5xdWV1ZXMpKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0yNTEzPWludCBpZWVlODAyMTFfbG9va3VwX3JhX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTI1MzctXFx0XFx0YnJlYWs7XFxubmV0L21hYzgwMjExL3R4LmM6MjUzODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvdHguYy0yNTM5LVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTI2NTY9c3RhdGljIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfaGRyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMjY4Mi1cXG5uZXQvbWFjODAyMTEvdHguYzoyNjgzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS90eC5jLTI2ODQtXFx0aWYgKGxvY2FsLVxcdTAwM2Vmb3JjZV90eF9zdGF0dXMpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yNzU1LVxcdFxcdGJyZWFrO1xcbm5ldC9tYWM4MDIxMS90eC5jOjI3NTY6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3R4LmMtMjc1Ny1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yOTQzLVxcdFxcdCAgICAgICFpZWVlODAyMTFfaXNfb3VyX2FkZHIoc2RhdGEsIHNrYi1cXHUwMDNlZGF0YSArIEVUSF9BTEVOLCBOVUxMKSkpKSB7XFxubmV0L21hYzgwMjExL3R4LmM6Mjk0NDojaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUdcXG5uZXQvbWFjODAyMTEvdHguYy0yOTQ1LVxcdFxcdG5ldF9pbmZvX3JhdGVsaW1pdGVkKFxcXCIlczogZHJvcHBlZCBmcmFtZSB0byAlcE0gKHVuYXV0aG9yaXplZCBwb3J0KVxcXFxuXFxcIixcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTMwMTctXFxubmV0L21hYzgwMjExL3R4LmM6MzAxODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvdHguYy0zMDE5LVxcdGlmIChtZXNoaGRybGVuIFxcdTAwM2UgMClcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTMwNjQtXFx0XFx0ICAgIGxpbmtfaWQgIT0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQpIHtcXG5uZXQvbWFjODAyMTEvdHguYzozMDY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS90eC5jLTMwNjYtXFx0XFx0XFx0bmV0X2luZm9fcmF0ZWxpbWl0ZWQoXFxcIiVzOiBkcm9wcGVkIGZyYW1lIHRvICVwTSB3aXRoIGJhZCBsaW5rIElEIHJlcXVlc3QgKCVkIHZzLiAlZClcXFxcblxcXCIsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0zNzQ3PXZvaWQgX19pZWVlODAyMTFfeG1pdF9mYXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMzc5My1cXG5uZXQvbWFjODAyMTEvdHguYzozNzk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbm5ldC9tYWM4MDIxMS90eC5jLTM3OTUtXFx0aWYgKGxvY2FsLVxcdTAwM2Vmb3JjZV90eF9zdGF0dXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjAyLjkzMTA2NzEzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMDk0MDI1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhvc2UgY29kZSBzZWN0aW9uczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIG1hYzgwMjExIFRYIFBhdGgqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBtYWM4MDIxMSB0cmFuc21pdCBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb2RlIGhhbmRsZXMgdGhlIGNvbXBsZXggZGFuY2Ugb2YgZ2V0dGluZyBhIHBhY2tldCBmcm9tIHRoZSBkcml2ZXIgdG8gdGhlIGFpci4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gYG5ldC9tYWM4MDIxMS90eC5jYC4gTXkgaW5pdGlhbCB0YXJnZXRzIGFyZSBsaW5lcyAxODYwLTE5MDAgYW5kIDQ2ODAtNDc4MC4gVGhvc2Ugc2VjdGlvbnMgbGlrZWx5IHJlcHJlc2VudCBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgVFggcHJvY2VzcyDigJMgcGVyaGFwcyByZWxhdGVkIHRvIHBhY2tldCBzY2hlZHVsaW5nLCByYXRlIGFkYXB0YXRpb24sIGhhcmR3YXJlIGludGVyYWN0aW9ucywgb3IgbWF5YmUgZXZlbiBwb3dlciBzYXZlIGhhbmRsaW5nIG9uIHRoZSB0cmFuc21pdCBzaWRlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHNwZWNpZmljIGFyZWFzIHdpbGwgb2ZmZXIgZ29vZCBjb250ZXh0IGZvciB0aGUgcmVzdCBvZiB0aGUgZmlsZS5cblxuSSBhbHNvIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBjb25maWd1cmVkLCBzbyBJJ2xsIGJlIHJlZmVycmluZyB0byB0aGUgYEtjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhhdCdzIGdvaW5nIG9uLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBjaG9zZW4gY29uZmlndXJhdGlvbiwgYW5kIGhvdyB0aGVzZSBzZXR0aW5ncyBpbmZsdWVuY2UgdGhlIGNvZGUgcGF0aHMgaW4gYHR4LmNgIHRoYXQgSSdtIGV4YW1pbmluZy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZXNlIGZlYXR1cmVzIHJlbGF0ZSB0byBkaWZmZXJlbnQgaGFyZHdhcmUgcGxhdGZvcm1zIG9yIHByb3RvY29sIGltcGxlbWVudGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MDYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODowNi45NDA0NzE2MjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL3R4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRcXG4xODYxOlxcdC8qXFxuMTg2MjpcXHQgKiBMYXRlIGhhbmRsZXJzIGNhbiBiZSBjYWxsZWQgd2hpbGUgdGhlIHN0YSBsb2NrIGlzIGhlbGQuIEhhbmRsZXJzIHRoYXQgY2FuXFxuMTg2MzpcXHQgKiBjYXVzZSBwYWNrZXRzIHRvIGJlIGdlbmVyYXRlZCB3aWxsIGNhdXNlIGRlYWRsb2NrIVxcbjE4NjQ6XFx0ICovXFxuMTg2NTpcXHRzdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVyc19sYXRlKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXFxuMTg2NjpcXHR7XFxuMTg2NzpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LVxcdTAwM2Vza2IpO1xcbjE4Njg6XFx0XFx0aWVlZTgwMjExX3R4X3Jlc3VsdCByZXMgPSBUWF9DT05USU5VRTtcXG4xODY5OlxcdFxcbjE4NzA6XFx0XFx0aWYgKCFpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIEhBU19SQVRFX0NPTlRST0wpKVxcbjE4NzE6XFx0XFx0XFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfcmF0ZV9jdHJsKTtcXG4xODcyOlxcdFxcbjE4NzM6XFx0XFx0aWYgKHVubGlrZWx5KGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX0lOVEZMX1JFVFJBTlNNSVNTSU9OKSkge1xcbjE4NzQ6XFx0XFx0XFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2dHgtXFx1MDAzZXNrYnMsIHR4LVxcdTAwM2Vza2IpO1xcbjE4NzU6XFx0XFx0XFx0dHgtXFx1MDAzZXNrYiA9IE5VTEw7XFxuMTg3NjpcXHRcXHRcXHRnb3RvIHR4aF9kb25lO1xcbjE4Nzc6XFx0XFx0fVxcbjE4Nzg6XFx0XFxuMTg3OTpcXHRcXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTtcXG4xODgwOlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7XFxuMTg4MTpcXHRcXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZSk7XFxuMTg4MjpcXHRcXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7XFxuMTg4MzpcXHRcXHQvKiBoYW5kbGVycyBhZnRlciBmcmFnbWVudCBtdXN0IGJlIGF3YXJlIG9mIHR4IGluZm8gZnJhZ21lbnRhdGlvbiEgKi9cXG4xODg0OlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3N0YXRzKTtcXG4xODg1OlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2VuY3J5cHQpO1xcbjE4ODY6XFx0XFx0aWYgKCFpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIEhBU19SQVRFX0NPTlRST0wpKVxcbjE4ODc6XFx0XFx0XFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2FsY3VsYXRlX2R1cmF0aW9uKTtcXG4xODg4OlxcdCN1bmRlZiBDQUxMX1RYSFxcbjE4ODk6XFx0XFxuMTg5MDpcXHQgdHhoX2RvbmU6XFxuMTg5MTpcXHRcXHRpZiAodW5saWtlbHkocmVzID09IFRYX0RST1ApKSB7XFxuMTg5MjpcXHRcXHRcXHR0eC1cXHUwMDNlc2RhdGEtXFx1MDAzZXR4X2hhbmRsZXJzX2Ryb3ArKztcXG4xODkzOlxcdFxcdFxcdGlmICh0eC1cXHUwMDNlc2tiKVxcbjE4OTQ6XFx0XFx0XFx0XFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIHR4LVxcdTAwM2Vza2IpO1xcbjE4OTU6XFx0XFx0XFx0ZWxzZVxcbjE4OTY6XFx0XFx0XFx0XFx0aWVlZTgwMjExX3B1cmdlX3R4X3F1ZXVlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LCBcXHUwMDI2dHgtXFx1MDAzZXNrYnMpO1xcbjE4OTc6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjE4OTg6XFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShyZXMgPT0gVFhfUVVFVUVEKSkge1xcbjE4OTk6XFx0XFx0XFx0STgwMl9ERUJVR19JTkModHgtXFx1MDAzZWxvY2FsLVxcdTAwM2V0eF9oYW5kbGVyc19xdWV1ZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODowNi45NDA2OTQ0MzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMyNDgwMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTUFDODAyMTEgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBNQUM4MDIxMS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoZXNlIGRlcGVuZGVuY2llcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHdpcmVsZXNzIHN0YWNrIGFyZSBjb25maWd1cmVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlLCBkZWJ1Z2dpbmcgcG90ZW50aWFsIGlzc3Vlcywgb3IgZXZlbiBzaW1wbHkgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMuIEkgbmVlZCBhIGNsZWFyIHZpZXcgb2YgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCBob3cgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGludGVyYWN0LiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBkcml2ZXIgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzLiBMZXQncyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoLi4uIHRpbWUgdG8gc2VlIHdoYXQgdGhvc2UgS2NvbmZpZyBmaWxlcyByZXZlYWwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODowOS4xNzMxNzc2OTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMjgzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MDkuMjIwMjEwMDEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY0NTIwMDI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCA0MCBsaW5lcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBzdGFjayBhcmUgbGlrZWx5IGRlZmluZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IG1lbnUgZW50cmllcywgZGVmYXVsdCB2YWx1ZXMsIGhlbHAgdGV4dHMsIGFuZCBwb3RlbnRpYWxseSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLiBJJ20gbG9va2luZyBmb3IgdGhlIGZvdW5kYXRpb25hbCBidWlsZGluZyBibG9ja3MsIHRoZSB0b3AtbGV2ZWwgY2F0ZWdvcmllcyB1bmRlciB3aGljaCBtb3JlIHNwZWNpZmljIHdpcmVsZXNzIGZlYXR1cmVzIGFyZSBncm91cGVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHF1aWNrIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIGFuZCBzdHJ1Y3R1cmUgb2YgdGhlIGNvbmZpZ3VyYWJsZSBlbGVtZW50cyB3aXRoaW4gdGhlIGRyaXZlci4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yOlxuXG4qKm1hYzgwMjExIENvbmZpZ3VyYXRpb24gT3ZlcnZpZXcqKlxuXG5BbHJpZ2h0LCBJJ20gbm93IGluIHRoZSBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBza2ltIHRoZSBmaXJzdCA0MCBsaW5lcy4gSW1tZWRpYXRlbHkgSSdtIHRyeWluZyB0byBpZGVudGlmeSB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuIFdoYXQgYXJlIHRoZSBtYWpvciBzZWN0aW9ucz8gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXMgZGVmaW5lZD8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIGxpbmVzIHdpbGwgZGVmaW5lIHRoZSBjb3JlIG1vZHVsZSwgcGVyaGFwcyBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgYSBmZXcgaGlnaC1sZXZlbCBvcHRpb25zIGxpa2UgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBlbnRpcmUgc3Vic3lzdGVtLiBBcmUgdGhlcmUgYW55IGluaXRpYWwgZGVmYXVsdHMgc2V0LCBvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQganVtcHMgb3V0PyBUaGlzIGlzIHRoZSBpbml0aWFsIHNldHVwOyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIG1vcmUgc3BlY2lmaWMgc2V0dGluZ3MgYnVpbGQuIEkgYW0gZ29pbmcgdG8gdHJ5IGFuZCBpZGVudGlmeSBob3cgdGhpcyBtb2R1bGUgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWFjODAyMTEgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzE5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MTEuODY1NDE0MDU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xcbiAgMjI6XFx0XFx0Ym9vbFxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcXG4gIDI1OlxcdFxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4gIDI2OlxcdFxcdHNlbGVjdCBNQUM4MDIxMV9IQVNfUkNcXG4gIDI3OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAnbWluc3RyZWwnIFRYIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y2hvaWNlXFxuICAzMjpcXHRcXHRwcm9tcHQgXFxcIkRlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4gIDMzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFfSEFTX1JDXFxuICAzNDpcXHRcXHRkZWZhdWx0IE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgZGVmYXVsdCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXFxuICAzNzpcXHRcXHQgIG1hYzgwMjExIHdpbGwgdXNlLiBOb3RlIHRoYXQgdGhpcyBkZWZhdWx0IGNhbiBzdGlsbCBiZVxcbiAgMzg6XFx0XFx0ICBvdmVycmlkZGVuIHRocm91Z2ggdGhlIGllZWU4MDIxMV9kZWZhdWx0X3JjX2FsZ28gbW9kdWxlXFxuICAzOTpcXHRcXHQgIHBhcmFtZXRlciBpZiBkaWZmZXJlbnQgYWxnb3JpdGhtcyBhcmUgYXZhaWxhYmxlLlxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjExLjg2NTQ5NDk2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDE2MzEwMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbWFjODAyMTEgVFggUGF0aCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgY2hhbmdlOiBJdCdzIGEgcmVsb2NhdGlvbiBvZiB0aGUgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgY2hlY2sgd2l0aGluIHRoZSBtYWM4MDIxMSB0cmFuc21pdCBwYXRoLiBQcmV2aW91c2x5LCB0aGlzIGNoZWNrIHdhcyBwZXJmb3JtZWQgaW4gdHdvIHBsYWNlcywgYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKClgIGFuZCBgaWVlZTgwMjExXzgwMjNfeG1pdCgpYCwgdmVyeSBlYXJseSBpbiB0aGUgdHJhbnNtaXQgcHJvY2Vzcy4gVGhlIHBhdGNoIHN0cmF0ZWdpY2FsbHkgaW50cm9kdWNlcyBhIG5ldyB0cmFuc21pdCBoYW5kbGVyLCBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCgpYCwgYW5kIGludGVncmF0ZXMgaXQgbGF0ZXIgaW4gdGhlIHByb2Nlc3MgdmlhIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpYC4gVGhpcyBhbHNvIG1lYW5zIHRoZSBkdXBsaWNhdGUgY2hlY2tzIGluIHRoZSBwcmV2aW91cyB0d28gZnVuY3Rpb25zIGhhdmUgYmVlbiByZW1vdmVkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXZhbHVhdGUgd2hldGhlciB0aGlzIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nLiBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgeWVzLiBtYWM4MDIxMSBpcyByZWFkaWx5IGFjY2Vzc2libGUgZm9yIHRlc3RpbmcsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIG1hYzgwMjExX2h3c2ltLCBuZXRsaW5rL25sODAyMTEsIGFuZCBuZXR3b3JrIHNvY2tldHMgd2l0aCBwYWNrZXQgaW5qZWN0aW9uLiBUaGUgbW9kaWZpY2F0aW9uIGRpcmVjdGx5IGltcGFjdHMgZXhlY3V0YWJsZSBrZXJuZWwgbmV0d29ya2luZyBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgVFggcGF0aCBoYW5kbGluZyBkdXJpbmcgc2Nhbm5pbmcgYW5kIG9mZi1jaGFubmVsIHRyYW5zaXRpb25zLiBNb3ZpbmcgdGhpcyBjaGVjayB0byBhIFwibGF0ZVwiIGhhbmRsZXIgYWx0ZXJzIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyB0aW1lbGluZSwgaW50cm9kdWNpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIHN0YXRlIHRyYW5zaXRpb25zLCBhbmQgaW50cm9kdWNlIG9yIHJldmVhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBzY2FubmluZyBvcGVyYXRpb25zIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJdCdzIGFsc28gd29ydGggaW52ZXN0aWdhdGluZyBhbnkgc2hpZnRzIGluIHNrYiBsaWZlY3ljbGVzIG9yIHF1ZXVlIGhhbmRsaW5nIHRoYXQgdGhpcyBjaGFuZ2UgbWlnaHQgY2F1c2UuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGBpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsYCBpcyBub24tc3RhdGljIG9yIGlmIHRoZSBgZGVidWdfbm9pbmxpbmVgIG1hY3JvIGNhdXNlcyBpdCB0byBiZSBpbmxpbmVkLiBJIHNlZSB0aGF0IHRoaXMgaXMgY29uZGl0aW9uYWwuIGBDT05GSUdfTUFDODAyMTFfTk9JTkxJTkVgIGRldGVybWluZXMgaWYgYGRlYnVnX25vaW5saW5lYCBpcyBkZWZpbmVkIGFzIGBub2lubGluZWAgKHdoaWNoIHByb2R1Y2VzIGEgc3ltYm9sKSBvciBpcyBhbiBlbXB0eSBkZWZpbml0aW9uLCBhbmQgdGhlcmVmb3JlLCBhbiBpbmxpbmVkIGZ1bmN0aW9uLiBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgaWYgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBsb29rIGZvciB0aGlzIHN5bWJvbC5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBpZGVudGlmeSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGFuZCBoYW5kbGVycyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYGludm9rZV90eF9oYW5kbGVyc19sYXRlKClgIGFuZCBmcmFtZSB0cmFuc21pc3Npb24uIEknbGwgaGF2ZSB0byBncmVwIGZvciBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVgIGFuZCBjYWxsZXIgZnVuY3Rpb25zIGluIGBuZXQvbWFjODAyMTEvdHguY2AgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIG5ldyBoYW5kbGVyIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MTkuODgxODA5MDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjI4NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludm9rZV90eF9oYW5kbGVyc19sYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvdHguYz0xODI4PXN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0xODY0LSAqL1xcbm5ldC9tYWM4MDIxMS90eC5jOjE4NjU6c3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbm5ldC9tYWM4MDIxMS90eC5jLTE4NjYte1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MTkwNj1zdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMTkxMS1cXHRcXHRyZXR1cm4gcjtcXG5uZXQvbWFjODAyMTEvdHguYzoxOTEyOlxcdHJldHVybiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSh0eCk7XFxubmV0L21hYzgwMjExL3R4LmMtMTkxMy19XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0xOTU4PXN0YXRpYyBib29sIGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTE5OTUtXFxubmV0L21hYzgwMjExL3R4LmM6MTk5NjpcXHRpZiAoIWludm9rZV90eF9oYW5kbGVyc19sYXRlKFxcdTAwMjZ0eCkpXFxubmV0L21hYzgwMjExL3R4LmMtMTk5Ny1cXHRcXHRyZXN1bHQgPSBfX2llZWU4MDIxMV90eChsb2NhbCwgXFx1MDAyNnR4LnNrYnMsIHR4LnN0YSwgdHhwZW5kaW5nKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTM4ODg9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDAxNS1cXHR9IGVsc2Uge1xcbm5ldC9tYWM4MDIxMS90eC5jOjQwMTY6XFx0XFx0aWYgKGludm9rZV90eF9oYW5kbGVyc19sYXRlKFxcdTAwMjZ0eCkpXFxubmV0L21hYzgwMjExL3R4LmMtNDAxNy1cXHRcXHRcXHRnb3RvIGJlZ2luO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODoxOS45MjgwNDQ1ODVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUwMzU1ODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoZXNlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIDgwMi4xMSB0cmFuc21pc3Npb246XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIDgwMi4xMSBUcmFuc21pdCBQYXRoKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJ20gbG9va2luZyBhdCBhIHNlcXVlbmNlIG9mIGZ1bmN0aW9ucyB0aGF0IGxpa2VseSByZXByZXNlbnQgdGhlIGNvcmUgb2YgdGhlIDgwMi4xMSB0cmFuc21pc3Npb24gcHJvY2VzcyBpbiB0aGlzIGNvZGViYXNlLiBJIHNlZSBgaWVlZTgwMjExX3R4YCwgd2hpY2ggaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgZW50cnkgZnVuY3Rpb24gZm9yIGluaXRpYXRpbmcgYSB0cmFuc21pc3Npb24uIFRoZW4gd2UgaGF2ZSBgaWVlZTgwMjExX3R4X2RlcXVldWVgLCB3aGljaCB0ZWxscyBtZSB0aGF0IHRoaXMgYXJjaGl0ZWN0dXJlIGxpa2VseSB1c2VzIGEgcXVldWUtYmFzZWQgc3lzdGVtIGZvciBtYW5hZ2luZyBvdXRnb2luZyBwYWNrZXRzIOKAkyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5leHQsIGBpZWVlODAyMTFfODAyM194bWl0YCBpcyBpbnRlcmVzdGluZy4gVGhlIFwiODAyM1wiIG5hbWluZyBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluIHRoZSBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uIHByb2Nlc3MsIGNvbnZlcnRpbmcgdGhlIDgwMi4xMSBmcmFtZXMgdG8gYW4gRXRoZXJuZXQgZm9ybWF0LCBwZXJoYXBzIGZvciBhIGJyaWRnZSBvciBhIHdpcmVkIGNvbm5lY3Rpb24gaW4gYSBtaXhlZCBuZXR3b3JrLiBgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVgIGhpbnRzIGF0IGEgY2FsbGJhY2sgb3IgYSBwb3N0LXByb2Nlc3Npbmcgc3RhZ2UsIHdoZXJlIHNvbWUgZGVsYXllZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgaXMgY29tcGxldGVkLiBUaGlzIGNvdWxkIGJlIHRoaW5ncyBsaWtlIHVwZGF0aW5nIHN0YXRpc3RpY3MsIG1hbmFnaW5nIHJldHJpZXMsIG9yIGZyZWVpbmcgYnVmZmVycy4gRmluYWxseSwgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgIGlzIGltbWVkaWF0ZWx5IGludHJpZ3VpbmcuIFRoZSBcIm9mZmNoYW5uZWxcIiBwYXJ0IGltcGxpZXMgc29tZSBmb3JtIG9mIGNoYW5uZWwgc2Nhbm5pbmcgb3IgY29udHJvbCwgd2hpY2ggc3VnZ2VzdHMgdGhlIHBvc3NpYmlsaXR5IG9mIGhhbmRsaW5nIHRyYW5zbWlzc2lvbiBvbiBub24tcHJpbWFyeSBjaGFubmVscywgbWF5YmUgZm9yIGZlYXR1cmVzIGxpa2UgREZTIChEeW5hbWljIEZyZXF1ZW5jeSBTZWxlY3Rpb24pLCBvciBjaGFubmVsIGhvcHBpbmcgaW4gc29tZSBjaXJjdW1zdGFuY2VzLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBpZWVlODAyMTFfODAyM194bWl0YCwgSSBzaG91bGQgaW52ZXN0aWdhdGUgaXRzIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgd2hhdCAqY2FsbHMqIHRoYXQgZnVuY3Rpb24gd2lsbCBpbGx1bWluYXRlIGhvdyBhbmQgd2hlcmUgdGhlIEV0aGVybmV0LXJlbGF0ZWQgZW5jYXBzdWxhdGlvbiBoYXBwZW5zIGluIHRoZSBvdmVyYWxsIHRyYW5zbWlzc2lvbiBmbG93LiBUaGlzIHdpbGwgbGlrZWx5IHByb3ZpZGUgdmFsdWFibGUgY29udGV4dCBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRpZmZlcmVudCBmcmFtZSB0eXBlcyBhbmQgbmV0d29yayBpbnRlcmZhY2VzLiBJdCdzIGEga2V5IHBhcnQgb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MTEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODoyNC40MzE2MDU1OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTQzNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV84MDIzX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS90eC5jPTQ2Njc9c3RhdGljIGJvb2wgaWVlZTgwMjExX3R4XzgwMjMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00Njg2LVxcbm5ldC9tYWM4MDIxMS90eC5jOjQ2ODc6c3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvdHguYy00Njg4LVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NDc5MD1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ4MzUtXFx0c2tfcGFjaW5nX3NoaWZ0X3VwZGF0ZShza2ItXFx1MDAzZXNrLCBzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LnR4X3NrX3BhY2luZ19zaGlmdCk7XFxubmV0L21hYzgwMjExL3R4LmM6NDgzNjpcXHRpZWVlODAyMTFfODAyM194bWl0KHNkYXRhLCBkZXYsIHN0YSwga2V5LCBza2IpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTQ4MzctXFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjI0LjQ3Njc1NDYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDYyNDkwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIHRoZSA4MDIuMyBUcmFuc21pc3Npb24gUGF0aCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gc3BlY2lmaWNhbGx5IHNjcnV0aW5pemUgdGhlIGBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjNgIGZ1bmN0aW9uIGFuZCBpdHMgY291bnRlcnBhcnQsIGBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzYC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUsIGVzcGVjaWFsbHkgYXJvdW5kIDgwMi4zIGZyYW1lcywgd2hpY2ggaXMgb2Z0ZW4gYSBzb3VyY2Ugb2YgY29udGVudGlvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgbm90IGp1c3QgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLCBidXQgYWxzbyB3aGVyZSB0aGV5J3JlIGJlaW5nIGNhbGxlZCBmcm9tLiBBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIG9yIGNvZGUgcGF0aHMgdHJpZ2dlcmluZyB0aGVzZSBmdW5jdGlvbnM/IEFyZSB0aGVyZSBwYXJ0aWN1bGFyIGNhbGxlcnMgb3IgY29udGV4dHMgdGhhdCBzZWVtIHRvIGJlIGV4aGliaXRpbmcgcGVyZm9ybWFuY2UgaXNzdWVzLCBvciBhdCBsZWFzdCB0aGF0IHdhcnJhbnQgY2xvc2VyIGluc3BlY3Rpb24/IFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgYWN0aW9uYWJsZSBpbnNpZ2h0IGlzIGxpa2VseSB0byBsaWUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgYW5kIGRhdGEgZmxvdyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIGlzIGNydWNpYWwgdG8gaWRlbnRpZnlpbmcgYW55IGJvdHRsZW5lY2tzLiBJ4oCZbGwgc3RhcnQgdHJhY2luZyBhbmQgcHJvZmlsaW5nIHRvIGRldGVybWluZSB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjI3LjQyMzAwNjAzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ2Mjc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdWJpZl9zdGFydF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMjI4PW5ldGRldl90eF90IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjI5LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjMwOm5ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIzMS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjIzMjpuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIzMy1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjIzNDp2b2lkIF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjM1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9kYXRhaWZfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTQ0LVxcdC5uZG9fdW5pbml0XFx0XFx0PSBpZWVlODAyMTFfdW5pbml0LFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk0NTpcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0LFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk0Ni1cXHQubmRvX3NldF9yeF9tb2RlXFx0PSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0LFxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MTA0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9kYXRhaWZfODAyM19vcHMgPSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDUwLVxcdC5uZG9fdW5pbml0XFx0XFx0PSBpZWVlODAyMTFfdW5pbml0LFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEwNTE6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTItXFx0Lm5kb19zZXRfcnhfbW9kZVxcdD0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYz01Mzc9c3RhdGljIHZvaWQgaWVlZTgwMjExX3RkbHNfdGRfdHhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YXR1cy5jLTU2Ni1cXG5uZXQvbWFjODAyMTEvc3RhdHVzLmM6NTY3OlxcdFxcdFxcdGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHRlYXJkb3duX3NrYiwgc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9tYWM4MDIxMS9zdGF0dXMuYy01NjgtXFx0XFx0fVxcbi0tXFxubmV0L21hYzgwMjExL3RkbHMuYz05OTc9aWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL3RkbHMuYy0xMTIyLVxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG5uZXQvbWFjODAyMTEvdGRscy5jOjExMjM6XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIGRldiwgZmxhZ3MsXFxubmV0L21hYzgwMjExL3RkbHMuYy0xMTI0LVxcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLCBOVUxMKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTQzNTI9RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhxX3NjaGVkdWxlX3N0YXJ0KTtcXG5uZXQvbWFjODAyMTEvdHguYy00MzUzLVxcbm5ldC9tYWM4MDIxMS90eC5jOjQzNTQ6dm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21hYzgwMjExL3R4LmMtNDM1NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz00NTQyPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9tbG9fbXVsdGljYXN0X3R4X29uZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ1NTItXFx0Y3RybF9mbGFncyB8PSB1MzJfZW5jb2RlX2JpdHMobGlua19pZCwgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTkspO1xcbm5ldC9tYWM4MDIxMS90eC5jOjQ1NTM6XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChvdXQsIHNkYXRhLVxcdTAwM2VkZXYsIDAsIGN0cmxfZmxhZ3MsIE5VTEwpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTQ1NTQtfVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NDU1Nj1zdGF0aWMgdm9pZCBpZWVlODAyMTFfbWxvX211bHRpY2FzdF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDU2Ny1cXG5uZXQvbWFjODAyMTEvdHguYzo0NTY4OlxcdFxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBzZGF0YS1cXHUwMDNlZGV2LCAwLCBjdHJsX2ZsYWdzLFxcbm5ldC9tYWM4MDIxMS90eC5jLTQ1NjktXFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ1ODAtLyoqXFxubmV0L21hYzgwMjExL3R4LmM6NDU4MTogKiBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCAtIG5ldGlmIHN0YXJ0X3htaXQgZnVuY3Rpb24gZm9yIDgwMi4zIHZpZnNcXG5uZXQvbWFjODAyMTEvdHguYy00NTgyLSAqIEBza2I6IHBhY2tldCB0byBiZSBzZW50XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00NTg4LSAqL1xcbm5ldC9tYWM4MDIxMS90eC5jOjQ1ODk6bmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbWFjODAyMTEvdHguYy00NTkwLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDYwOC1cXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnF1ZXVlKSkpXFxubmV0L21hYzgwMjExL3R4LmM6NDYwOTpcXHRcXHRcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2LCAwLFxcbm5ldC9tYWM4MDIxMS90eC5jLTQ2MTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJRUVFODAyMTFfVFhfQ1RSTF9NTE9fTElOS19VTlNQRUMsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00NjE5LW5vcm1hbDpcXG5uZXQvbWFjODAyMTEvdHguYzo0NjIwOlxcdFxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBkZXYsIDAsXFxubmV0L21hYzgwMjExL3R4LmMtNDYyMS1cXHRcXHRcXHRcXHRcXHQgICAgIElFRUU4MDIxMV9UWF9DVFJMX01MT19MSU5LX1VOU1BFQyxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTQ2ODc9c3RhdGljIHZvaWQgaWVlZTgwMjExXzgwMjNfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ3MTQtXFx0XFx0XFx0LyogZmFsbCBiYWNrIHRvIG5vbi1vZmZsb2FkIHNsb3cgcGF0aCAqL1xcbm5ldC9tYWM4MDIxMS90eC5jOjQ3MTU6XFx0XFx0XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdChza2IsIGRldiwgMCxcXG5uZXQvbWFjODAyMTEvdHguYy00NzE2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfTUxPX0xJTktfVU5TUEVDLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NDc3MD1zdGF0aWMgYm9vbCBpZWVlODAyMTFfY2hlY2tfbWNhc3Rfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ3ODktXFxubmV0L21hYzgwMjExL3R4LmM6NDc5MDpzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbWFjODAyMTEvdHguYy00NzkxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy00ODM5LXNraXBfb2ZmbG9hZDpcXG5uZXQvbWFjODAyMTEvdHguYzo0ODQwOlxcdGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgZGV2KTtcXG5uZXQvbWFjODAyMTEvdHguYy00ODQxLW91dDpcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ4NDQtXFxubmV0L21hYzgwMjExL3R4LmM6NDg0NTpuZXRkZXZfdHhfdCBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L21hYzgwMjExL3R4LmMtNDg0Ni1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTQ4NjItXFx0XFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZxdWV1ZSkpKVxcbm5ldC9tYWM4MDIxMS90eC5jOjQ4NjM6XFx0XFx0XFx0X19pZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzKHNrYiwgZGV2KTtcXG5uZXQvbWFjODAyMTEvdHguYy00ODY0LVxcdH0gZWxzZSB7XFxubmV0L21hYzgwMjExL3R4LmM6NDg2NTpcXHRcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjMoc2tiLCBkZXYpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTQ4NjYtXFx0fVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9NjUwMz1pbnQgaWVlZTgwMjExX3R4X2NvbnRyb2xfcG9ydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNjYxMC1cXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxubmV0L21hYzgwMjExL3R4LmM6NjYxMTpcXHRfX2llZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHNrYiwgc2tiLVxcdTAwM2VkZXYsIGZsYWdzLCBjdHJsX2ZsYWdzLCBjb29raWUpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTY2MTItXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz02NjE3PWludCBpZWVlODAyMTFfcHJvYmVfbWVzaF9saW5rKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy02NjM4LVxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG5uZXQvbWFjODAyMTEvdHguYzo2NjM5OlxcdF9faWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc2tiLCBza2ItXFx1MDAzZWRldiwgMCxcXG5uZXQvbWFjODAyMTEvdHguYy02NjQwLVxcdFxcdFxcdFxcdCAgICAgSUVFRTgwMjExX1RYX0NUUkxfU0tJUF9NUEFUSF9MT09LVVAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjI3LjQ2OTQ3MzMyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODMyMjk1MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyA4MDIuMTEgVFggUGF0aCBTeW1ib2xzIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoZSA4MDIuMTEgdHJhbnNtaXQgcGF0aC4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6IGBpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsYCwgYGludm9rZV90eF9oYW5kbGVyc19sYXRlYCwgYGllZWU4MDIxMV84MDIzX3htaXRgLCBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRgLCBhbmQgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XzgwMjNgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFuZCBoYW5kbGVycyBJIG5lZWQgdG8gdHJhY2UuXG5cbk5vdywgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGBDT05GSUdfTUFDODAyMTFgLiBSaWdodCwgYENPTkZJR19NQUM4MDIxMWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX0NGRzgwMjExYCwgd2hpY2ggaXMgdG8gYmUgZXhwZWN0ZWQuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBub3RoaW5nIGVsc2UgaXMgcmVxdWlyZWQsIHRob3VnaCwganVzdCBpbiBjYXNlIHRoZXJlJ3Mgc29tZXRoaW5nIG5vbi1vYnZpb3VzLCBvciBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlIGtlcm5lbCB2ZXJzaW9uLiBTbyBJJ2xsIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgaW4gYm90aCBgbmV0L21hYzgwMjExL2AgYW5kIGBuZXQvd2lyZWxlc3MvYCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB2ZXJpZnkgdGhlcmUgYXJlIG5vIGhpZGRlbiByZXF1aXJlbWVudHMuIEdvb2QsIGdvb2QuIFdpdGggdGhpcyBpbml0aWFsIGZyYW1ld29yaywgSSBzaG91bGQgYmUgYWJsZSB0byBuYXZpZ2F0ZSB0aGUgY29kZSBtb3JlIGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODozNC4zMDE3NzExNTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDkyNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMVxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MzQuMzQ5ODY3NjUzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2Mjg1NTQ0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBXaXJlbGVzcyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMSB0aHJvdWdoIDMwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgdG9wLWxldmVsIGRlZmluaXRpb25zIGFuZCBwZXJoYXBzIHRoZSBtYWluIG1lbnUgZW50cmllcyBhcmUgbG9jYXRlZC4gSSdsbCBiZXQgaXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGUgd2lyZWxlc3MgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUuIEkgZXhwZWN0IHRvIGdldCBhIGZlZWwgZm9yIGhvdyB2YXJpb3VzIHdpcmVsZXNzIHRlY2hub2xvZ2llcyBvciBmZWF0dXJlcyBhcmUgaW5pdGlhbGx5IGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGxheSBvZiB0aGUgbGFuZCwgaGVscGluZyBtZSBuYXZpZ2F0ZSB0aGUgbW9yZSBzcGVjaWZpYywgZGV0YWlsZWQgY29uZmlndXJhdGlvbnMgbGF0ZXIgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzA5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MzguOTc4NDI0NDU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0lSRUxFU1NfRVhUXFxuICAgMzpcXHRcXHRib29sXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBXRVhUX0NPUkVcXG4gICA2OlxcdFxcdGRlZl9ib29sIHlcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFfV0VYVCB8fCBXSVJFTEVTU19FWFRcXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIFdFWFRfUFJPQ1xcbiAgMTA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFdFWFRfQ09SRVxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgV0VYVF9QUklWXFxuICAxNTpcXHRcXHRib29sXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBDRkc4MDIxMVxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUElcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuICAyMDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDIyOlxcdFxcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxcbiAgMjM6XFx0XFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJ3RcXG4gIDI0OlxcdFxcdCMgKHRoaXMgaXMgaGVyZSByYXRoZXIgdGhhbiBiZWxvdyB0byBhbGxvdyBpdCB0byBiZSBhIG1vZHVsZSlcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMjU2IGlmIENGRzgwMjExX1VTRV9LRVJORUxfUkVHREJfS0VZU1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBjZmc4MDIxMSBpcyB0aGUgTGludXggd2lyZWxlc3MgTEFOICg4MDIuMTEpIGNvbmZpZ3VyYXRpb24gQVBJLlxcbiAgMjg6XFx0XFx0ICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuXFxuICAzNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6MzguOTc4NDkxOTg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MDY3NDU4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBFdmFsdWF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBjb2RlLiBMZXQgbWUgc2VlLi4uIEl0IGxvb2tzIGxpa2UgSSBuZWVkIGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGFuZCBwb3NzaWJseSBgTkw4MDIxMWAgb3IgZXZlbiBgTUFDODAyMTFfSFdTSU1gPyBXYWl0IGEgbWludXRlLCBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgIGFyZSAqdGhlKiBkaXJlY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBjb21waWxpbmcgdGhpcyBwYXJ0aWN1bGFyIGNvZGUuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBNQUM4MDIxMV9IV1NJTWAgaXMgYSByZWxldmFudCBkcml2ZXIgb3B0aW9uLCBvciBpZiBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgIGFsb25lIGFyZSBnb29kIGVub3VnaC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZywgYWggeWVzLCBgQ09ORklHX01BQzgwMjExYCAqZGVwZW5kcyogb24gYENPTkZJR19DRkc4MDIxMWAuIFJpZ2h0LCBzbyBgTUFDODAyMTFgIGFuZCBgQ0ZHODAyMTFgIGl0IGlzLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgaW1wb3J0YW50IGluIG15IGFzc2Vzc21lbnQuIExldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrOlxuXG4xLiAgSXMgdGhpcyBwYXRjaCBldmVuIG1vZGlmeWluZyByZWFjaGFibGUgY29kZT8gWXVwLCBpdCdzIG1lc3Npbmcgd2l0aCB0aGUgdHJhbnNtaXQgcGF0aCBpbiBgbWFjODAyMTFgLCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgb2ZmLWNoYW5uZWwgZnJhbWUgZmlsdGVyaW5nIGR1cmluZyBzY2FubmluZy4gVGhhdCdzIGRlZmluaXRlbHkgcmVsZXZhbnQuXG4yLiAgSXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IFllYWgsIGFic29sdXRlbHkuIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG4zLiAgUmlnaHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBNQUM4MDIxMWAgYW5kIGBDRkc4MDIxMWAuIEp1c3QgdG8gY29uZmlybS5cbjQuICBBbmQgZmluYWxseSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZTpcbiAgICAqICAgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgXG4gICAgKiAgIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZWBcbiAgICAqICAgYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jYFxuICAgICogICBgaWVlZTgwMjExXzgwMjNfeG1pdGBcbiAgICAqICAgYGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0YFxuICAgICogICBgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyM2BcblxuT2theSwgdGhhdCBzZWVtcyBsaWtlIGEgY29tcHJlaGVuc2l2ZSBsaXN0LiBJJ20gY29uZmlkZW50IHdpdGggdGhpcywgc28gbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM5NywiT3V0cHV0VG9rZW5zIjoyODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODo0My42ODUyNDAwNzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjcyOTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbFwiLFxuICAgIFwiaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVcIixcbiAgICBcImllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jXCIsXG4gICAgXCJpZWVlODAyMTFfODAyM194bWl0XCIsXG4gICAgXCJpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdFwiLFxuICAgIFwiaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXRfODAyM1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbWFjODAyMTEgVFggcGF0aCBieSBjb25zb2xpZGF0aW5nIG9mZi1jaGFubmVsIGZyYW1lIGRyb3BwaW5nIGR1cmluZyBzb2Z0d2FyZSBzY2FubmluZyBpbnRvIGEgZGVkaWNhdGVkIGxhdGUgVFggaGFuZGxlciAoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCkgaW52b2tlZCB2aWEgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoKSwgd2hpbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGNoZWNrcyBmcm9tIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKCkgYW5kIGllZWU4MDIxMV84MDIzX3htaXQoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayB0cmFuc21pc3Npb24gbG9naWMgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgd2lyZWxlc3MgaW50ZXJmYWNlcyAoc3VjaCBhcyBtYWM4MDIxMV9od3NpbSksIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsXCIsXG4gICAgXCJpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZVwiLFxuICAgIFwiaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2NcIixcbiAgICBcImllZWU4MDIxMV84MDIzX3htaXRcIixcbiAgICBcImllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0XCIsXG4gICAgXCJpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdF84MDIzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBtYWM4MDIxMSBUWCBwYXRoIGJ5IGNvbnNvbGlkYXRpbmcgb2ZmLWNoYW5uZWwgZnJhbWUgZHJvcHBpbmcgZHVyaW5nIHNvZnR3YXJlIHNjYW5uaW5nIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIHZpYSBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpLCB3aGlsZSByZW1vdmluZyByZWR1bmRhbnQgY2hlY2tzIGZyb20gaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MoKSBhbmQgaWVlZTgwMjExXzgwMjNfeG1pdCgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWlzc2lvbiBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCB3aXJlbGVzcyBpbnRlcmZhY2VzIChzdWNoIGFzIG1hYzgwMjExX2h3c2ltKSwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODo0My43NjE5NzQ4MDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDY0MjA4MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6NDMuNzYyNDYwNDQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTgwNjM3MTc4NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBvZmYtY2hhbm5lbCBmcmFtZSBmaWx0ZXJpbmcgaW4gbWFjODAyMTEgYnkgbW92aW5nIHRoZSBzb2Z0d2FyZSBzY2FubmluZyBvZmYtY2hhbm5lbCBkcm9wIGNoZWNrIGZyb20gZWFybHkgVFggaGFuZGxpbmcgKGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jIGFuZCBpZWVlODAyMTFfODAyM194bWl0KSBpbnRvIGEgZGVkaWNhdGVkIGxhdGUgVFggaGFuZGxlciAoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCkgaW52b2tlZCBpbiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHBhY2tldCBkcm9wIGRlY2lzaW9ucyBkdXJpbmcgVFggcHJvY2Vzc2luZyBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgc2tiIGhlYWRlcnMgYW5kIHN0YXRlIGJpdG1hcHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIG9yIGJ1ZmZlciBib3VuZGFyeSBjYWxjdWxhdGlvbnMuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjb3ZlciBhbnkgcGFja2V0IGhhbmRsaW5nIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YjdjZDViY2M0ODJkZWI4MDJiODkyMjdmYzg0MGZhOWI2OTgxYjAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDo0Nzo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IDkxYjE0MTEyZTI0ZjAuLjA4YTM5MjcyZjI2YTAgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC0yNjksNyArMjY5LDYgQEAgaWVlZTgwMjExX3R4X2hfZHluYW1pY19wcyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lXG4gaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbiB7XG4tXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LVx1MDAzZXNrYik7XG4gXHRib29sIGFzc29jID0gZmFsc2U7XG5AQCAtMjc3LDIwICsyNzYsNiBAQCBpZWVlODAyMTFfdHhfaF9jaGVja19hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIFx0aWYgKHVubGlrZWx5KGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKVxuIFx0XHRyZXR1cm4gVFhfQ09OVElOVUU7XG4gXG4tXHRpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgXHUwMDI2dHgtXHUwMDNlbG9jYWwtXHUwMDNlc2Nhbm5pbmcpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB0ZXN0X2JpdChTREFUQV9TVEFURV9PRkZDSEFOTkVMLCBcdTAwMjZ0eC1cdTAwM2VzZGF0YS1cdTAwM2VzdGF0ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFpZWVlODAyMTFfaXNfYW55X251bGxmdW5jKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSlcbi1cdFx0Lypcbi1cdFx0ICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5XG4tXHRcdCAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZVxuLVx0XHQgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZVxuLVx0XHQgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG9cbi1cdFx0ICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW1cbi1cdFx0ICogb2ZmLWNoYW5uZWwuIFNlZSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKCkgZm9yIG1vcmUuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gVFhfRFJPUDtcbi1cbiBcdGlmICh0eC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9PQ0IpXG4gXHRcdHJldHVybiBUWF9DT05USU5VRTtcbiBcbkBAIC04MDUsNiArNzkwLDMzIEBAIGllZWU4MDIxMV90eF9oX3JhdGVfY3RybChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxuIFx0cmV0dXJuIFRYX0NPTlRJTlVFO1xuIH1cbiBcbitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZVxuK2llZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcbit7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHgtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LVx1MDAzZXNrYik7XG4rXG4rXHRpZiAodW5saWtlbHkoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpXG4rXHRcdHJldHVybiBUWF9DT05USU5VRTtcbitcbitcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCBcdTAwMjZ0eC1cdTAwM2Vsb2NhbC1cdTAwM2VzY2FubmluZykpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsIFx1MDAyNnR4LVx1MDAzZXNkYXRhLVx1MDAzZXN0YXRlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWllZWU4MDIxMV9pc19hbnlfbnVsbGZ1bmMoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFdoZW4gc29mdHdhcmUgc2Nhbm5pbmcgb25seSBudWxsZnVuYyBmcmFtZXMgKHRvIG5vdGlmeVxuK1x0XHQgKiB0aGUgc2xlZXAgc3RhdGUgdG8gdGhlIEFQKSBhbmQgcHJvYmUgcmVxdWVzdHMgKGZvciB0aGVcbitcdFx0ICogYWN0aXZlIHNjYW4pIGFyZSBhbGxvd2VkLCBhbGwgb3RoZXIgZnJhbWVzIHNob3VsZCBub3QgYmVcbitcdFx0ICogc2VudCBhbmQgd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvXG4rXHRcdCAqIG5vbmV0aGVsZXNzLCBkcm9wIHRoZW0gdG8gYXZvaWQgc2VuZGluZyB0aGVtXG4rXHRcdCAqIG9mZi1jaGFubmVsLiBTZWUgX19pZWVlODAyMTFfc3RhcnRfc2NhbigpIGZvciBtb3JlLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIFRYX0RST1A7XG4rXHR9XG4rXG4rXHRyZXR1cm4gVFhfQ09OVElOVUU7XG4rfVxuK1xuIHN0YXRpYyBfX2xlMTYgaWVlZTgwMjExX3R4X25leHRfc2VxKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkKVxuIHtcbiBcdHUxNiAqc2VxID0gXHUwMDI2c3RhLVx1MDAzZXRpZF9zZXFbdGlkXTtcbkBAIC0xODY0LDYgKzE4NzYsNyBAQCBzdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVyc19sYXRlKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXG4gXHRcdGdvdG8gdHhoX2RvbmU7XG4gXHR9XG4gXG4rXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKTtcbiBcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX21pY2hhZWxfbWljX2FkZCk7XG4gXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZSk7XG4gXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9mcmFnbWVudCk7XG5AQCAtNDY4NiwxMCArNDY5OSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRxdWV1ZSA9IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc2RhdGEsIHN0YSwgc2tiKTtcbiBcdHNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlKTtcbiBcbi1cdGlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCBcdTAwMjZsb2NhbC1cdTAwM2VzY2FubmluZykpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHRlc3RfYml0KFNEQVRBX1NUQVRFX09GRkNIQU5ORUwsIFx1MDAyNnNkYXRhLVx1MDAzZXN0YXRlKSlcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cbiBcdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHVubGlrZWx5KCFza2IpKVxuIFx0XHRyZXR1cm47XG5AQCAtNDc1NiwxMSArNDc2NSw2IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV84MDIzX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBsZW4pO1xuIFxuIFx0aWVlZTgwMjExX3R4XzgwMjMoc2RhdGEsIHNrYiwgc3RhLCBmYWxzZSk7XG4tXG4tXHRyZXR1cm47XG4tXG4tb3V0X2ZyZWU6XG4tXHRrZnJlZV9za2Ioc2tiKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaWVlZTgwMjExX2NoZWNrX21jYXN0X29mZmxvYWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODo0My43NjI0NjEzMDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU1MjA4NTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gYSBXaXJlbGVzcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIGNoYW5nZXMgdG91Y2hpbmcgbmV0d29ya2luZyBjb2RlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGNvbXBsZXggcGFja2V0IHByb2Nlc3NpbmcuXG5cbkZpcnN0LCBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYG5ldC9tYWM4MDIxMS90eC5jYC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBvZmYtY2hhbm5lbCBzY2FubmluZyB3aXRoaW4gdGhlIHRyYW5zbWlzc2lvbiBwYXRoLiBTcGVjaWZpY2FsbHk6XG5cbjEuICBUaGUgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgY2hlY2sgaW4gYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jYCBoYXMgYmVlbiAqcmVtb3ZlZCouIFRoaXMgaXMgY29uY2VybmluZywgYmVjYXVzZSBpdCdzIGJlZW4gbW92ZWQuIEFueXRpbWUgYSBjaGVjayBpcyByZW1vdmVkLCBJIG5lZWQgdG8ga25vdyB3aHkuIEFyZSB3ZSBsb3NpbmcgYSBjaGVjaz8gSXMgdGhlIGZ1bmN0aW9uYWxpdHkgc3RpbGwgcHJlc2VudD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UuXG4yLiAgQSBuZXcgaGFuZGxlciwgYGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWxgLCBoYXMgYmVlbiAqY3JlYXRlZCogYW5kIGlzIGJlaW5nIGNhbGxlZCBsYXRlciBpbiB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgdmlhIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQncyBhIHJlZmFjdG9yaW5nLCBidXQgYSByZWZhY3RvcmluZyB0aGF0ICpjb3VsZCogaW50cm9kdWNlIHN1YnRsZSB0aW1pbmcgZGlmZmVyZW5jZXMgb3IgY29kZSBwYXRoIGNoYW5nZXMuXG4zLiAgVGhlIGVhcmx5IGNoZWNrIGluIGBpZWVlODAyMTFfODAyM194bWl0YCByZWdhcmRpbmcgb2ZmLWNoYW5uZWwgc2Nhbm5pbmcgaGFzIGFsc28gYmVlbiAqcmVtb3ZlZCouIFRoaXMgbWlycm9ycyB0aGUgY2hhbmdlIGluIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgc28gaXQncyBhIHJlbGF0ZWQgY29kZSBwYXRoLlxuXG5TbywgaXQgbG9va3MgbGlrZSB0aGUgZ3VhcmQgaXMgc3RpbGwgaW4gcGxhY2UsIGl0IGhhcyBiZWVuIG1vdmVkIHRvIGEgbGF0ZSBzdGFnZSBoYW5kbGVyLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGRvbmUgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBpcyBzdGlsbCBndWFyZGluZyB0aGUgY29kZSBwYXRocyBhcHByb3ByaWF0ZWx5LlxuXG5Ob3csIEkgbmVlZCB0byBrbm93IHRoZSAqd2h5Ki4gV2FzIHRoaXMgcHVyZWx5IGZvciBjb2RlIGNsYXJpdHk/IFBlcmZvcm1hbmNlPyBPciBpcyB0aGVyZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGx1cmtpbmcgaGVyZT8gSSdtIGdvaW5nIHRvIGxldmVyYWdlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBzZWFyY2ggZm9yIG1vcmUgY29udGV4dCBvbiB0aGVzZSBjaGFuZ2VzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGV4cGxhbmF0aW9ucyBmb3IgdGhlIG9yaWdpbmFsIGRlY2lzaW9uIHRvIG1vdmUgdGhlIGZ1bmN0aW9uLiBJJ2xsIGxvb2sgZm9yIGJ1ZyByZXBvcnRzLCBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnMsIGNvbW1pdCBtZXNzYWdlcywgYW5kIHJlbGF0ZWQgY29kZSBjaGFuZ2VzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gdGVsbCBpZiB0aGVzZSBjaGFuZ2VzIGFyZSBzb3VuZCwgYW5kIGlmIHRoZXkgbWF5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjUxLjMxNDU1MDg5OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NDA1MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW52b2tlX3R4X2hhbmRsZXJzX2xhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvdHguYz0xODI4PXN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2Vhcmx5KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0xODY0LSAqL1xcbm5ldC9tYWM4MDIxMS90eC5jOjE4NjU6c3RhdGljIGludCBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbm5ldC9tYWM4MDIxMS90eC5jLTE4NjYte1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MTkwNj1zdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMTkxMS1cXHRcXHRyZXR1cm4gcjtcXG5uZXQvbWFjODAyMTEvdHguYzoxOTEyOlxcdHJldHVybiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSh0eCk7XFxubmV0L21hYzgwMjExL3R4LmMtMTkxMy19XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0xOTU4PXN0YXRpYyBib29sIGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTE5OTUtXFxubmV0L21hYzgwMjExL3R4LmM6MTk5NjpcXHRpZiAoIWludm9rZV90eF9oYW5kbGVyc19sYXRlKFxcdTAwMjZ0eCkpXFxubmV0L21hYzgwMjExL3R4LmMtMTk5Ny1cXHRcXHRyZXN1bHQgPSBfX2llZWU4MDIxMV90eChsb2NhbCwgXFx1MDAyNnR4LnNrYnMsIHR4LnN0YSwgdHhwZW5kaW5nKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jPTM4ODg9c3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV90eF9kZXF1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtNDAxNS1cXHR9IGVsc2Uge1xcbm5ldC9tYWM4MDIxMS90eC5jOjQwMTY6XFx0XFx0aWYgKGludm9rZV90eF9oYW5kbGVyc19sYXRlKFxcdTAwMjZ0eCkpXFxubmV0L21hYzgwMjExL3R4LmMtNDAxNy1cXHRcXHRcXHRnb3RvIGJlZ2luO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0ODo1MS4zNTk5OTY5NzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzczOTEzNjA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYHR4LmNgOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHR4LmNgJ3MgQ29yZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGB0eC5jYCBiZXR3ZWVuIGxpbmVzIDE4NTAgYW5kIDE5MjAuIFRoYXQncyBhIGRlY2VudCBjaHVuayBvZiBjb2RlLCBsaWtlbHkgaGFuZGxpbmcgYSBjcnVjaWFsIGFzcGVjdCBvZiB0aGUgdHJhbnNhY3Rpb24gcHJvY2Vzc2luZyBwaXBlbGluZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFdoYXQgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgY2FsbGVkIGp1c3QgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHNlY3Rpb24/IEknbGwgcHJvYmFibHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGB0eC5jYCB0byBwcm9wZXJseSBvcmllbnQgbXlzZWxmLiBJcyB0aGlzIHJlbGF0ZWQgdG8gdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiwgc2lnbmluZywgYnJvYWRjYXN0aW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cblxuTXkgZmlyc3QgcGFzcyB3aWxsIGJlIHRvIGlkZW50aWZ5IGFueSBtYWpvciBjb250cm9sIGZsb3cgc3RhdGVtZW50cyBsaWtlIGBpZmAsIGBmb3JgLCBvciBgc3dpdGNoYCBzdGF0ZW1lbnRzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSBsb2dpYyBmbG93LiBOZXh0LCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGF0IHJhbmdlLiBBcmUgdGhlcmUgYW55IGNhbGxzIHRvIG90aGVyIG1vZHVsZXMgb3IgY3VzdG9tLWRlZmluZWQgZnVuY3Rpb25zPyBUaG9zZSBhcmUgbGlrZWx5IHdoZXJlIHRoZSBoZWF2eSBsaWZ0aW5nLCBvciBhbnkgc3BlY2lhbGl6ZWQgbG9naWMsIGlzIGhhcHBlbmluZy4gQXJlIHRoZXJlIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBleHRlcm5hbCBzeXN0ZW1zPyBBcmUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgcmFuZ2UgdGhhdCBJIG5lZWQgdG8gYmUgZmFtaWxpYXIgd2l0aD8gVW5kZXJzdGFuZGluZyBob3cgdGhlIGRhdGEgZmxvd3MgaW4gYW5kIG91dCBvZiB0aG9zZSBmdW5jdGlvbnMgd2lsbCBiZSBlc3NlbnRpYWwuIEFueSByZXNvdXJjZSBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiBqdW1wcyBvdXQgYXMgYW4gaW1tZWRpYXRlIHBvdGVudGlhbCBpc3N1ZSB0aGF0IG5lZWRzIHRvIGJlIHNjcnV0aW5pemVkLlxuXG5JIGFudGljaXBhdGUgc2VlaW5nIGEgbG90IG9mIGJpdHdpc2Ugb3BlcmF0aW9ucywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gaGFzaGluZywgc2VyaWFsaXphdGlvbiwgb3IgY29uc2Vuc3VzIG1lY2hhbmlzbXMuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBhbnkgbGlicmFyaWVzIG9yIGV4dGVybmFsIGRlcGVuZGVuY2llcyB1c2VkLiBGaW5hbGx5LCBJJ2xsIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaGlzIHNlY3Rpb24gc2VlbXMgcG90ZW50aWFsbHkgaW52b2x2ZWQgd2l0aCB0cmFuc2FjdGlvbnMsIHNvIEknbGwgYmUgYWxlcnQgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaW1wYWN0IHRocm91Z2hwdXQsIGxhdGVuY3ksIG9yIHNlY3VyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDE2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDg6NTUuMDk5MTM2MDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS90eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NTA6XFx0XFx0XFx0ZWxzZVxcbjE4NTE6XFx0XFx0XFx0XFx0aWVlZTgwMjExX3B1cmdlX3R4X3F1ZXVlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LCBcXHUwMDI2dHgtXFx1MDAzZXNrYnMpO1xcbjE4NTI6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjE4NTM6XFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShyZXMgPT0gVFhfUVVFVUVEKSkge1xcbjE4NTQ6XFx0XFx0XFx0STgwMl9ERUJVR19JTkModHgtXFx1MDAzZWxvY2FsLVxcdTAwM2V0eF9oYW5kbGVyc19xdWV1ZWQpO1xcbjE4NTU6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjE4NTY6XFx0XFx0fVxcbjE4NTc6XFx0XFxuMTg1ODpcXHRcXHRyZXR1cm4gMDtcXG4xODU5OlxcdH1cXG4xODYwOlxcdFxcbjE4NjE6XFx0LypcXG4xODYyOlxcdCAqIExhdGUgaGFuZGxlcnMgY2FuIGJlIGNhbGxlZCB3aGlsZSB0aGUgc3RhIGxvY2sgaXMgaGVsZC4gSGFuZGxlcnMgdGhhdCBjYW5cXG4xODYzOlxcdCAqIGNhdXNlIHBhY2tldHMgdG8gYmUgZ2VuZXJhdGVkIHdpbGwgY2F1c2UgZGVhZGxvY2shXFxuMTg2NDpcXHQgKi9cXG4xODY1OlxcdHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzX2xhdGUoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eClcXG4xODY2OlxcdHtcXG4xODY3OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtXFx1MDAzZXNrYik7XFxuMTg2ODpcXHRcXHRpZWVlODAyMTFfdHhfcmVzdWx0IHJlcyA9IFRYX0NPTlRJTlVFO1xcbjE4Njk6XFx0XFxuMTg3MDpcXHRcXHRpZiAoIWllZWU4MDIxMV9od19jaGVjayhcXHUwMDI2dHgtXFx1MDAzZWxvY2FsLVxcdTAwM2VodywgSEFTX1JBVEVfQ09OVFJPTCkpXFxuMTg3MTpcXHRcXHRcXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9yYXRlX2N0cmwpO1xcbjE4NzI6XFx0XFxuMTg3MzpcXHRcXHRpZiAodW5saWtlbHkoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfSU5URkxfUkVUUkFOU01JU1NJT04pKSB7XFxuMTg3NDpcXHRcXHRcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZ0eC1cXHUwMDNlc2ticywgdHgtXFx1MDAzZXNrYik7XFxuMTg3NTpcXHRcXHRcXHR0eC1cXHUwMDNlc2tiID0gTlVMTDtcXG4xODc2OlxcdFxcdFxcdGdvdG8gdHhoX2RvbmU7XFxuMTg3NzpcXHRcXHR9XFxuMTg3ODpcXHRcXG4xODc5OlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2NoZWNrX29mZmNoYW5uZWwpO1xcbjE4ODA6XFx0XFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfbWljaGFlbF9taWNfYWRkKTtcXG4xODgxOlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX3NlcXVlbmNlKTtcXG4xODgyOlxcdFxcdENBTExfVFhIKGllZWU4MDIxMV90eF9oX2ZyYWdtZW50KTtcXG4xODgzOlxcdFxcdC8qIGhhbmRsZXJzIGFmdGVyIGZyYWdtZW50IG11c3QgYmUgYXdhcmUgb2YgdHggaW5mbyBmcmFnbWVudGF0aW9uISAqL1xcbjE4ODQ6XFx0XFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc3RhdHMpO1xcbjE4ODU6XFx0XFx0Q0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZW5jcnlwdCk7XFxuMTg4NjpcXHRcXHRpZiAoIWllZWU4MDIxMV9od19jaGVjayhcXHUwMDI2dHgtXFx1MDAzZWxvY2FsLVxcdTAwM2VodywgSEFTX1JBVEVfQ09OVFJPTCkpXFxuMTg4NzpcXHRcXHRcXHRDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jYWxjdWxhdGVfZHVyYXRpb24pO1xcbjE4ODg6XFx0I3VuZGVmIENBTExfVFhIXFxuMTg4OTpcXHRcXG4xODkwOlxcdCB0eGhfZG9uZTpcXG4xODkxOlxcdFxcdGlmICh1bmxpa2VseShyZXMgPT0gVFhfRFJPUCkpIHtcXG4xODkyOlxcdFxcdFxcdHR4LVxcdTAwM2VzZGF0YS1cXHUwMDNldHhfaGFuZGxlcnNfZHJvcCsrO1xcbjE4OTM6XFx0XFx0XFx0aWYgKHR4LVxcdTAwM2Vza2IpXFxuMTg5NDpcXHRcXHRcXHRcXHRpZWVlODAyMTFfZnJlZV90eHNrYihcXHUwMDI2dHgtXFx1MDAzZWxvY2FsLVxcdTAwM2VodywgdHgtXFx1MDAzZXNrYik7XFxuMTg5NTpcXHRcXHRcXHRlbHNlXFxuMTg5NjpcXHRcXHRcXHRcXHRpZWVlODAyMTFfcHVyZ2VfdHhfcXVldWUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcsIFxcdTAwMjZ0eC1cXHUwMDNlc2ticyk7XFxuMTg5NzpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTg5ODpcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KHJlcyA9PSBUWF9RVUVVRUQpKSB7XFxuMTg5OTpcXHRcXHRcXHRJODAyX0RFQlVHX0lOQyh0eC1cXHUwMDNlbG9jYWwtXFx1MDAzZXR4X2hhbmRsZXJzX3F1ZXVlZCk7XFxuMTkwMDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTkwMTpcXHRcXHR9XFxuMTkwMjpcXHRcXG4xOTAzOlxcdFxcdHJldHVybiAwO1xcbjE5MDQ6XFx0fVxcbjE5MDU6XFx0XFxuMTkwNjpcXHRzdGF0aWMgaW50IGludm9rZV90eF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KVxcbjE5MDc6XFx0e1xcbjE5MDg6XFx0XFx0aW50IHIgPSBpbnZva2VfdHhfaGFuZGxlcnNfZWFybHkodHgpO1xcbjE5MDk6XFx0XFxuMTkxMDpcXHRcXHRpZiAocilcXG4xOTExOlxcdFxcdFxcdHJldHVybiByO1xcbjE5MTI6XFx0XFx0cmV0dXJuIGludm9rZV90eF9oYW5kbGVyc19sYXRlKHR4KTtcXG4xOTEzOlxcdH1cXG4xOTE0OlxcdFxcbjE5MTU6XFx0Ym9vbCBpZWVlODAyMTFfdHhfcHJlcGFyZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuMTkxNjpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE5MTc6XFx0XFx0XFx0XFx0ICAgICAgaW50IGJhbmQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICoqc3RhKVxcbjE5MTg6XFx0e1xcbjE5MTk6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB2aWZfdG9fc2RhdGEodmlmKTtcXG4xOTIwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG4xOTIxOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB0eDtcXG4xOTIyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IyO1xcbjE5MjM6XFx0XFxuMTkyNDpcXHRcXHRpZiAoaWVlZTgwMjExX3R4X3ByZXBhcmUoc2RhdGEsIFxcdTAwMjZ0eCwgTlVMTCwgc2tiKSA9PSBUWF9EUk9QKSB7XFxuMTkyNTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xOTI2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xOTI3OlxcdFxcdH1cXG4xOTI4OlxcdFxcbjE5Mjk6XFx0XFx0aW5mby1cXHUwMDNlYmFuZCA9IGJhbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ4OjU1LjEwMDA2MjM5MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzI2MDkxODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBvdGVudGlhbCBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoIGFuZCB3aGV0aGVyIGl0IGludHJvZHVjZXMgYW55IHJpc2tzIHRoYXQgS01TQU4gd291bGQgbmVlZCB0byBmbGFnLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2UncmUgbW92aW5nIHRoZSBvZmYtY2hhbm5lbCBjaGVjayBmb3IgVFggcGFja2V0cyB3aXRoaW4gbWFjODAyMTEsIHNwZWNpZmljYWxseSBmcm9tIHRoZSBlYXJseSB0cmFuc21pdCBoYW5kbGVycyAoYGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jYCBjYWxsZWQgaW4gYGludm9rZV90eF9oYW5kbGVyc19lYXJseWApIGFuZCB0aGUgODAyLjMgdHJhbnNtaXQgcGF0aCAoYGllZWU4MDIxMV84MDIzX3htaXRgKSB0byB0aGUgKmxhdGUqIHRyYW5zbWl0IGhhbmRsZXIgcGlwZWxpbmUsIHNwZWNpZmljYWxseSBgaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbGAgd2l0aGluIGBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZWAuXG5cbk15IGZpcnN0IGltbWVkaWF0ZSBxdWVzdGlvbjogZG9lcyB0aGlzIGludm9sdmUgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHRoYXQgY291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBHb2luZyB0aHJvdWdoIHRoZSB1c3VhbCBjaGVja2xpc3Q6XG5cbjEuICAqKlVzZXItU3BhY2UgSW50ZXJhY3Rpb246KiogTm8sIHRoaXMgcGF0Y2ggZG9lc24ndCBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UgdmlhIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgc29ja2V0cywgb3IgQlBGIGJ1ZmZlcnMuIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBiZWluZyBleHBvc2VkLlxuMi4gICoqQ29uZGl0aW9uYWwgTG9naWM6KiogTm8uIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gSXQncyByZWFkaW5nIGV4aXN0aW5nIHN0cnVjdCBmaWVsZHMgbGlrZSBgdHgtXHUwMDNlbG9jYWwtXHUwMDNlc2Nhbm5pbmdgLCBgdHgtXHUwMDNlc2RhdGEtXHUwMDNlc3RhdGVgLCBgaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2xgLCBhbmQgYGluZm8tXHUwMDNlZmxhZ3NgIC0gYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsaXplZC5cbjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqICBJIHNlZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBpbml0aWFsaXphdGlvbnMgd2hlcmUgYW4gdW5pbml0aWFsaXplZCBmaWVsZCBtaWdodCBjYXVzZSBpc3N1ZXMgbGF0ZXIuXG40LiAgKipCb3VuZHMgQ2hlY2tzL0xlbmd0aCBDaGFuZ2VzOioqIE5vIG1vZGlmaWNhdGlvbnMgdGhhdCB3b3VsZCBhbGxvdyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcy5cblxuU28sIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGVyZSdzIG5vIGluaGVyZW50IHJpc2sgb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFRoaXMgaXMgcHVyZWx5IGEgcmVmYWN0b3Jpbmcgb2YgKndoZW4qIHRoZSBvZmYtY2hhbm5lbCBjaGVjayBoYXBwZW5zLCBub3QgKmhvdyogdGhlIGRhdGEgaXMgaGFuZGxlZC4gTXkgdW5kZXJzdGFuZGluZyBvZiBLTVNBTiBpcyB0aGF0IGl0J3MgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLiBLQVNBTi9vdGhlciBzYW5pdGl6ZXJzIGNvdmVyIG1lbW9yeSBjb3JydXB0aW9uLCBVQUYsIE9PQiwgZXRjLiwgd2hpY2ggdGhpcyBpc24ndCB0b3VjaGluZy4gVGhpcyBwYXRjaCBkZWFscyB3aXRoIG1vdmluZyB0aGUgZmlsdGVyLiBJdCBvcGVyYXRlcyBvbiAqZnVsbHkgaW5pdGlhbGl6ZWQqIFNLQiBjb250cm9sIGJ1ZmZlcnMgYW5kIGhlYWRlcnMuXG5cblRoZXJlZm9yZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yIG9mIHRoZSBvZmYtY2hhbm5lbCBzY2FubmluZyBjaGVjayBpbiBtYWM4MDIxMSwgbW92aW5nIHRoZSBsb2NhdGlvbiBidXQgbm90IGFsdGVyaW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBvciBpbnRyb2R1Y2luZyBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3b3VsZCB0cmlnZ2VyIEtNU0FOLiBLQVNBTi9vdGhlciBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODk3LCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjAxLjgyNjE1NzQ3OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIG9mZi1jaGFubmVsIGZyYW1lIGZpbHRlcmluZyBpbiBtYWM4MDIxMSBieSBtb3ZpbmcgdGhlIHNvZnR3YXJlIHNjYW5uaW5nIG9mZi1jaGFubmVsIGRyb3AgY2hlY2sgZnJvbSBlYXJseSBUWCBoYW5kbGluZyAoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MgYW5kIGllZWU4MDIxMV84MDIzX3htaXQpIGludG8gYSBkZWRpY2F0ZWQgbGF0ZSBUWCBoYW5kbGVyIChpZWVlODAyMTFfdHhfaF9jaGVja19vZmZjaGFubmVsKSBpbnZva2VkIGluIGludm9rZV90eF9oYW5kbGVyc19sYXRlKCkuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIGNvbnRyb2wgZmxvdyBhbmQgcGFja2V0IGRyb3AgZGVjaXNpb25zIGR1cmluZyBUWCBwcm9jZXNzaW5nIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBza2IgaGVhZGVycyBhbmQgc3RhdGUgYml0bWFwcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3IgYnVmZmVyIGJvdW5kYXJ5IGNhbGN1bGF0aW9ucy4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIGFueSBwYWNrZXQgaGFuZGxpbmcgb3IgbGlmZWN5Y2xlIGlzc3VlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBvZmYtY2hhbm5lbCBmcmFtZSBmaWx0ZXJpbmcgaW4gbWFjODAyMTEgYnkgbW92aW5nIHRoZSBzb2Z0d2FyZSBzY2FubmluZyBvZmYtY2hhbm5lbCBkcm9wIGNoZWNrIGZyb20gZWFybHkgVFggaGFuZGxpbmcgKGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jIGFuZCBpZWVlODAyMTFfODAyM194bWl0KSBpbnRvIGEgZGVkaWNhdGVkIGxhdGUgVFggaGFuZGxlciAoaWVlZTgwMjExX3R4X2hfY2hlY2tfb2ZmY2hhbm5lbCkgaW52b2tlZCBpbiBpbnZva2VfdHhfaGFuZGxlcnNfbGF0ZSgpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBjb250cm9sIGZsb3cgYW5kIHBhY2tldCBkcm9wIGRlY2lzaW9ucyBkdXJpbmcgVFggcHJvY2Vzc2luZyBvbiBleGlzdGluZywgaW5pdGlhbGl6ZWQgc2tiIGhlYWRlcnMgYW5kIHN0YXRlIGJpdG1hcHMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIG9yIGJ1ZmZlciBib3VuZGFyeSBjYWxjdWxhdGlvbnMuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCB0byBjb3ZlciBhbnkgcGFja2V0IGhhbmRsaW5nIG9yIGxpZmVjeWNsZSBpc3N1ZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowg2xfv[1] Phase: Succeeded StartedAt: 2026-09-07 14:49:13 +0000 UTC FinishedAt: 2026-09-07 14:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 14:49:13 +0000 UTC FinishedAt: 2026-09-07 14:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2] Phase: Succeeded StartedAt: 2026-09-07 14:49:13 +0000 UTC FinishedAt: 2026-09-07 18:39:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 14:49:13 +0000 UTC FinishedAt: 2026-09-07 18:39:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 14:49:13 +0000 UTC FinishedAt: 2026-09-07 14:49:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 14:49:13 +0000 UTC FinishedAt: 2026-09-07 14:49:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2xfv/series-workflowg2xfv-convert-artifact-1912476985/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 14:49:23 +0000 UTC FinishedAt: 2026-09-07 15:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 14:49:23 +0000 UTC FinishedAt: 2026-09-07 15:10:36 +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:*e4fd55dc-76cc-47bb-b053-d98552a7a141,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-workflowg2xfv/series-workflowg2xfv-convert-artifact-1912476985/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": "bca1649b-e775-42ba-95b9-ce6bec5b50d2", "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-workflowg2xfv/series-workflowg2xfv-build-action-3494019671/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 14:49:23 +0000 UTC FinishedAt: 2026-09-07 15:10:14 +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:*e4fd55dc-76cc-47bb-b053-d98552a7a141,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-workflowg2xfv/series-workflowg2xfv-convert-artifact-1912476985/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": "bca1649b-e775-42ba-95b9-ce6bec5b50d2", "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-workflowg2xfv/series-workflowg2xfv-build-action-3494019671/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 15:10:36 +0000 UTC FinishedAt: 2026-09-07 15:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 15:10:36 +0000 UTC FinishedAt: 2026-09-07 15:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 15:10:36 +0000 UTC FinishedAt: 2026-09-07 15:11:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 15:10:36 +0000 UTC FinishedAt: 2026-09-07 15:10:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg2xfv/series-workflowg2xfv-convert-artifact-29721100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 15:11:02 +0000 UTC FinishedAt: 2026-09-07 15:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 15:11:02 +0000 UTC FinishedAt: 2026-09-07 15:13:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bca1649b-e775-42ba-95b9-ce6bec5b50d2,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-workflowg2xfv/series-workflowg2xfv-build-action-3494019671/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-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 15:13:11 +0000 UTC FinishedAt: 2026-09-07 15:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 15:13:11 +0000 UTC FinishedAt: 2026-09-07 15:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 15:13:11 +0000 UTC FinishedAt: 2026-09-07 15:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 15:13:11 +0000 UTC FinishedAt: 2026-09-07 15:33:23 +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:*e4fd55dc-76cc-47bb-b053-d98552a7a141,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-workflowg2xfv/series-workflowg2xfv-convert-artifact-29721100/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": "e61a8e8a-a406-4d92-8140-a042589bb8d1", "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-workflowg2xfv/series-workflowg2xfv-build-action-1471145512/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 15:13:11 +0000 UTC FinishedAt: 2026-09-07 15:33:13 +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:*e4fd55dc-76cc-47bb-b053-d98552a7a141,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-workflowg2xfv/series-workflowg2xfv-convert-artifact-29721100/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": "e61a8e8a-a406-4d92-8140-a042589bb8d1", "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-workflowg2xfv/series-workflowg2xfv-build-action-1471145512/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 15:33:23 +0000 UTC FinishedAt: 2026-09-07 15:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 15:33:23 +0000 UTC FinishedAt: 2026-09-07 15:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 15:33:23 +0000 UTC FinishedAt: 2026-09-07 15:35:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 15:33:23 +0000 UTC FinishedAt: 2026-09-07 15:35:13 +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:*e61a8e8a-a406-4d92-8140-a042589bb8d1,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-workflowg2xfv/series-workflowg2xfv-build-action-1471145512/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-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 15:35:23 +0000 UTC FinishedAt: 2026-09-07 18:39:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 15:35:23 +0000 UTC FinishedAt: 2026-09-07 18:39:15 +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":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"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:*bca1649b-e775-42ba-95b9-ce6bec5b50d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e61a8e8a-a406-4d92-8140-a042589bb8d1,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-workflowg2xfv/series-workflowg2xfv-build-action-3494019671/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-workflowg2xfv/series-workflowg2xfv-build-action-1471145512/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 15:35:23 +0000 UTC FinishedAt: 2026-09-07 15:35:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 15:35:23 +0000 UTC FinishedAt: 2026-09-07 15:35:29 +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":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"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-workflowg2xfv/series-workflowg2xfv-convert-artifact-3943581301/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 15:35:23 +0000 UTC FinishedAt: 2026-09-07 15:35:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 15:35:23 +0000 UTC FinishedAt: 2026-09-07 15:35:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 15:35:23 +0000 UTC FinishedAt: 2026-09-07 15:35:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 15:35:33 +0000 UTC FinishedAt: 2026-09-07 18:39:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2xfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_tx_h_check_offchannel","invoke_tx_handlers_late","ieee80211_tx_h_check_assoc","ieee80211_8023_xmit","ieee80211_subif_start_xmit","ieee80211_subif_start_xmit_8023"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"068e5a0bc57e57d24cbf38def29cc5fb4db9a0df","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211"],"series_id":"1826f810-fb1b-4c2b-9727-21a36ecb7b59","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 15:35:33 +0000 UTC FinishedAt: 2026-09-07 18:39:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bca1649b-e775-42ba-95b9-ce6bec5b50d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e61a8e8a-a406-4d92-8140-a042589bb8d1,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-workflowg2xfv/series-workflowg2xfv-build-action-3494019671/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-workflowg2xfv/series-workflowg2xfv-build-action-1471145512/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-workflowg2xfv/series-workflowg2xfv-convert-artifact-3943581301/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,}