Name: series-workflow9stwp Phase: Succeeded StartedAt: 2026-09-10 20:33:18 +0000 UTC FinishedAt: 2026-09-11 00:18:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[0] Phase: Succeeded StartedAt: 2026-09-10 20:33:18 +0000 UTC FinishedAt: 2026-09-10 20:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 20:33:18 +0000 UTC FinishedAt: 2026-09-10 20:36:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NFT_SYNPROXY", "NF_CONNTRACK", "NF_TABLES_INET", "NF_TABLES_IPV6", "NF_TABLES_IPV4" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NFT_SYNPROXY", "NF_CONNTRACK", "NF_TABLES_INET", "NF_TABLES_IPV6", "NF_TABLES_IPV4" ], "series_id": "409df54d-aefb-4c55-9712-bedf6288503e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_synproxy_do_eval", "nft_synproxy_eval", "nft_synproxy_obj_eval", "nft_synproxy_eval_v6", "nft_synproxy_eval_v4" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORlRfU1lOUFJPWFkmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JUFY2JiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JUFY0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3N5bnByb3h5X2RvX2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X3N5bnByb3h5X2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X3N5bnByb3h5X29ial9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y2JiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgY2FsbCB0byBuZl9pcF9jaGVja3N1bSgpIHdpdGggbmZfY2hlY2tzdW0oKSBpbiBuZnRfc3lucHJveHlfZG9fZXZhbCgpIHNvIHRoYXQgdGhlIHByb3RvY29sIGZhbWlseSAoSVB2NCBvciBJUHY2KSBpcyBjb3JyZWN0bHkgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIFRDUCBjaGVja3N1bS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIGluZm8tbGVhayB2ZWN0b3JzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBhY2tldCBtZW1vcnkgYWNjZXNzIGJvdW5kYXJpZXMgb3IgaW52YWxpZCBza2Igb3BlcmF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBUQ1AgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGluIG5mdGFibGVzIFNZTlBST1hZIGV4cHJlc3Npb24gZXZhbHVhdGlvbiAobmZ0X3N5bnByb3h5X2RvX2V2YWwpIGJ5IHN3aXRjaGluZyBmcm9tIG5mX2lwX2NoZWNrc3VtIHRvIGZhbWlseS1hd2FyZSBuZl9jaGVja3N1bSwgaW1wYWN0aW5nIElQdjQgYW5kIElQdjYgdHJhZmZpYyBwcm9jZXNzaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgbmV0bGluayBhbmQgbmV0d29yayBwYWNrZXQgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg0ZDJiMDM4MTg5NDQyYTg5YjE3MDMyNTcwODRiMGZlYWM2NWE4MThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDozNToyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jIGIvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xuaW5kZXggOWVkMjg4YzlkMTY4OC4uNTU0YTk2YTAwMGY0MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbkBAIC0xMTgsNyAmIzQzOzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChuZl9pcF9jaGVja3N1bShza2IsIG5mdF9ob29rKHBrdCksIHRob2ZmLCBJUFBST1RPX1RDUCkpIHtcbiYjNDM7XHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXG4mIzQzO1x0XHRcdG5mdF9wZihwa3QpKSkge1xuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4gXHRcdHJldHVybjtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZUX1NZTlBST1hZJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9zeW5wcm94eV9kb19ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9vYmpfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NiYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBUQ1AgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGluIG5mdGFibGVzIFNZTlBST1hZIGV4cHJlc3Npb24gZXZhbHVhdGlvbiAobmZ0X3N5bnByb3h5X2RvX2V2YWwpIGJ5IHN3aXRjaGluZyBmcm9tIG5mX2lwX2NoZWNrc3VtIHRvIGZhbWlseS1hd2FyZSBuZl9jaGVja3N1bSwgaW1wYWN0aW5nIElQdjQgYW5kIElQdjYgdHJhZmZpYyBwcm9jZXNzaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgbmV0bGluayBhbmQgbmV0d29yayBwYWNrZXQgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg0ZDJiMDM4MTg5NDQyYTg5YjE3MDMyNTcwODRiMGZlYWM2NWE4MTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAyMDozNToyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jCmluZGV4IDllZDI4OGM5ZDE2ODguLjU1NGE5NmEwMDBmNDAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYwpAQCAtMTE4LDcgJiM0MzsxMTgsOCBAQCBzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZG9fZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LAogCQlyZXR1cm47CiAJfQogCi0JaWYgKG5mX2lwX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQKSkgewomIzQzOwlpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsCiYjNDM7CQkJbmZ0X3BmKHBrdCkpKSB7CiAJCXJlZ3MtJmd0O3ZlcmRpY3QuY29kZSA9IE5GX0RST1A7CiAJCXJldHVybjsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeW5wcm94eSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY2AuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgZnVuY3Rpb24uIFRoZSBkaWZmIGhpZ2hsaWdodHMgYSBjaGFuZ2UgaW4gdGhlIGNoZWNrc3VtIGNhbGN1bGF0aW9uLiBQcmV2aW91c2x5LCBpdCB1c2VkIGBuZl9pcF9jaGVja3N1bWAsIGFuZCBub3cgaXQmIzM5O3Mgc3dhcHBlZCBvdXQgZm9yIGBuZl9jaGVja3N1bWAuIEFuZCwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhbiBhZGRpdGlvbiBvZiBgbmZ0X3BmKHBrdClgIHRvIHRoZSBhcmd1bWVudHMgb2YgYG5mX2NoZWNrc3VtYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gSVB2NiBzdXBwb3J0IG9yIGEgbW9yZSBnZW5lcmljIGNoZWNrc3VtbWluZyBpbXBsZW1lbnRhdGlvbi4gVGhlIGBuZnRfcGYocGt0KWAgc3VnZ2VzdHMgd2UmIzM5O3JlIG5vdyBhY2NvdW50aW5nIGZvciB0aGUgcGFja2V0IGZhbWlseS4gIFRoZSBvbGQgYG5mX2lwX2NoZWNrc3VtYCB3YXMgcHJldHR5IHNwZWNpZmljLCBzbyB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCBtb3ZlIGZvciBicm9hZGVyIGNvbXBhdGliaWxpdHkgYW5kIHBlcmZvcm1hbmNlLgoKVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBuZl9jaGVja3N1bWAsIGBuZnRfcGZgLCBhbmQgbWF5YmUgZXZlbiB0aGUgY29udGV4dCBvZiBgbmZ0X2hvb2tgIHRvIHNlZSBob3cgdGhpcyBwYXRjaCBmaXRzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdpbGwgdXNlIGByZWFkLWZpbGVgIGFuZC9vciBgZ3JlcHBlcmAgdG8gcHVsbCB0aG9zZSBkZWZpbml0aW9ucywgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBmb3IgYSBtb3JlIGRldGFpbGVkIGFuYWx5c2lzLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBpbiB0aGUgZmlyc3QgcGxhY2U6IHdoYXQmIzM5O3MgdGhlIG1vdGl2YXRpb24/IFdoYXQgaXNzdWUgaXMgaXQgc29sdmluZyBvciB3aGF0IGZlYXR1cmUgaXMgaXQgZW5hYmxpbmc/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4gMTAxOlx0XHRcdH1cbiAxMDI6XHRcdH1cbiAxMDM6XHR9XG4gMTA0Olx0I2VuZGlmIC8qIENPTkZJR19ORl9UQUJMRVNfSVBWNiovXG4gMTA1Olx0XG4gMTA2Olx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2RvX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcbiAxMDc6XHRcdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gMTA4Olx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4gMTA5Olx0e1xuIDExMDpcdFx0c3RydWN0IHN5bnByb3h5X29wdGlvbnMgb3B0cyA9IHt9O1xuIDExMTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4gMTEyOlx0XHRpbnQgdGhvZmYgPSBuZnRfdGhvZmYocGt0KTtcbiAxMTM6XHRcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcDtcbiAxMTQ6XHRcdHN0cnVjdCB0Y3BoZHIgX3RjcGg7XG4gMTE1Olx0XG4gMTE2Olx0XHRpZiAocGt0LVx1MDAzZXRwcm90ICE9IElQUFJPVE9fVENQKSB7XG4gMTE3Olx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xuIDExODpcdFx0XHRyZXR1cm47XG4gMTE5Olx0XHR9XG4gMTIwOlx0XG4gMTIxOlx0XHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXG4gMTIyOlx0XHRcdFx0bmZ0X3BmKHBrdCkpKSB7XG4gMTIzOlx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiAxMjQ6XHRcdFx0cmV0dXJuO1xuIDEyNTpcdFx0fVxuIDEyNjpcdFxuIDEyNzpcdFx0dGNwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgdGhvZmYsXG4gMTI4Olx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLFxuIDEyOTpcdFx0XHRcdFx0IFx1MDAyNl90Y3BoKTtcbiAxMzA6XHRcdGlmICghdGNwKSB7XG4gMTMxOlx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiAxMzI6XHRcdFx0cmV0dXJuO1xuIDEzMzpcdFx0fVxuIDEzNDpcdFxuIDEzNTpcdFx0aWYgKCFzeW5wcm94eV9wYXJzZV9vcHRpb25zKHNrYiwgdGhvZmYsIHRjcCwgXHUwMDI2b3B0cykpIHtcbiAxMzY6XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIDEzNzpcdFx0XHRyZXR1cm47XG4gMTM4Olx0XHR9XG4gMTM5Olx0XG4gMTQwOlx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuIDE0MTpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gMTQyOlx0XHRcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcdTAwMjZfdGNwaCwgXHUwMDI2b3B0cyk7XG4gMTQzOlx0XHRcdHJldHVybjtcbiAxNDQ6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0lQVjYpXG4gMTQ1Olx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuIDE0NjpcdFx0XHRuZnRfc3lucHJveHlfZXZhbF92Nihwcml2LCByZWdzLCBwa3QsIHRjcCwgXHUwMDI2X3RjcGgsIFx1MDAyNm9wdHMpO1xuIDE0NzpcdFx0XHRyZXR1cm47XG4gMTQ4Olx0I2VuZGlmXG4gMTQ5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGhlIGBuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jYCBmaWxlIGFuZCBpdHMgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbi4KCioqSW5pdGlhbCBFeHBsb3JhdGlvbiBvZiBuZnRfc3lucHJveHkuYyBhbmQgS2NvbmZpZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYG5mdF9zeW5wcm94eWAgbW9kdWxlLiBGaXJzdCwgSSB3YW50IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiB0aGUgZW52aXJvbm1lbnQgdGhhdCB0aGlzIG1vZHVsZSBpcyBsaXZpbmcgaW4uIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY2AgZGlyZWN0bHkuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBieSBleGFtaW5pbmcgdGhlIHNvdXJjZSBjb2RlLCBJIGNhbiBwaWNrIHVwIG9uIHRoZSBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmZhY2VzIHRoYXQgYXJlIGV4cG9zZWQgZm9yIHVzZSBlbHNld2hlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIE5ldGZpbHRlciBmcmFtZXdvcmssIGFzIHdlbGwgYXMgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgaW4gZ2VuZXJhbC4KClRoZW4sIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgY29kZSwgSSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIHRvIGV4YW1pbmUgdGhlIGFzc29jaWF0ZWQgYEtjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIHJlbGV2YW50IHN5bWJvbHMgYW5kIGNvbmZpZ3MgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmVzIGRlcGVuZCBvbiB0aGlzIG1vZHVsZSBhbmQgaG93IGl0IGlzIGJyb3VnaHQgaW50byB0aGUgYnVpbGQuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyBzb21ldGhpbmcgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zeW5wcm94eS5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eS5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9zeW5wcm94eS5oXHUwMDNlXG4gIDEzOlx0XG4gIDE0Olx0c3RydWN0IG5mdF9zeW5wcm94eSB7XG4gIDE1Olx0XHRzdHJ1Y3QgbmZfc3lucHJveHlfaW5mb1x0aW5mbztcbiAgMTY6XHR9O1xuICAxNzpcdFxuICAxODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc3lucHJveHlfcG9saWN5W05GVEFfU1lOUFJPWFlfTUFYICYjNDM7IDFdID0ge1xuICAxOTpcdFx0W05GVEFfU1lOUFJPWFlfTVNTXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXG4gIDIwOlx0XHRbTkZUQV9TWU5QUk9YWV9XU0NBTEVdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCBUQ1BfTUFYX1dTQ0FMRSksXG4gIDIxOlx0XHRbTkZUQV9TWU5QUk9YWV9GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GX1NZTlBST1hZX09QVF9NQVNLKSxcbiAgMjI6XHR9O1xuICAyMzpcdFxuICAyNDpcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhzdHJ1Y3Qgc3lucHJveHlfb3B0aW9ucyAqb3B0cyxcbiAgMjU6XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwLFxuICAyNjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0LFxuICAyNzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmZfc3lucHJveHlfaW5mbyAqaW5mbylcbiAgMjg6XHR7XG4gIDI5Olx0XHR0aGlzX2NwdV9pbmMoc25ldC1cdTAwM2VzdGF0cy1cdTAwM2VzeW5fcmVjZWl2ZWQpO1xuICAzMDpcdFx0aWYgKHRjcC1cdTAwM2VlY2UgXHUwMDI2XHUwMDI2IHRjcC1cdTAwM2Vjd3IpXG4gIDMxOlx0XHRcdG9wdHMtXHUwMDNlb3B0aW9ucyB8PSBORl9TWU5QUk9YWV9PUFRfRUNOO1xuICAzMjpcdFxuICAzMzpcdFx0b3B0cy1cdTAwM2VvcHRpb25zIFx1MDAyNj0gaW5mby1cdTAwM2VvcHRpb25zO1xuICAzNDpcdFx0b3B0cy1cdTAwM2Vtc3NfZW5jb2RlID0gb3B0cy1cdTAwM2Vtc3Nfb3B0aW9uO1xuICAzNTpcdFx0b3B0cy1cdTAwM2Vtc3Nfb3B0aW9uID0gaW5mby1cdTAwM2Vtc3M7XG4gIDM2Olx0XHRpZiAob3B0cy1cdTAwM2VvcHRpb25zIFx1MDAyNiBORl9TWU5QUk9YWV9PUFRfVElNRVNUQU1QKVxuICAzNzpcdFx0XHRzeW5wcm94eV9pbml0X3RpbWVzdGFtcF9jb29raWUoaW5mbywgb3B0cyk7XG4gIDM4Olx0XHRlbHNlXG4gIDM5Olx0XHRcdG9wdHMtXHUwMDNlb3B0aW9ucyBcdTAwMjY9IH4oTkZfU1lOUFJPWFlfT1BUX1dTQ0FMRSB8XG4gIDQwOlx0XHRcdFx0XHQgICBORl9TWU5QUk9YWV9PUFRfU0FDS19QRVJNIHxcbiAgNDE6XHRcdFx0XHRcdCAgIE5GX1NZTlBST1hZX09QVF9FQ04pO1xuICA0MjpcdH1cbiAgNDM6XHRcbiAgNDQ6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92NChjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxuICA0NTpcdFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbiAgNDY6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiAgNDc6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3AsXG4gIDQ4Olx0XHRcdFx0XHQgc3RydWN0IHRjcGhkciAqX3RjcGgsXG4gIDQ5Olx0XHRcdFx0XHQgc3RydWN0IHN5bnByb3h5X29wdGlvbnMgKm9wdHMpXG4gIDUwOlx0e1xuICA1MTpcdFx0c3RydWN0IG5mX3N5bnByb3h5X2luZm8gaW5mbyA9IFJFQURfT05DRShwcml2LVx1MDAzZWluZm8pO1xuICA1MjpcdFx0c3RydWN0IG5ldCAqbmV0ID0gbmZ0X25ldChwa3QpO1xuICA1MzpcdFx0c3RydWN0IHN5bnByb3h5X25ldCAqc25ldCA9IHN5bnByb3h5X3Blcm5ldChuZXQpO1xuICA1NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4gIDU1Olx0XG4gIDU2Olx0XHRpZiAodGNwLVx1MDAzZXN5bikge1xuICA1NzpcdFx0XHQvKiBJbml0aWFsIFNZTiBmcm9tIGNsaWVudCAqL1xuICA1ODpcdFx0XHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcdTAwMjZpbmZvKTtcbiAgNTk6XHRcdFx0c3lucHJveHlfc2VuZF9jbGllbnRfc3luYWNrKG5ldCwgc2tiLCB0Y3AsIG9wdHMpO1xuICA2MDpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuICA2MTpcdFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX1NUT0xFTjtcbiAgNjI6XHRcdH0gZWxzZSBpZiAodGNwLVx1MDAzZWFjaykge1xuICA2MzpcdFx0XHQvKiBBQ0sgZnJvbSBjbGllbnQgKi9cbiAgNjQ6XHRcdFx0aWYgKHN5bnByb3h5X3JlY3ZfY2xpZW50X2FjayhuZXQsIHNrYiwgdGNwLCBvcHRzLFxuICA2NTpcdFx0XHRcdFx0XHQgICAgIG50b2hsKHRjcC1cdTAwM2VzZXEpKSkge1xuICA2NjpcdFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gIDY3Olx0XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XG4gIDY4Olx0XHRcdH0gZWxzZSB7XG4gIDY5Olx0XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuICA3MDpcdFx0XHR9XG4gIDcxOlx0XHR9XG4gIDcyOlx0fVxuICA3MzpcdFxuICA3NDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfSVBWNilcbiAgNzU6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92Nihjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxuICA3NjpcdFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbiAgNzc6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiAgNzg6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3AsXG4gIDc5Olx0XHRcdFx0XHQgc3RydWN0IHRjcGhkciAqX3RjcGgsXG4gIDgwOlx0XHRcdFx0XHQgc3RydWN0IHN5bnByb3h5X29wdGlvbnMgKm9wdHMpXG4gIDgxOlx0e1xuICA4MjpcdFx0c3RydWN0IG5mX3N5bnByb3h5X2luZm8gaW5mbyA9IFJFQURfT05DRShwcml2LVx1MDAzZWluZm8pO1xuICA4MzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gbmZ0X25ldChwa3QpO1xuICA4NDpcdFx0c3RydWN0IHN5bnByb3h5X25ldCAqc25ldCA9IHN5bnByb3h5X3Blcm5ldChuZXQpO1xuICA4NTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4gIDg2Olx0XG4gIDg3Olx0XHRpZiAodGNwLVx1MDAzZXN5bikge1xuICA4ODpcdFx0XHQvKiBJbml0aWFsIFNZTiBmcm9tIGNsaWVudCAqL1xuICA4OTpcdFx0XHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcdTAwMjZpbmZvKTtcbiAgOTA6XHRcdFx0c3lucHJveHlfc2VuZF9jbGllbnRfc3luYWNrX2lwdjYobmV0LCBza2IsIHRjcCwgb3B0cyk7XG4gIDkxOlx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gIDkyOlx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfU1RPTEVOO1xuICA5MzpcdFx0fSBlbHNlIGlmICh0Y3AtXHUwMDNlYWNrKSB7XG4gIDk0Olx0XHRcdC8qIEFDSyBmcm9tIGNsaWVudCAqL1xuICA5NTpcdFx0XHRpZiAoc3lucHJveHlfcmVjdl9jbGllbnRfYWNrX2lwdjYobmV0LCBza2IsIHRjcCwgb3B0cyxcbiAgOTY6XHRcdFx0XHRcdFx0XHQgIG50b2hsKHRjcC1cdTAwM2VzZXEpKSkge1xuICA5NzpcdFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gIDk4Olx0XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XG4gIDk5Olx0XHRcdH0gZWxzZSB7XG4gMTAwOlx0XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dDoKCioqQW5hbHl6aW5nIGBuZnRfc3lucHJveHkuY2AgRnVydGhlcioqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkOiBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kICphY3R1YWxseSogZXhhbWluZSB0aGUgY29kZSBpbiBgbmZ0X3N5bnByb3h5LmNgLiBObyBtb3JlIHRoZW9yZXRpY2FsIGRpc2N1c3Npb25zLCBubyBtb3JlIGxvb2tpbmcgYXQgdGhlIHByb2JsZW0gZnJvbSB0aGUgb3V0c2lkZSDigJMgdGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kICpyZWFsbHkqIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgbmVlZCB0byBzZWUgdGhlIG5pdHR5LWdyaXR0eTogaG93IGl0JiMzOTtzICphY3R1YWxseSogZG9uZS4gV2hlcmUgYXJlIHRoZSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXM/IFdoYXQmIzM5O3MgdGhlIGZsb3cgY29udHJvbD8gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbiBjYWxscz8gV2hhdCBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZSBwcmVzZW50PyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyBhY2NvdW50ZWQgZm9yPyBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBwcmFjdGljYWwgZXhlY3V0aW9uIG9mIHRoZSBzeW5wcm94eSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLCB0aGUgYXNzdW1wdGlvbnMgYmFrZWQgaW50byB0aGUgZGVzaWduLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyB0aGF0IG1pZ2h0IHJlcXVpcmUgY2xvc2VyIHNjcnV0aW55IGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3IgZnV0dXJlIG1haW50YWluYWJpbGl0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4gMTUxOlx0fVxuIDE1MjpcdFxuIDE1MzpcdHN0YXRpYyBpbnQgbmZ0X3N5bnByb3h5X2RvX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiAxNTQ6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIDE1NTpcdFx0XHRcdFx0c3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdilcbiAxNTY6XHR7XG4gMTU3Olx0XHRzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0ID0gc3lucHJveHlfcGVybmV0KGN0eC1cdTAwM2VuZXQpO1xuIDE1ODpcdFx0dTMyIGZsYWdzO1xuIDE1OTpcdFx0aW50IGVycjtcbiAxNjA6XHRcbiAxNjE6XHRcdGlmICh0YltORlRBX1NZTlBST1hZX01TU10pXG4gMTYyOlx0XHRcdHByaXYtXHUwMDNlaW5mby5tc3MgPSBudG9ocyhubGFfZ2V0X2JlMTYodGJbTkZUQV9TWU5QUk9YWV9NU1NdKSk7XG4gMTYzOlx0XHRpZiAodGJbTkZUQV9TWU5QUk9YWV9XU0NBTEVdKVxuIDE2NDpcdFx0XHRwcml2LVx1MDAzZWluZm8ud3NjYWxlID0gbmxhX2dldF91OCh0YltORlRBX1NZTlBST1hZX1dTQ0FMRV0pO1xuIDE2NTpcdFx0aWYgKHRiW05GVEFfU1lOUFJPWFlfRkxBR1NdKSB7XG4gMTY2Olx0XHRcdGZsYWdzID0gbnRvaGwobmxhX2dldF9iZTMyKHRiW05GVEFfU1lOUFJPWFlfRkxBR1NdKSk7XG4gMTY3Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgfk5GX1NZTlBST1hZX09QVF9NQVNLKVxuIDE2ODpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAxNjk6XHRcdFx0cHJpdi1cdTAwM2VpbmZvLm9wdGlvbnMgPSBmbGFncztcbiAxNzA6XHRcdH1cbiAxNzE6XHRcbiAxNzI6XHRcdGVyciA9IG5mX2N0X25ldG5zX2dldChjdHgtXHUwMDNlbmV0LCBjdHgtXHUwMDNlZmFtaWx5KTtcbiAxNzM6XHRcdGlmIChlcnIpXG4gMTc0Olx0XHRcdHJldHVybiBlcnI7XG4gMTc1Olx0XG4gMTc2Olx0XHRzd2l0Y2ggKGN0eC1cdTAwM2VmYW1pbHkpIHtcbiAxNzc6XHRcdGNhc2UgTkZQUk9UT19JUFY0OlxuIDE3ODpcdFx0XHRlcnIgPSBuZl9zeW5wcm94eV9pcHY0X2luaXQoc25ldCwgY3R4LVx1MDAzZW5ldCk7XG4gMTc5Olx0XHRcdGlmIChlcnIpXG4gMTgwOlx0XHRcdFx0Z290byBuZl9jdF9mYWlsdXJlO1xuIDE4MTpcdFx0XHRicmVhaztcbiAxODI6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0lQVjYpXG4gMTgzOlx0XHRjYXNlIE5GUFJPVE9fSVBWNjpcbiAxODQ6XHRcdFx0ZXJyID0gbmZfc3lucHJveHlfaXB2Nl9pbml0KHNuZXQsIGN0eC1cdTAwM2VuZXQpO1xuIDE4NTpcdFx0XHRpZiAoZXJyKVxuIDE4NjpcdFx0XHRcdGdvdG8gbmZfY3RfZmFpbHVyZTtcbiAxODc6XHRcdFx0YnJlYWs7XG4gMTg4Olx0I2VuZGlmXG4gMTg5Olx0XHRjYXNlIE5GUFJPVE9fSU5FVDpcbiAxOTA6XHRcdFx0ZXJyID0gbmZfc3lucHJveHlfaXB2NF9pbml0KHNuZXQsIGN0eC1cdTAwM2VuZXQpO1xuIDE5MTpcdFx0XHRpZiAoZXJyKVxuIDE5MjpcdFx0XHRcdGdvdG8gbmZfY3RfZmFpbHVyZTtcbiAxOTM6XHRcdFx0ZXJyID0gbmZfc3lucHJveHlfaXB2Nl9pbml0KHNuZXQsIGN0eC1cdTAwM2VuZXQpO1xuIDE5NDpcdFx0XHRpZiAoZXJyKSB7XG4gMTk1Olx0XHRcdFx0bmZfc3lucHJveHlfaXB2NF9maW5pKHNuZXQsIGN0eC1cdTAwM2VuZXQpO1xuIDE5NjpcdFx0XHRcdGdvdG8gbmZfY3RfZmFpbHVyZTtcbiAxOTc6XHRcdFx0fVxuIDE5ODpcdFx0XHRicmVhaztcbiAxOTk6XHRcdH1cbiAyMDA6XHRcbiAyMDE6XHRcdHJldHVybiAwO1xuIDIwMjpcdFxuIDIwMzpcdG5mX2N0X2ZhaWx1cmU6XG4gMjA0Olx0XHRuZl9jdF9uZXRuc19wdXQoY3R4LVx1MDAzZW5ldCwgY3R4LVx1MDAzZWZhbWlseSk7XG4gMjA1Olx0XHRyZXR1cm4gZXJyO1xuIDIwNjpcdH1cbiAyMDc6XHRcbiAyMDg6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZG9fZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4KVxuIDIwOTpcdHtcbiAyMTA6XHRcdHN0cnVjdCBzeW5wcm94eV9uZXQgKnNuZXQgPSBzeW5wcm94eV9wZXJuZXQoY3R4LVx1MDAzZW5ldCk7XG4gMjExOlx0XG4gMjEyOlx0XHRzd2l0Y2ggKGN0eC1cdTAwM2VmYW1pbHkpIHtcbiAyMTM6XHRcdGNhc2UgTkZQUk9UT19JUFY0OlxuIDIxNDpcdFx0XHRuZl9zeW5wcm94eV9pcHY0X2Zpbmkoc25ldCwgY3R4LVx1MDAzZW5ldCk7XG4gMjE1Olx0XHRcdGJyZWFrO1xuIDIxNjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfSVBWNilcbiAyMTc6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuIDIxODpcdFx0XHRuZl9zeW5wcm94eV9pcHY2X2Zpbmkoc25ldCwgY3R4LVx1MDAzZW5ldCk7XG4gMjE5Olx0XHRcdGJyZWFrO1xuIDIyMDpcdCNlbmRpZlxuIDIyMTpcdFx0Y2FzZSBORlBST1RPX0lORVQ6XG4gMjIyOlx0XHRcdG5mX3N5bnByb3h5X2lwdjRfZmluaShzbmV0LCBjdHgtXHUwMDNlbmV0KTtcbiAyMjM6XHRcdFx0bmZfc3lucHJveHlfaXB2Nl9maW5pKHNuZXQsIGN0eC1cdTAwM2VuZXQpO1xuIDIyNDpcdFx0XHRicmVhaztcbiAyMjU6XHRcdH1cbiAyMjY6XHRcdG5mX2N0X25ldG5zX3B1dChjdHgtXHUwMDNlbmV0LCBjdHgtXHUwMDNlZmFtaWx5KTtcbiAyMjc6XHR9XG4gMjI4Olx0XG4gMjI5Olx0c3RhdGljIGludCBuZnRfc3lucHJveHlfZG9fZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2KVxuIDIzMDpcdHtcbiAyMzE6XHRcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBORlRBX1NZTlBST1hZX01TUywgaHRvbnMocHJpdi1cdTAwM2VpbmZvLm1zcykpIHx8XG4gMjMyOlx0XHQgICAgbmxhX3B1dF91OChza2IsIE5GVEFfU1lOUFJPWFlfV1NDQUxFLCBwcml2LVx1MDAzZWluZm8ud3NjYWxlKSB8fFxuIDIzMzpcdFx0ICAgIG5sYV9wdXRfYmUzMihza2IsIE5GVEFfU1lOUFJPWFlfRkxBR1MsIGh0b25sKHByaXYtXHUwMDNlaW5mby5vcHRpb25zKSkpXG4gMjM0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDIzNTpcdFxuIDIzNjpcdFx0cmV0dXJuIDA7XG4gMjM3Olx0XG4gMjM4Olx0bmxhX3B1dF9mYWlsdXJlOlxuIDIzOTpcdFx0cmV0dXJuIC0xO1xuIDI0MDpcdH1cbiAyNDE6XHRcbiAyNDI6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gMjQzOlx0XHRcdFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuIDI0NDpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuIDI0NTpcdHtcbiAyNDY6XHRcdGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIDI0NzpcdFxuIDI0ODpcdFx0bmZ0X3N5bnByb3h5X2RvX2V2YWwocHJpdiwgcmVncywgcGt0KTtcbiAyNDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIGZvciBuZnRfc3lucHJveHkqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYG5mdF9zeW5wcm94eWAuIExldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgdGhpcyBpcyBhIG1vZHVsZSBvciBidWlsdC1pbiwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpdCYjMzk7cyBlbmFibGVkLiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJJiMzOTtsbCBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKmludGVyZXN0aW5nKiBkZWZhdWx0cy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgYW55IG5ldyBvcHRpb25zIGFyZSBleHBvc2VkIGJhc2VkIG9uIHRoaXMgc2VsZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBtZW51IHN0cnVjdHVyZSBhbmQgdGhlIGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORlRfU1lOUFJPWFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0OTpjb25maWcgTkZUX1NZTlBST1hZXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjUwLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzMj1vYmotJChDT05GSUdfTkZUX1hGUk0pXHRcdCYjNDM7PSBuZnRfeGZybS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzMzpvYmotJChDT05GSUdfTkZUX1NZTlBST1hZKVx0JiM0Mzs9IG5mdF9zeW5wcm94eS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2NDkuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4YW1pbmluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0ZmlsdGVyLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gYmUgdGhlcmUgLSBtYXliZSBhIG5ldyBmZWF0dXJlLCBhIGNoYW5nZSBpbiBob3cgc29tZXRoaW5nJiMzOTtzIGVuYWJsZWQsIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5IEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBob2xkcyBmb3IgdXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0NTpcdFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG4gNjQ2Olx0XHRoZWxwXG4gNjQ3Olx0XHQgIFRoaXMgbWFrZXMgdHJhbnNwYXJlbnQgcHJveHkgc3VwcG9ydCBhdmFpbGFibGUgaW4gbmZ0YWJsZXMuXG4gNjQ4Olx0XG4gNjQ5Olx0Y29uZmlnIE5GVF9TWU5QUk9YWVxuIDY1MDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiA2NTE6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORVRGSUxURVJfQURWQU5DRURcbiA2NTI6XHRcdHNlbGVjdCBORVRGSUxURVJfU1lOUFJPWFlcbiA2NTM6XHRcdHNlbGVjdCBTWU5fQ09PS0lFU1xuIDY1NDpcdFx0aGVscFxuIDY1NTpcdFx0ICBUaGUgU1lOUFJPWFkgZXhwcmVzc2lvbiBhbGxvd3MgeW91IHRvIGludGVyY2VwdCBUQ1AgY29ubmVjdGlvbnMgYW5kXG4gNjU2Olx0XHQgIGVzdGFibGlzaCB0aGVtIHVzaW5nIHN5bmNvb2tpZXMgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCBvbiB0byB0aGVcbiA2NTc6XHRcdCAgc2VydmVyLiBUaGlzIGFsbG93cyB0byBhdm9pZCBjb25udHJhY2sgYW5kIHNlcnZlciByZXNvdXJjZSB1c2FnZVxuIDY1ODpcdFx0ICBkdXJpbmcgU1lOLWZsb29kIGF0dGFja3MuXG4gNjU5Olx0XG4gNjYwOlx0aWYgTkZfVEFCTEVTX05FVERFVlxuIDY2MTpcdFxuIDY2MjpcdGNvbmZpZyBORl9EVVBfTkVUREVWXG4gNjYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnRcJiMzNDtcbiA2NjQ6XHRcdGhlbHBcbiA2NjU6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZ2VuZXJpYyBwYWNrZXQgZHVwbGljYXRpb24gaW5mcmFzdHJ1Y3R1cmVcbiA2NjY6XHRcdCAgZm9yIE5ldGZpbHRlci5cbiA2Njc6XHRcbiA2Njg6XHRjb25maWcgTkZUX0RVUF9ORVRERVZcbiA2Njk6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gNjcwOlx0XHRzZWxlY3QgTkZfRFVQX05FVERFVlxuIDY3MTpcdFx0aGVscFxuIDY3MjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBmb3IgdGhlIFwmIzM0O25ldGRldlwmIzM0OyBmYW1pbHkuXG4gNjczOlx0XG4gNjc0Olx0Y29uZmlnIE5GVF9GV0RfTkVUREVWXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5ldGZpbHRlciBDaGVja3N1bW1pbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZl9jaGVja3N1bWAgc2l0dWF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IsIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGF0IG9sZGVyIGBuZl9pcF9jaGVja3N1bWAgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZ2V0IHRoZSBkZXRhaWxzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGBncmVwYCB0byBwaW5wb2ludCB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgbmZfY2hlY2tzdW1gIHdpdGhpbiB0aGUgc291cmNlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgdXNhZ2UuIEZyb20gdGhlcmUsIEkgY2FuIGNvbXBhcmUgaXQgdG8gdGhlIG9sZGVyIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZXZvbHV0aW9uIG9mIHRoZSBjaGVja3N1bSBoYW5kbGluZyBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY2hlY2tzdW1cXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oPTM3Mz1zdHJ1Y3QgbmZfcXVldWVfZW50cnk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3NC1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6Mzc1Ol9fc3VtMTYgbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3Ni1cdFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCxcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTIxMTc9c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjEyMi1cdC8qIFZhbGlkYXRlIGNzdW0gZXZlbiBmb3IgRk9SV0FSRCAqL1xuaW5jbHVkZS9uZXQvaXBfdnMuaDoyMTIzOlx0cmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTtcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjEyNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRml4aW5nIGEgQ3JpdGljYWwgQ2hlY2tzdW0gQnVnIGluIGBuZnRfc3lucHJveHlgIGZvciBJUHY2KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBuZnRfc3lucHJveHlgIGNvZGUsIGFuZCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBhIHByb2JsZW0uIEl0IHN1cHBvcnRzIGJvdGggSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgZ3JlYXQsIGhhbmRsaW5nIGBORlBST1RPX0lQVjRgLCBgTkZQUk9UT19JUFY2YCwgYW5kIHRoZSBvdGhlcnMuIEhvd2V2ZXIsIGl0IHdhcyB1bmNvbmRpdGlvbmFsbHkgY2FsbGluZyBgbmZfaXBfY2hlY2tzdW1gLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IGBuZl9pcF9jaGVja3N1bWAgaXMgc3BlY2lmaWNhbGx5IElQdjQgb25seS4gRm9yIElQdjYgd2UgbmVlZCBgbmZfaXA2X2NoZWNrc3VtYCwgb3IgYSBnZW5lcmljIGFwcHJvYWNoIGxpa2UgYG5mX2NoZWNrc3VtYCB3aXRoIGBuZnRfcGYocGt0KWAuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgKG9yIHdoaWNoZXZlciBldmFsdWF0aW9uIGZ1bmN0aW9uIGlzIHVzZWQpIHByb2Nlc3NlcyBhbiBJUHY2IHBhY2tldCwgaXQmIzM5O3MgdXNpbmcgdGhlIHdyb25nIGNoZWNrc3VtIGNhbGN1bGF0aW9uLCBzcGVjaWZpY2FsbHksIHRoZSBgaXBfaGRyKHNrYilgIGlzIGJlaW5nIHVzZWQgb24gdGhlIElQdjYgcGFja2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjaGVja3N1bXMgYW5kIGxpa2VseSBtYWxmb3JtZWQgaGFuZGxpbmcsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHdoYXQgd2Ugd2FudC4KClRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkLiBSZXBsYWNlIHRoZSBjYWxsIHRvIGBuZl9pcF9jaGVja3N1bWAgd2l0aCBgbmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsIG5mdF9wZihwa3QpKWAuIFRoaXMgdXNlcyB0aGUgZ2VuZXJpYyBjaGVja3N1bSBmdW5jdGlvbiwgbWFraW5nIHN1cmUgd2UgcGljayB0aGUgY29ycmVjdCBwcm90b2NvbCBmYW1pbHkgdG8gY29tcHV0ZSB0aGUgY2hlY2tzdW0sIHdoaWNoIHNvbHZlcyB0aGUgSVB2NiBjaGVja3N1bSB2ZXJpZmljYXRpb24gcHJvYmxlbSBhbmQgaXMgbW9yZSBnZW5lcmFsLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlLCBhbmQgaXMgaXQgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIHNlZS4uLgoKUmVhY2hhYmlsaXR5OiBXZWxsLCBOZXRmaWx0ZXIgYW5kIG5mdGFibGVzIHN5bnByb3h5IGFyZSBmdWxseSBlbXVsYXRhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzaW5nIG5ldGxpbmsgc29ja2V0cyB0byBjcmVhdGUgbmZ0YWJsZXMgcnVsZXMgd2l0aCB0aGUgc3lucHJveHkgZXhwcmVzc2lvbi4gUGFja2V0IGdlbmVyYXRpb24gb3ZlciBsb29wYmFjaywgdHVuL3RhcCwgb3IgdmV0aCBkZXZpY2VzIGlzIHNpbXBsZS4gSXQmIzM5O3MgZXZlbiByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwcy4gQ2hlY2shCgpNb2RpZmljYXRpb25zIGluIGNvcmUgc3Vic3lzdGVtcyAvIG5ldHdvcmtpbmc6IFllcywgdGhpcyBkZWZpbml0ZWx5IG1vZGlmaWVzIHBhY2tldCBldmFsdWF0aW9uIGxvZ2ljIGluIG5ldGZpbHRlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgTkZUIHN5bnByb3h5IGV4cHJlc3Npb24uIEFub3RoZXIgY2hlY2shCgpXb3J0aEZ1enppbmc6IEkmIzM5O2Qgc2F5IHllcywgYmVjYXVzZSB0aGlzIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFdpdGggYWxsIG9mIHRoYXQsIGl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlIGlzIGEgcHJpbWUgY2FuZGlkYXRlLgoKQ29uZmlnczogTGV0IG1lIGNoZWNrIHRoZSBjb25maWdzLiBgQ09ORklHX05GVF9TWU5QUk9YWWAsIGBDT05GSUdfTkZfVEFCTEVTYCwgYENPTkZJR19ORl9DT05OVFJBQ0tgLCBgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRGAsIGBDT05GSUdfTkZfVEFCTEVTX0lORVRgLCBgQ09ORklHX05GX1RBQkxFU19JUFY2YCwgYENPTkZJR19ORl9UQUJMRVNfSVBWNGAsIGFuZCBgQ09ORklHX05GX1RBQkxFU19ORVRERVZgIGFsbCBzZWVtIHJlbGV2YW50LgoKU3ltYm9sczogVGhlIG1haW4gc3ltYm9scyB0byBjb25zaWRlciBhcmUgYG5mdF9zeW5wcm94eV9kb19ldmFsYCAob3IgYG5mdF9zeW5wcm94eV9ldmFsYCksIGBuZnRfc3lucHJveHlfZXZhbF92NGAsIGBuZnRfc3lucHJveHlfZXZhbF92NmAsIGBuZnRfc3lucHJveHlfZG9faW5pdGAsIGFuZCBgbmZ0X3N5bnByb3h5X29ial9ldmFsYC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBieSBpbnNwZWN0aW5nIGBuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0fVxuIDI0MTpcdFxuIDI0MjpcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiAyNDM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gMjQ0Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4gMjQ1Olx0e1xuIDI0NjpcdFx0Y29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG4gMjQ3Olx0XG4gMjQ4Olx0XHRuZnRfc3lucHJveHlfZG9fZXZhbChwcml2LCByZWdzLCBwa3QpO1xuIDI0OTpcdH1cbiAyNTA6XHRcbiAyNTE6XHRzdGF0aWMgaW50IG5mdF9zeW5wcm94eV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIDI1MjpcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbiAyNTM6XHR7XG4gMjU0Olx0XHRpZiAoY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjQgXHUwMDI2XHUwMDI2XG4gMjU1Olx0XHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjYgXHUwMDI2XHUwMDI2XG4gMjU2Olx0XHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQpXG4gMjU3Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAyNTg6XHRcbiAyNTk6XHRcdHJldHVybiBuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MoY3R4LVx1MDAzZWNoYWluLCAoMSBcdTAwM2NcdTAwM2MgTkZfSU5FVF9MT0NBTF9JTikgfFxuIDI2MDpcdFx0XHRcdFx0XHRcdCAgICAoMSBcdTAwM2NcdTAwM2MgTkZfSU5FVF9GT1JXQVJEKSk7XG4gMjYxOlx0fVxuIDI2MjpcdFxuIDI2MzpcdHN0YXRpYyBpbnQgbmZ0X3N5bnByb3h5X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiAyNjQ6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiAyNjU6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxuIDI2NjpcdHtcbiAyNjc6XHRcdHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIDI2ODpcdFxuIDI2OTpcdFx0cmV0dXJuIG5mdF9zeW5wcm94eV9kb19pbml0KGN0eCwgdGIsIHByaXYpO1xuIDI3MDpcdH1cbiAyNzE6XHRcbiAyNzI6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIDI3MzpcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbiAyNzQ6XHR7XG4gMjc1Olx0XHRuZnRfc3lucHJveHlfZG9fZGVzdHJveShjdHgpO1xuIDI3NjpcdH1cbiAyNzc6XHRcbiAyNzg6XHRzdGF0aWMgaW50IG5mdF9zeW5wcm94eV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4gMjc5Olx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXG4gMjgwOlx0e1xuIDI4MTpcdFx0c3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG4gMjgyOlx0XG4gMjgzOlx0XHRyZXR1cm4gbmZ0X3N5bnByb3h5X2RvX2R1bXAoc2tiLCBwcml2KTtcbiAyODQ6XHR9XG4gMjg1Olx0XG4gMjg2Olx0c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9zeW5wcm94eV90eXBlO1xuIDI4NzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9zeW5wcm94eV9vcHMgPSB7XG4gMjg4Olx0XHQuZXZhbFx0XHQ9IG5mdF9zeW5wcm94eV9ldmFsLFxuIDI4OTpcdFx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3N5bnByb3h5KSksXG4gMjkwOlx0XHQuaW5pdFx0XHQ9IG5mdF9zeW5wcm94eV9pbml0LFxuIDI5MTpcdFx0LmRlc3Ryb3lcdD0gbmZ0X3N5bnByb3h5X2Rlc3Ryb3ksXG4gMjkyOlx0XHQuZHVtcFx0XHQ9IG5mdF9zeW5wcm94eV9kdW1wLFxuIDI5MzpcdFx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfc3lucHJveHlfdHlwZSxcbiAyOTQ6XHRcdC52YWxpZGF0ZVx0PSBuZnRfc3lucHJveHlfdmFsaWRhdGUsXG4gMjk1Olx0fTtcbiAyOTY6XHRcbiAyOTc6XHRzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X3N5bnByb3h5X3R5cGUgX19yZWFkX21vc3RseSA9IHtcbiAyOTg6XHRcdC5vcHNcdFx0PSBcdTAwMjZuZnRfc3lucHJveHlfb3BzLFxuIDI5OTpcdFx0Lm5hbWVcdFx0PSBcJiMzNDtzeW5wcm94eVwmIzM0OyxcbiAzMDA6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIDMwMTpcdFx0LnBvbGljeVx0XHQ9IG5mdF9zeW5wcm94eV9wb2xpY3ksXG4gMzAyOlx0XHQubWF4YXR0clx0PSBORlRBX1NZTlBST1hZX01BWCxcbiAzMDM6XHR9O1xuIDMwNDpcdFxuIDMwNTpcdHN0YXRpYyBpbnQgbmZ0X3N5bnByb3h5X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gMzA2Olx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4gMzA3Olx0XHRcdFx0XHQgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbiAzMDg6XHR7XG4gMzA5Olx0XHRzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gMzEwOlx0XG4gMzExOlx0XHRyZXR1cm4gbmZ0X3N5bnByb3h5X2RvX2luaXQoY3R4LCB0YiwgcHJpdik7XG4gMzEyOlx0fVxuIDMxMzpcdFxuIDMxNDpcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9vYmpfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIDMxNTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKVxuIDMxNjpcdHtcbiAzMTc6XHRcdG5mdF9zeW5wcm94eV9kb19kZXN0cm95KGN0eCk7XG4gMzE4Olx0fVxuIDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgyNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0OgoKKipBbmFseXppbmcgYG5mdF9zeW5wcm94eS5jYCBGdXJ0aGVyKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGltcHVsc2UgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgKmFjdHVhbGx5KiBleGFtaW5lIHRoZSBjb2RlIGluIGBuZnRfc3lucHJveHkuY2AuIE5vIG1vcmUgdGhlb3JldGljYWwgZGlzY3Vzc2lvbnMsIG5vIG1vcmUgbG9va2luZyBhdCB0aGUgcHJvYmxlbSBmcm9tIHRoZSBvdXRzaWRlIOKAkyB0aW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgKnJlYWxseSogdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5OiBob3cgaXQmIzM5O3MgKmFjdHVhbGx5KiBkb25lLiBXaGVyZSBhcmUgdGhlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcz8gV2hhdCYjMzk7cyB0aGUgZmxvdyBjb250cm9sPyBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzPyBXaGF0IG9wdGltaXphdGlvbnMsIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYXJlIHByZXNlbnQ/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIGFjY291bnRlZCBmb3I/IE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIHByYWN0aWNhbCBleGVjdXRpb24gb2YgdGhlIHN5bnByb3h5IGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIHRoZSBhc3N1bXB0aW9ucyBiYWtlZCBpbnRvIHRoZSBkZXNpZ24sIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIHRoYXQgbWlnaHQgcmVxdWlyZSBjbG9zZXIgc2NydXRpbnkgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBmdXR1cmUgbWFpbnRhaW5hYmlsaXR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0c3RhdGljIGludCBuZnRfc3lucHJveHlfb2JqX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAzMjE6XHRcdFx0XHRcdCBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLCBib29sIHJlc2V0KVxuIDMyMjpcdHtcbiAzMjM6XHRcdHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcbiAzMjQ6XHRcbiAzMjU6XHRcdHJldHVybiBuZnRfc3lucHJveHlfZG9fZHVtcChza2IsIHByaXYpO1xuIDMyNjpcdH1cbiAzMjc6XHRcbiAzMjg6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiAzMjk6XHRcdFx0XHRcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuIDMzMDpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbiAzMzE6XHR7XG4gMzMyOlx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gMzMzOlx0XG4gMzM0Olx0XHRuZnRfc3lucHJveHlfZG9fZXZhbChwcml2LCByZWdzLCBwa3QpO1xuIDMzNTpcdH1cbiAzMzY6XHRcbiAzMzc6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfb2JqX3VwZGF0ZShzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIDMzODpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfb2JqZWN0ICpuZXdvYmopXG4gMzM5Olx0e1xuIDM0MDpcdFx0c3RydWN0IG5mdF9zeW5wcm94eSAqbmV3cHJpdiA9IG5mdF9vYmpfZGF0YShuZXdvYmopO1xuIDM0MTpcdFx0c3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuIDM0MjpcdFxuIDM0MzpcdFx0V1JJVEVfT05DRShwcml2LVx1MDAzZWluZm8sIG5ld3ByaXYtXHUwMDNlaW5mbyk7XG4gMzQ0Olx0fVxuIDM0NTpcdFxuIDM0NjpcdHN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9zeW5wcm94eV9vYmpfdHlwZTtcbiAzNDc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9zeW5wcm94eV9vYmpfb3BzID0ge1xuIDM0ODpcdFx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfc3lucHJveHlfb2JqX3R5cGUsXG4gMzQ5Olx0XHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgbmZ0X3N5bnByb3h5KSxcbiAzNTA6XHRcdC5pbml0XHRcdD0gbmZ0X3N5bnByb3h5X29ial9pbml0LFxuIDM1MTpcdFx0LmRlc3Ryb3lcdD0gbmZ0X3N5bnByb3h5X29ial9kZXN0cm95LFxuIDM1MjpcdFx0LmR1bXBcdFx0PSBuZnRfc3lucHJveHlfb2JqX2R1bXAsXG4gMzUzOlx0XHQuZXZhbFx0XHQ9IG5mdF9zeW5wcm94eV9vYmpfZXZhbCxcbiAzNTQ6XHRcdC51cGRhdGVcdFx0PSBuZnRfc3lucHJveHlfb2JqX3VwZGF0ZSxcbiAzNTU6XHR9O1xuIDM1NjpcdFxuIDM1NzpcdHN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9zeW5wcm94eV9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuIDM1ODpcdFx0LnR5cGVcdFx0PSBORlRfT0JKRUNUX1NZTlBST1hZLFxuIDM1OTpcdFx0Lm9wc1x0XHQ9IFx1MDAyNm5mdF9zeW5wcm94eV9vYmpfb3BzLFxuIDM2MDpcdFx0Lm1heGF0dHJcdD0gTkZUQV9TWU5QUk9YWV9NQVgsXG4gMzYxOlx0XHQucG9saWN5XHRcdD0gbmZ0X3N5bnByb3h5X3BvbGljeSxcbiAzNjI6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIDM2MzpcdH07XG4gMzY0Olx0XG4gMzY1Olx0c3RhdGljIGludCBfX2luaXQgbmZ0X3N5bnByb3h5X21vZHVsZV9pbml0KHZvaWQpXG4gMzY2Olx0e1xuIDM2NzpcdFx0aW50IGVycjtcbiAzNjg6XHRcbiAzNjk6XHRcdGVyciA9IG5mdF9yZWdpc3Rlcl9vYmooXHUwMDI2bmZ0X3N5bnByb3h5X29ial90eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIERpZ2l0YWwgTGFuZHNjYXBlOiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueSBkZWVwIGFuYWx5c2lzLCBsZXQmIzM5O3MgZXN0YWJsaXNoIGEgY2xlYXIgYmFzZWxpbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAqQmVmb3JlIEkgZ2V0IHRvbyBpbnZvbHZlZCBpbiBzcGVjaWZpY3MsIGl0JiMzOTtzIHBydWRlbnQgdG8gY29uZHVjdCBhIHN3ZWVwIG9mIHRoZSBlbnRpcmUgZmlsZSouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSwgc3RydWN0dXJlLCBhbmQgYW55IHBvdGVudGlhbCByZWQgZmxhZ3MgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoZSBsYXJnZXIgY29udGV4dCBpcyBjcnVjaWFsIHRvIGNvbnRleHR1YWxpemluZyBkZXRhaWxzLiBUaGlzIGluaXRpYWwgcGFzcyB3aWxsIGluZm9ybSB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24gZm9yIGEgbWVhbmluZ2Z1bCBicmVha2Rvd24gYW5kIGFzc2Vzc21lbnQsIGFuZCB3aGV0aGVyIHRvIHJlZmluZSBteSBhcHByb2FjaCB0byB0aGUgZGF0YS4gTm8gYXNzdW1wdGlvbnMsIGp1c3QgYSBtZXRob2RpY2FsIHNjb3BpbmcgZXhlcmNpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDM3MTpcdFx0XHRyZXR1cm4gZXJyO1xuIDM3MjpcdFxuIDM3MzpcdFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXHUwMDI2bmZ0X3N5bnByb3h5X3R5cGUpO1xuIDM3NDpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAzNzU6XHRcdFx0Z290byBlcnI7XG4gMzc2Olx0XG4gMzc3Olx0XHRyZXR1cm4gMDtcbiAzNzg6XHRcbiAzNzk6XHRlcnI6XG4gMzgwOlx0XHRuZnRfdW5yZWdpc3Rlcl9vYmooXHUwMDI2bmZ0X3N5bnByb3h5X29ial90eXBlKTtcbiAzODE6XHRcdHJldHVybiBlcnI7XG4gMzgyOlx0fVxuIDM4MzpcdFxuIDM4NDpcdHN0YXRpYyB2b2lkIF9fZXhpdCBuZnRfc3lucHJveHlfbW9kdWxlX2V4aXQodm9pZClcbiAzODU6XHR7XG4gMzg2Olx0XHRuZnRfdW5yZWdpc3Rlcl9leHByKFx1MDAyNm5mdF9zeW5wcm94eV90eXBlKTtcbiAzODc6XHRcdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfc3lucHJveHlfb2JqX3R5cGUpO1xuIDM4ODpcdH1cbiAzODk6XHRcbiAzOTA6XHRtb2R1bGVfaW5pdChuZnRfc3lucHJveHlfbW9kdWxlX2luaXQpO1xuIDM5MTpcdG1vZHVsZV9leGl0KG5mdF9zeW5wcm94eV9tb2R1bGVfZXhpdCk7XG4gMzkyOlx0XG4gMzkzOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAzOTQ6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O0Zlcm5hbmRvIEZlcm5hbmRleiBcdTAwM2NmZm1hbmNlcmFAcmlzZXVwLm5ldFx1MDAzZVwmIzM0Oyk7XG4gMzk1Olx0TU9EVUxFX0FMSUFTX05GVF9FWFBSKFwmIzM0O3N5bnByb3h5XCYjMzQ7KTtcbiAzOTY6XHRNT0RVTEVfQUxJQVNfTkZUX09CSihORlRfT0JKRUNUX1NZTlBST1hZKTtcbiAzOTc6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7bmZ0YWJsZXMgU1lOUFJPWFkgZXhwcmVzc2lvbiBzdXBwb3J0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MjAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBDaGVja3N1bSBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBzb21ldGhpbmcgbmV0d29yay1yZWxhdGVkLCBsaWtlbHkgaW52b2x2aW5nIE5ldGZpbHRlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYG5mX2NoZWNrc3VtYCBmdW5jdGlvbmFsaXR5LiBJIGtub3cgaXQmIzM5O3MgYSBjb3JlIHBpZWNlLCBhbmQgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIE5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXJlIGV4YWN0bHkgdGhhdCYjMzk7cyBkZWZpbmVkLi4uIEkgYmVsaWV2ZSBpdCYjMzk7cyBpbiBgbmV0L25ldGZpbHRlci91dGlscy5jYCwgb3Igc29tZXdoZXJlIG5lYXJieSBpbiB0aGF0IHN1YnRyZWUuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBmaWxlIGFuZCBsaW5lIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwb2ludCBvZiByZWZlcmVuY2UgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29kZSBhbmQgc3RhcnQgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zdW0xNiBuZl9jaGVja3N1bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oPTM3Mz1zdHJ1Y3QgbmZfcXVldWVfZW50cnk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3NC1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6Mzc1Ol9fc3VtMTYgbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3Ni1cdFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3OC1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6Mzc5Ol9fc3VtMTYgbmZfY2hlY2tzdW1fcGFydGlhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtMzgwLVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM9OTc9c3RhdGljIF9fc3VtMTYgbmZfaXA2X2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG4tLVxubmV0L25ldGZpbHRlci91dGlscy5jLTEyMi1cbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzoxMjM6X19zdW0xNiBuZl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy0xMjQtXHRcdCAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdTggcHJvdG9jb2wsXG4tLVxubmV0L25ldGZpbHRlci91dGlscy5jPTE0MD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jaGVja3N1bSk7XG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTQxLVxubmV0L25ldGZpbHRlci91dGlscy5jOjE0MjpfX3N1bTE2IG5mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTQzLVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGxlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORlRhYmxlcyBTWU5QUk9YWSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhpcyBwYXRjaCBpcyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggdGhlIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIGl0IHNlZW1zLiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgZmlsZSByZXZlYWxzIGEgY2x1c3RlciBvZiByZWxhdGVkIGZ1bmN0aW9uczogYG5mdF9zeW5wcm94eV9ldmFsYCwgYG5mdF9zeW5wcm94eV9vYmpfZXZhbGAsIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGBuZnRfc3lucHJveHlfZXZhbF92NGAgYW5kIGBuZnRfc3lucHJveHlfZXZhbF92NmAuIEl0IGFsc28gaW5jbHVkZXMgYG5mdF9zeW5wcm94eV9kb19pbml0YCB3aGljaCBpcyBpbnRlcmVzdGluZyAtIHByZXN1bWFibHkgc29tZSBzZXR1cC4gU28sIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgYW5kIHRoZSBvdGhlciBgX2V2YWxgIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBmb2N1cyBhcmVhcywgaW5jbHVkaW5nIGBuZnRfc3lucHJveHlfb2JqX2V2YWxgLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCB0byBzZWUgaG93IHRob3NlIGludGVncmF0ZSB3aXRoIHRoZSBicm9hZGVyIE5GVGFibGVzIGZyYW1ld29yay4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHBhdGNoIG1lbnRpb25zIGBORlRfU1lOUFJPWFlgLCBuYXR1cmFsbHksIGFuZCB3ZSBoYXZlIHRoZSB1c3VhbCBzdXNwZWN0czogYE5GX1RBQkxFU2AsIGBORl9UQUJMRVNfSVBWNGAsIGBORl9UQUJMRVNfSVBWNmAsIGBORl9UQUJMRVNfSU5FVGAsIGBORVRGSUxURVJfU1lOUFJPWFlgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIFN0YW5kYXJkIGRlcGVuZGVuY2llcywgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfTkZUX1NZTlBST1hZYC4gTGV0JiMzOTtzIGVuc3VyZSB0aGVzZSBhcmUgY29ycmVjdC4KCkxvb2tpbmcgaW50byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgSSBuZWVkIHRvIGNvbmZpcm0gYE5GVF9TWU5QUk9YWWAmIzM5O3MgZGVwZW5kZW5jaWVzLiBJdCBzaG91bGQgYmUgZGVwZW5kZW50IG9uIGBORl9DT05OVFJBQ0tgIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCBhbmQgcHJlc3VtYWJseSB1bmRlciBhbiBgaWYgTkZfVEFCTEVTYCBibG9jay4gRG91YmxlLWNoZWNraW5nIHRoYXQgaXMgY3J1Y2lhbC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cyBJJiMzOTttIG1pc3NpbmcuIFVuZGVyc3RhbmRpbmcgdGhpcyBLY29uZmlnIHNldHVwIGlzIGtleSB0byBlbnN1cmluZyB0aGlzIGNvbmZpZ3VyYXRpb24gaW50ZWdyYXRlcyBzbW9vdGhseSB3aXRoaW4gdGhlIGxhcmdlciBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDU1PWNvbmZpZyBORl9UQUJMRVNcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3MTppZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzItY29uZmlnIE5GX1RBQkxFU19JTkVUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTYyNT1jb25maWcgTkZUX1NPQ0tFVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXHRzZWxlY3QgTkZfU09DS0VUX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjg6XHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjktXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDM6XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDQtXHRzZWxlY3QgTkZfVFBST1hZX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XHRzZWxlY3QgTkZfVFBST1hZX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDYtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0OT1jb25maWcgTkZUX1NZTlBST1hZXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NjA6aWYgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNjgKCQkJCQkJCW91dHB1dDogMjAxCgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSB2ZXJ5IGNsZWFuIHNsYXRlIGhlcmUg4oCTIHRoZSBlbnZpcm9ubWVudCBzZWVtcyBwcmlzdGluZSwgcmVhZHkgZm9yIGFuYWx5c2lzLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoYXQgbWVhbnMgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGlzIGNoYW5nZSBwcmVzZW50cyBhIHZpYWJsZSBmdXp6aW5nIHRhcmdldC4KCk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuICYjMzQ7TkZfVEFCTEVTLCYjMzQ7ICYjMzQ7TkZUX1NZTlBST1hZLCYjMzQ7ICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VELCYjMzQ7ICYjMzQ7TkZfQ09OTlRSQUNLLCYjMzQ7IGFuZCB0aGUgdmFyaW91cyBORl9UQUJMRVMgc3ViLWNvbmZpZ3VyYXRpb25zIGZvciBJUHY0IGFuZCBJUHY24oCmIFllcywgdGhpcyBjb25maXJtcyBteSBzdXNwaWNpb246IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBOZXRmaWx0ZXIgYW5kIG5mdGFibGVzIGludGVyYWN0aW9uLCBzcGVjaWZpY2FsbHkgU1lOUFJPWFksIGFuZCB0aGUgcHJlc2VuY2Ugb2YgYWR2YW5jZWQgZmVhdHVyZXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhLgoKTm93LCBsb29raW5nIGF0IHRoZSAmIzM0O0ZvY3VzU3ltYm9scywmIzM0OyBJIHNlZSBhIHRhcmdldGVkIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaW5jbHVkZSAmIzM0O25mdF9zeW5wcm94eV9kb19ldmFsLCYjMzQ7ICYjMzQ7bmZ0X3N5bnByb3h5X2V2YWwsJiMzNDsgYW5kIHZhcmlhdGlvbnMgZm9yIElQdjQgYW5kIElQdjYuIFRoaXMgaXMga2V5LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBjb3JlIG9mIHRoZSBTWU5QUk9YWSBldmFsdWF0aW9uIHByb2Nlc3Mgd2l0aGluIG5mdGFibGVzLgoKVGhlIHJlYXNvbmluZyBzZWN0aW9uIGlzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBUaGUgcGF0Y2ggaXMgcmVwbGFjaW5nIGBuZl9pcF9jaGVja3N1bSgpYCB3aXRoIHRoZSBmYW1pbHktYXdhcmUgYG5mX2NoZWNrc3VtKClgIGZ1bmN0aW9uICp3aXRoaW4qIGBuZnRfc3lucHJveHlfZG9fZXZhbCgpYC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZS4gSXQmIzM5O3MgZGlyZWN0bHkgaW1wYWN0aW5nIFRDUCBjaGVja3N1bSB2ZXJpZmljYXRpb24gKnNwZWNpZmljYWxseSogd2l0aGluIHRoZSBOZXRmaWx0ZXIgbmZ0YWJsZXMgU1lOUFJPWFkgbG9naWMuIEFuZCBpdCYjMzk7cyBkb2luZyBzbyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2IHRyYWZmaWMuIEdpdmVuIHRoYXQgU1lOUFJPWFkgaXMgZGVzaWduZWQgdG8gbWl0aWdhdGUgU1lOIGZsb29kcywgYW5kIHRoYXQgbmZ0YWJsZXMgaXMgd2lkZWx5IHVzZWQsIHRoaXMgaXMgYSB2ZXJ5IHJlbGV2YW50LCBwb3RlbnRpYWxseSBoaWdoLWltcGFjdCBtb2RpZmljYXRpb24uIEltcG9ydGFudGx5LCB0aGUgcmVhc29uaW5nIGNsYXJpZmllcyB0aGF0IHRoaXMgY2hhbmdlIGlzIHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aCBzdGFuZGFyZCBuZXR3b3JrIHRvb2xzLgoKQmFzZWQgb24gYWxsIHRoaXMsIEkmIzM5O20gcmVhZHkgdG8gbWFrZSB0aGUgZmluYWwgY2FsbCB0byBgc2V0LXJlc3VsdHNgLiBUaGUgYW5hbHlzaXMgaXMgY29tcGxldGUsIGFuZCB0aGUgaW5mb3JtYXRpb24gaXMgcmVhZHkgZm9yIGNvbnNpZGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZUX1NZTlBST1hZJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9zeW5wcm94eV9kb19ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9vYmpfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NiYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBUQ1AgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGluIG5mdGFibGVzIFNZTlBST1hZIGV4cHJlc3Npb24gZXZhbHVhdGlvbiAobmZ0X3N5bnByb3h5X2RvX2V2YWwpIGJ5IHN3aXRjaGluZyBmcm9tIG5mX2lwX2NoZWNrc3VtIHRvIGZhbWlseS1hd2FyZSBuZl9jaGVja3N1bSwgaW1wYWN0aW5nIElQdjQgYW5kIElQdjYgdHJhZmZpYyBwcm9jZXNzaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgbmV0bGluayBhbmQgbmV0d29yayBwYWNrZXQgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GVF9TWU5QUk9YWSYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lORVQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lQVjYmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lQVjQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfc3lucHJveHlfZG9fZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfb2JqX2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X3N5bnByb3h5X2V2YWxfdjYmIzM0OywKICAgICYjMzQ7bmZ0X3N5bnByb3h5X2V2YWxfdjQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgVENQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBpbiBuZnRhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIGV2YWx1YXRpb24gKG5mdF9zeW5wcm94eV9kb19ldmFsKSBieSBzd2l0Y2hpbmcgZnJvbSBuZl9pcF9jaGVja3N1bSB0byBmYW1pbHktYXdhcmUgbmZfY2hlY2tzdW0sIGltcGFjdGluZyBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgcHJvY2Vzc2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIG5ldGxpbmsgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBhIGhhcmRjb2RlZCBjYWxsIHRvIG5mX2lwX2NoZWNrc3VtKCkgd2l0aCBuZl9jaGVja3N1bSgpIGluIG5mdF9zeW5wcm94eV9kb19ldmFsKCkgc28gdGhhdCB0aGUgcHJvdG9jb2wgZmFtaWx5IChJUHY0IG9yIElQdjYpIGlzIGNvcnJlY3RseSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyB0aGUgVENQIGNoZWNrc3VtLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBwYXRocywgaW5mby1sZWFrIHZlY3RvcnMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcGFja2V0IG1lbW9yeSBhY2Nlc3MgYm91bmRhcmllcyBvciBpbnZhbGlkIHNrYiBvcGVyYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGQyYjAzODE4OTQ0MmE4OWIxNzAzMjU3MDg0YjBmZWFjNjVhODE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMjA6MzU6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jIGIvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYwppbmRleCA5ZWQyODhjOWQxNjg4Li41NTRhOTZhMDAwZjQwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMKQEAgLTExOCw3ICYjNDM7MTE4LDggQEAgc3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2RvX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiwKIAkJcmV0dXJuOwogCX0KIAotCWlmIChuZl9pcF9jaGVja3N1bShza2IsIG5mdF9ob29rKHBrdCksIHRob2ZmLCBJUFBST1RPX1RDUCkpIHsKJiM0MzsJaWYgKG5mX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQLAomIzQzOwkJCW5mdF9wZihwa3QpKSkgewogCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORl9EUk9QOwogCQlyZXR1cm47CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6CgoqKkRpdmluZyBpbnRvIG5mdF9zeW5wcm94eS5jKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBUaGlzIHBhdGNoIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jYCBuZWVkcyBhIGNsb3NlciBsb29rLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgYW5kIHRoZWlyIGNvbnRleHQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgcHVsbCB1cCB0aGUgZmlsZSwgcHJvYmFibHkgdXNpbmcgYHJlYWQtZmlsZWAgdG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCBvciBpZiBJIHdhbnQgc29tZXRoaW5nIG1vcmUgZGlyZWN0LCBJIGNhbiB1c2UgYGdyZXBwZXJgIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjdXJyZW50IHNvdXJjZSBjb2RlLiBUaGUgZ29hbCBpcyB0byBlc3RhYmxpc2ggYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYW5kIGhvdyB0aG9zZSBtb2RpZmljYXRpb25zIHBsYXkgd2l0aGluIHRoZSBleGlzdGluZyBjb2RlLiBNeSBtYWluIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4gMTAxOlx0XHRcdH1cbiAxMDI6XHRcdH1cbiAxMDM6XHR9XG4gMTA0Olx0I2VuZGlmIC8qIENPTkZJR19ORl9UQUJMRVNfSVBWNiovXG4gMTA1Olx0XG4gMTA2Olx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2RvX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcbiAxMDc6XHRcdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gMTA4Olx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4gMTA5Olx0e1xuIDExMDpcdFx0c3RydWN0IHN5bnByb3h5X29wdGlvbnMgb3B0cyA9IHt9O1xuIDExMTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4gMTEyOlx0XHRpbnQgdGhvZmYgPSBuZnRfdGhvZmYocGt0KTtcbiAxMTM6XHRcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcDtcbiAxMTQ6XHRcdHN0cnVjdCB0Y3BoZHIgX3RjcGg7XG4gMTE1Olx0XG4gMTE2Olx0XHRpZiAocGt0LVx1MDAzZXRwcm90ICE9IElQUFJPVE9fVENQKSB7XG4gMTE3Olx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xuIDExODpcdFx0XHRyZXR1cm47XG4gMTE5Olx0XHR9XG4gMTIwOlx0XG4gMTIxOlx0XHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXG4gMTIyOlx0XHRcdFx0bmZ0X3BmKHBrdCkpKSB7XG4gMTIzOlx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiAxMjQ6XHRcdFx0cmV0dXJuO1xuIDEyNTpcdFx0fVxuIDEyNjpcdFxuIDEyNzpcdFx0dGNwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgdGhvZmYsXG4gMTI4Olx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLFxuIDEyOTpcdFx0XHRcdFx0IFx1MDAyNl90Y3BoKTtcbiAxMzA6XHRcdGlmICghdGNwKSB7XG4gMTMxOlx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiAxMzI6XHRcdFx0cmV0dXJuO1xuIDEzMzpcdFx0fVxuIDEzNDpcdFxuIDEzNTpcdFx0aWYgKCFzeW5wcm94eV9wYXJzZV9vcHRpb25zKHNrYiwgdGhvZmYsIHRjcCwgXHUwMDI2b3B0cykpIHtcbiAxMzY6XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIDEzNzpcdFx0XHRyZXR1cm47XG4gMTM4Olx0XHR9XG4gMTM5Olx0XG4gMTQwOlx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuIDE0MTpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gMTQyOlx0XHRcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcdTAwMjZfdGNwaCwgXHUwMDI2b3B0cyk7XG4gMTQzOlx0XHRcdHJldHVybjtcbiAxNDQ6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0lQVjYpXG4gMTQ1Olx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuIDE0NjpcdFx0XHRuZnRfc3lucHJveHlfZXZhbF92Nihwcml2LCByZWdzLCBwa3QsIHRjcCwgXHUwMDI2X3RjcGgsIFx1MDAyNm9wdHMpO1xuIDE0NzpcdFx0XHRyZXR1cm47XG4gMTQ4Olx0I2VuZGlmXG4gMTQ5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDaGVja3N1bSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN3aXRjaGluZyBmcm9tIGBuZl9pcF9jaGVja3N1bWAgdG8gYG5mX2NoZWNrc3VtYCBpbiB0aGUgY29udGV4dCBvZiBUQ1AgY2hlY2tzdW0gY2FsY3VsYXRpb25zIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBpdOKAmXMgcmVwbGFjaW5nIGBuZl9pcF9jaGVja3N1bShza2IsIG5mdF9ob29rKHBrdCksIHRob2ZmLCBJUFBST1RPX1RDUClgIHdpdGggYG5mX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQLCBuZnRfcGYocGt0KSlgLiBUaGlzIGNsZWFybHkgbWVhbnMgdGhlcmUmIzM5O3MgYSBkaWZmZXJlbmNlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBkaWZmZXJlbmNlLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGVhY2ggZnVuY3Rpb246IGBuZl9pcF9jaGVja3N1bWAgdmVyc3VzIGBuZl9jaGVja3N1bWAuIFdoYXQmIzM5O3MgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2U/IFdoYXQmIzM5O3MgdGhlIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWwgaW1wYWN0PyBJcyBpdCBhIHJlZmFjdG9yaW5nLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBtb3JlPyBJcyB0aGlzIHBvdGVudGlhbGx5IGEgZ2VuZXJhbGl6YXRpb24gb3Igb3B0aW1pemF0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBib3RoIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlaXIgdXNhZ2UsIGRlcGVuZGVuY2llcywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgcGljdHVyZSBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgcmF0aW9uYWxlIGZvciB0aGUgY2hhbmdlIGFuZCBoZWxwIG1lIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2lwX2NoZWNrc3VtfG5mX2NoZWNrc3VtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBuYXJyYXRpdmU6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGbG93IENoZWNrc3VtcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgc3RyYWlnaHRmb3J3YXJkOiBJIG5lZWQgYSBjb25jcmV0ZSBkZWZpbml0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvICYjMzQ7bmZfJiMzNDsgaXMgdGhlIGxpa2VseSBwcmVmaXguIFRoaXMgaW1wbGllcyB3ZSYjMzk7cmUgaW4gdGhlIHJlYWxtIG9mIHBhY2tldCBmaWx0ZXJpbmcgb3IgbWFuaXB1bGF0aW9uIGF0IHRoZSBuZXR3b3JrIGxldmVsLiBUaGUgJiMzNDtjaGVja3N1bSYjMzQ7IHBhcnQgaXMsIG9mIGNvdXJzZSwgY3JpdGljYWwgZm9yIGRhdGEgaW50ZWdyaXR5LiBUaGUgcXVlc3Rpb24gbm93IGlzOiB3aGF0JiMzOTtzIHRoZSBzcGVjaWZpYyBkZWZpbml0aW9uIG9mIGBuZl9pcF9jaGVja3N1bWAgYW5kLCBtb3JlIGJyb2FkbHksIGBuZl9jaGVja3N1bWA/IEkgbmVlZCB0byB1bmRlcnN0YW5kICpwcmVjaXNlbHkqIGhvdyB0aGVzZSB0ZXJtcyBhcmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGZ1bmN0aW9ucywgc3RydWN0dXJlcywgb3IgcGVyaGFwcyBtYWNybyBkZWZpbml0aW9ucz8gQXJlIHRoZXNlIGNoZWNrc3VtcyBjYWxjdWxhdGVkIG9yIHZlcmlmaWVkLCBhbmQgYXQgd2hhdCBwb2ludHMgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIG9yIHJlbGV2YW50IGRvY3VtZW50YXRpb24gdG8gcGlucG9pbnQgdGhlIGV4YWN0IG1lYW5pbmcgYW5kIHVzYWdlLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIHdpbGwgYmUgcGFydCBvZiB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrIHRvIGhhbmRsZSBJUCBoZWFkZXIgY2hlY2tzdW1zIGZvciBwYWNrZXRzIHRoYXQgYXJlIGJlaW5nIGZpbHRlcmVkLCBtb2RpZmllZCwgb3IgZm9yd2FyZGVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIGZvciBhbnkgaW4tZGVwdGggbmV0d29yayBhbmFseXNpcyBvciBzZWN1cml0eSB3b3JrIEkmIzM5O20gaW52b2x2ZWQgaW4sIHNvIEkmIzM5O2xsIHdhbnQgdG8gZ2V0IHRoaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2lwX2NoZWNrc3VtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaD0yMT1zdHJ1Y3QgbmZfcXVldWVfZW50cnk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oLTIzLSNpZmRlZiBDT05GSUdfSU5FVFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oOjI0Ol9fc3VtMTYgbmZfaXBfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgtMjUtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oPTI2PWludCBuZl9pcF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKipkc3QsIHN0cnVjdCBmbG93aSAqZmwsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oLTI4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0Lmg6Mjk6c3RhdGljIGlubGluZSBfX3N1bTE2IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oLTMwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TWU5QUk9YWS5jPTEzPXN5bnByb3h5X3RnNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TWU5QUk9YWS5jLTIwLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TWU5QUk9YWS5jOjIxOlx0aWYgKG5mX2lwX2NoZWNrc3VtKHNrYiwgeHRfaG9va251bShwYXIpLCBwYXItXHUwMDNldGhvZmYsIElQUFJPVE9fVENQKSlcbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfU1lOUFJPWFkuYy0yMi1cdFx0cmV0dXJuIE5GX0RST1A7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MTA1PXN0cnVjdCBza19idWZmICpuZl9yZWplY3Rfc2tiX3Y0X3VucmVhY2goc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTE0Mi1cdCAgICBuZl9yZWplY3RfdmVyaWZ5X2NzdW0ob2xkc2tiLCBkYXRhb2ZmLCBwcm90bykgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzoxNDM6XHQgICAgbmZfaXBfY2hlY2tzdW0ob2xkc2tiLCBob29rLCBpcF9oZHJsZW4ob2xkc2tiKSwgcHJvdG8pKVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMTQ0LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0xNzU9bmZfcmVqZWN0X2lwX3RjcGhkcl9nZXQoc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0xOTYtXHQvKiBDaGVjayBjaGVja3N1bSAqL1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MTk3Olx0aWYgKG5mX2lwX2NoZWNrc3VtKG9sZHNrYiwgaG9vaywgaXBfaGRybGVuKG9sZHNrYiksIElQUFJPVE9fVENQKSlcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTE5OC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MzQ4PXZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjUtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozNjY6XHRpZiAobmZfaXBfY2hlY2tzdW0oc2tiX2luLCBob29rLCBkYXRhb2ZmLCBwcm90bykgPT0gMClcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM2Ny1cdFx0aWNtcF9zZW5kKHNrYl9pbiwgSUNNUF9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jPTExND1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9hZGRfaGVscGVyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy0xMTgtICogZm9yIGhpZ2hlci1sYXllciBwcm9jZXNzaW5nIHRoYXQgYXNzdW1lcyBza2ItXHUwMDNlbGVuIGV4Y2x1ZGVzIHBhZGRpbmdcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjExOTogKiAoc3VjaCBhcyBuZl9pcF9jaGVja3N1bSkuIFRoZSBjYWxsZXIgbmVlZHMgdG8gcHVsbCB0aGUgc2tiIHRvIHRoZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtMTIwLSAqIG5ldHdvcmsgaGVhZGVyLCBhbmQgZW5zdXJlIGlwX2hkci9pcHY2X2hkciBwb2ludHMgdG8gdmFsaWQgZGF0YS5cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmM9MjA0PWludCBuZl9jb25udHJhY2tfaWNtcHY0X2Vycm9yKHN0cnVjdCBuZl9jb25uICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0yMjEtXHQgICAgc3RhdGUtXHUwMDNlaG9vayA9PSBORl9JTkVUX1BSRV9ST1VUSU5HIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jOjIyMjpcdCAgICBuZl9pcF9jaGVja3N1bShza2IsIHN0YXRlLVx1MDAzZWhvb2ssIGRhdGFvZmYsIElQUFJPVE9fSUNNUCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0yMjMtXHRcdGljbXBfZXJyb3JfbG9nKHNrYiwgc3RhdGUsIFwmIzM0O2JhZCBodyBpY21wIGNoZWNrc3VtXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTQ5Nz1pbnQgbmZfbmF0X2ljbXBfcmVwbHlfdHJhbnNsYXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jLTUxNS1cdFx0cmV0dXJuIDA7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjUxNjpcdGlmIChuZl9pcF9jaGVja3N1bShza2IsIGhvb2tudW0sIGhkcmxlbiwgSVBQUk9UT19JQ01QKSlcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtNTE3LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtOS0jaWZkZWYgQ09ORklHX0lORVRcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzoxMDpfX3N1bTE2IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxubmV0L25ldGZpbHRlci91dGlscy5jLTExLVx0XHQgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHU4IHByb3RvY29sKVxuLS1cbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy0zOS19XG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM6NDA6RVhQT1JUX1NZTUJPTChuZl9pcF9jaGVja3N1bSk7XG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtNDEtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtNDItXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM6NDM6c3RhdGljIF9fc3VtMTYgbmZfaXBfY2hlY2tzdW1fcGFydGlhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy00NC1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgbGVuLFxuLS1cbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy01Mi1cdFx0aWYgKGxlbiA9PSBza2ItXHUwMDNlbGVuIC0gZGF0YW9mZilcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzo1MzpcdFx0XHRyZXR1cm4gbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7XG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtNTQtXHRcdGZhbGx0aHJvdWdoO1xuLS1cbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYz0xMjM9X19zdW0xNiBuZl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcbi0tXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTMwLVx0Y2FzZSBBRl9JTkVUOlxubmV0L25ldGZpbHRlci91dGlscy5jOjEzMTpcdFx0Y3N1bSA9IG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9vaywgZGF0YW9mZiwgcHJvdG9jb2wpO1xubmV0L25ldGZpbHRlci91dGlscy5jLTEzMi1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci91dGlscy5jPTE0Mj1fX3N1bTE2IG5mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG4tLVxubmV0L25ldGZpbHRlci91dGlscy5jLTE0OS1cdGNhc2UgQUZfSU5FVDpcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzoxNTA6XHRcdGNzdW0gPSBuZl9pcF9jaGVja3N1bV9wYXJ0aWFsKHNrYiwgaG9vaywgZGF0YW9mZiwgbGVuLFxubmV0L25ldGZpbHRlci91dGlscy5jLTE1MS1cdFx0XHRcdFx0ICAgICAgcHJvdG9jb2wpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbmV0L25ldGZpbHRlci91dGlscy5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbmV0L25ldGZpbHRlci91dGlscy5jYCByaWdodCBub3cuIEkgaGF2ZSBhIGh1bmNoIGFib3V0IGEgcG90ZW50aWFsIGlzc3VlLCBhbmQgSSBiZWxpZXZlIHRoZSBhbnN3ZXIgbGllcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSAxMjMuIFRoYXQgcGFydGljdWxhciByZWdpb24gb2Z0ZW4gZGVhbHMgd2l0aCBbICppbnNlcnQgbXkgc3BlY2lmaWMgYXJlYSBvZiBleHBlcnRpc2UgcmVsYXRlZCB0byBuZXRmaWx0ZXIgaGVyZSAtIGUuZy4sIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgY29ubnRyYWNrIG1hbmlwdWxhdGlvbiwgZXRjLiogXSwgYW5kIEkmIzM5O20gaG9waW5nIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBjb2RlIGZvciB0aGUgcHJvYmxlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUgdGhlcmUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBpc3N1ZSBJJiMzOTttIGludmVzdGlnYXRpbmcuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgdG8gYSBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3V0aWxzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdFx0XHRcdFx0XHRcdFx0IHByb3RvY29sLFxuIDExNjpcdFx0XHRcdFx0XHRcdFx0IGNzdW1fc3ViKDAsIGhzdW0pKSk7XG4gMTE3Olx0XHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuIDExODpcdFx0XHRyZXR1cm4gX19za2JfY2hlY2tzdW1fY29tcGxldGVfaGVhZChza2IsIGRhdGFvZmYgJiM0MzsgbGVuKTtcbiAxMTk6XHRcdH1cbiAxMjA6XHRcdHJldHVybiBjc3VtO1xuIDEyMTpcdH07XG4gMTIyOlx0XG4gMTIzOlx0X19zdW0xNiBuZl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcbiAxMjQ6XHRcdFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1OCBwcm90b2NvbCxcbiAxMjU6XHRcdFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbiAxMjY6XHR7XG4gMTI3Olx0XHRfX3N1bTE2IGNzdW0gPSAwO1xuIDEyODpcdFxuIDEyOTpcdFx0c3dpdGNoIChmYW1pbHkpIHtcbiAxMzA6XHRcdGNhc2UgQUZfSU5FVDpcbiAxMzE6XHRcdFx0Y3N1bSA9IG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9vaywgZGF0YW9mZiwgcHJvdG9jb2wpO1xuIDEzMjpcdFx0XHRicmVhaztcbiAxMzM6XHRcdGNhc2UgQUZfSU5FVDY6XG4gMTM0Olx0XHRcdGNzdW0gPSBuZl9pcDZfY2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7XG4gMTM1Olx0XHRcdGJyZWFrO1xuIDEzNjpcdFx0fVxuIDEzNzpcdFxuIDEzODpcdFx0cmV0dXJuIGNzdW07XG4gMTM5Olx0fVxuIDE0MDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2NoZWNrc3VtKTtcbiAxNDE6XHRcbiAxNDI6XHRfX3N1bTE2IG5mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG4gMTQzOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgbGVuLFxuIDE0NDpcdFx0XHRcdCAgICB1OCBwcm90b2NvbCwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIDE0NTpcdHtcbiAxNDY6XHRcdF9fc3VtMTYgY3N1bSA9IDA7XG4gMTQ3Olx0XG4gMTQ4Olx0XHRzd2l0Y2ggKGZhbWlseSkge1xuIDE0OTpcdFx0Y2FzZSBBRl9JTkVUOlxuIDE1MDpcdFx0XHRjc3VtID0gbmZfaXBfY2hlY2tzdW1fcGFydGlhbChza2IsIGhvb2ssIGRhdGFvZmYsIGxlbixcbiAxNTE6XHRcdFx0XHRcdFx0ICAgICAgcHJvdG9jb2wpO1xuIDE1MjpcdFx0XHRicmVhaztcbiAxNTM6XHRcdGNhc2UgQUZfSU5FVDY6XG4gMTU0Olx0XHRcdGNzdW0gPSBuZl9pcDZfY2hlY2tzdW1fcGFydGlhbChza2IsIGhvb2ssIGRhdGFvZmYsIGxlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ0NAoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiA1MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBgbmZ0X3N5bnByb3h5X2RvX2V2YWxgIHdhcyBwcmV2aW91c2x5IGNhbGxpbmcgYG5mX2lwX2NoZWNrc3VtKClgIHVuY29uZGl0aW9uYWxseS4gVGhhdCYjMzk7cyBhIHByb2JsZW0sIGJlY2F1c2Ugd2hpbGUgYG5mdF9zeW5wcm94eV9kb19ldmFsYCAqaGFuZGxlcyogYm90aCBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgKEkgY2FuIHNlZSB0aGF0IGZyb20gdGhlIHByb3RvY29sIHN3aXRjaCBhbmQgdGhlIEV0aGVybmV0IGhlYWRlciBjaGVja3MpLCBgbmZfaXBfY2hlY2tzdW0oKWAgYXNzdW1lcyBJUHY0LiBTbywgd2l0aCBJUHY2LCBpdCB3b3VsZCBlaXRoZXIgZmFpbCBvdXRyaWdodCBvciBnaXZlIGEgYmFkIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgoKVGhlIGZpeCwgd2hpY2ggaXMgYSBnb29kIG9uZSwgcmVwbGFjZXMgdGhlIGhhcmRjb2RlZCBgbmZfaXBfY2hlY2tzdW0oKWAgY2FsbCB3aXRoIGEgbW9yZSBnZW5lcmljIGBuZl9jaGVja3N1bSgpYC4gVGhpcyBjb3JyZWN0bHkgY2FsbHMgYG5mX2lwX2NoZWNrc3VtKClgIGZvciBJUHY0IGFuZCBgbmZfaXA2X2NoZWNrc3VtKClgIGZvciBJUHY2LCBkZXBlbmRpbmcgb24gdGhlIHBhY2tldCYjMzk7cyBhZGRyZXNzIGZhbWlseSwgZGV0ZXJtaW5lZCBieSBgbmZ0X3BmKHBrdClgLiBNdWNoIGJldHRlci4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiDigJMgZG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXM/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6CgoxLiAgKipObyB1c2VyLXNwYWNlIGNvcHk6KiogR29vZC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRoYXQgd2F5LgoyLiAgKipObyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMvZmllbGRzOioqICBFeGNlbGxlbnQuICBUaGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBub3IgZG9lcyBpdCBhY2Nlc3MgYW55LiBUaGF0JiMzOTtzIGEgYmlnIHJlbGllZi4KMy4gICoqTm8gYnVmZmVyL3N0cnVjdCBjaGFuZ2VzOioqIFdlJiMzOTtyZSBub3QgY2hhbmdpbmcgYW55IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIHNvIHdlIGNhbiBpZ25vcmUgdGhhdCBwYXJ0Lgo0LiAgKipLTVNBTiBpbXBsaWNhdGlvbnM6KiogT2theSwgaGVyZSYjMzk7cyB3aGVyZSB3ZSByZWFsbHkgbmVlZCB0byBiZSBjYXJlZnVsLiBgbmZfY2hlY2tzdW1gIHVsdGltYXRlbHkgY2FsbHMgYG5mX2lwX2NoZWNrc3VtYCBvciBgbmZfaXA2X2NoZWNrc3VtYCwgYW5kIHRob3NlIGZ1bmN0aW9ucyBhcmUgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgZGF0YSAqaW5zaWRlKiB0aGUgYHNrYmAuIElmIHRoZXJlIGFyZSBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcywgS0FTQU4gKG9yIHRoZSByZWxldmFudCBza2IgaGVscGVycykgd2lsbCBjYXRjaCBpdC4gVGhlIGNoYW5nZSBpc24mIzM5O3QgKmludHJvZHVjaW5nKiBhbnkgbmV3IG1lbW9yeSByZWdpb25zLCBhbmQgd2UgYXJlIG5vdCBsZWFraW5nIGFueXRoaW5nIHRvIHVzZXIgc3BhY2UuCgpUaGVyZWZvcmUsIGJlY2F1c2Ugd2UgYXJlIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IG1lbW9yeSBpc3N1ZXMsIGl0JiMzOTtzIHNhZmUgdG8gc2F5IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBUaGlzIGlzbiYjMzk7dCBhIHNpdHVhdGlvbiB3aGVyZSBhIGRlZGljYXRlZCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciBydW4gaXMgd2FycmFudGVkLiBLQVNBTiB3aWxsIGhhbmRsZSBpdC4KCk5vdywgdG8gZG9jdW1lbnQgdGhpcyByZWFzb25pbmcgcHJvcGVybHksIGxldCYjMzk7cyBjbGVhcmx5IGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTjoKCiogICAqKktBU0FOOioqIFRoaXMgcGF0Y2ggZml4ZXMgYSBwcm90b2NvbCBmYW1pbHkgaGFuZGxpbmcgaXNzdWUgZm9yIFRDUCBjaGVja3N1bSB2ZXJpZmljYXRpb24uIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBjb3JyZWN0bHkgd2l0aCB0aGUgc2tiJiMzOTtzIHBhY2tldCBwYXJzaW5nLCBhbmQgYW55IHBhY2tldCBib3VuZGFyaWVzIGlzc3VlcyBhcmUgaGFuZGxlZCBieSBLQVNBTi4KKiAgICoqS01TQU46KiogIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMvZmllbGRzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLgoKUmlnaHQsIHRoYXQgc2VlbXMgY29tcHJlaGVuc2l2ZS4gTm93LCBJIHNob3VsZCBiZSBhYmxlIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgY2FsbCB0byBuZl9pcF9jaGVja3N1bSgpIHdpdGggbmZfY2hlY2tzdW0oKSBpbiBuZnRfc3lucHJveHlfZG9fZXZhbCgpIHNvIHRoYXQgdGhlIHByb3RvY29sIGZhbWlseSAoSVB2NCBvciBJUHY2KSBpcyBjb3JyZWN0bHkgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIFRDUCBjaGVja3N1bS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIGluZm8tbGVhayB2ZWN0b3JzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBhY2tldCBtZW1vcnkgYWNjZXNzIGJvdW5kYXJpZXMgb3IgaW52YWxpZCBza2Igb3BlcmF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgY2FsbCB0byBuZl9pcF9jaGVja3N1bSgpIHdpdGggbmZfY2hlY2tzdW0oKSBpbiBuZnRfc3lucHJveHlfZG9fZXZhbCgpIHNvIHRoYXQgdGhlIHByb3RvY29sIGZhbWlseSAoSVB2NCBvciBJUHY2KSBpcyBjb3JyZWN0bHkgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIFRDUCBjaGVja3N1bS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIGluZm8tbGVhayB2ZWN0b3JzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBhY2tldCBtZW1vcnkgYWNjZXNzIGJvdW5kYXJpZXMgb3IgaW52YWxpZCBza2Igb3BlcmF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNToyNS4wOTY5ODYwMjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODkyODI4Mzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9TWU5QUk9YWVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjZcIixcbiAgICBcIk5GX1RBQkxFU19JUFY0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3N5bnByb3h5X2RvX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsXCIsXG4gICAgXCJuZnRfc3lucHJveHlfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y2XCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgY2FsbCB0byBuZl9pcF9jaGVja3N1bSgpIHdpdGggbmZfY2hlY2tzdW0oKSBpbiBuZnRfc3lucHJveHlfZG9fZXZhbCgpIHNvIHRoYXQgdGhlIHByb3RvY29sIGZhbWlseSAoSVB2NCBvciBJUHY2KSBpcyBjb3JyZWN0bHkgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIFRDUCBjaGVja3N1bS5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBwYXRocywgaW5mby1sZWFrIHZlY3RvcnMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcGFja2V0IG1lbW9yeSBhY2Nlc3MgYm91bmRhcmllcyBvciBpbnZhbGlkIHNrYiBvcGVyYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgVENQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBpbiBuZnRhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIGV2YWx1YXRpb24gKG5mdF9zeW5wcm94eV9kb19ldmFsKSBieSBzd2l0Y2hpbmcgZnJvbSBuZl9pcF9jaGVja3N1bSB0byBmYW1pbHktYXdhcmUgbmZfY2hlY2tzdW0sIGltcGFjdGluZyBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgcHJvY2Vzc2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIG5ldGxpbmsgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjI1LjA5Njk5MDYzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MDU4ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRkMmIwMzgxODk0NDJhODliMTcwMzI1NzA4NGIwZmVhYzY1YTgxOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDozNToyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jIGIvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xcbmluZGV4IDllZDI4OGM5ZDE2ODguLjU1NGE5NmEwMDBmNDAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcXG5AQCAtMTE4LDcgKzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG5mX2lwX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQKSkge1xcbitcXHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXFxuK1xcdFxcdFxcdG5mdF9wZihwa3QpKSkge1xcbiBcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6MjUuNjAxODU4ODMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODgxMzQ4MDM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9TWU5QUk9YWVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjZcIixcbiAgICBcIk5GX1RBQkxFU19JUFY0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3N5bnByb3h5X2RvX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsXCIsXG4gICAgXCJuZnRfc3lucHJveHlfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y2XCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFRDUCBjaGVja3N1bSB2ZXJpZmljYXRpb24gaW4gbmZ0YWJsZXMgU1lOUFJPWFkgZXhwcmVzc2lvbiBldmFsdWF0aW9uIChuZnRfc3lucHJveHlfZG9fZXZhbCkgYnkgc3dpdGNoaW5nIGZyb20gbmZfaXBfY2hlY2tzdW0gdG8gZmFtaWx5LWF3YXJlIG5mX2NoZWNrc3VtLCBpbXBhY3RpbmcgSVB2NCBhbmQgSVB2NiB0cmFmZmljIHByb2Nlc3NpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBuZXRsaW5rIGFuZCBuZXR3b3JrIHBhY2tldCBpbmplY3Rpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0ZDJiMDM4MTg5NDQyYTg5YjE3MDMyNTcwODRiMGZlYWM2NWE4MThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDozNToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXG5pbmRleCA5ZWQyODhjOWQxNjg4Li41NTRhOTZhMDAwZjQwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xuQEAgLTExOCw3ICsxMTgsOCBAQCBzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZG9fZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobmZfaXBfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1ApKSB7XG4rXHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXG4rXHRcdFx0bmZ0X3BmKHBrdCkpKSB7XG4gXHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6MjUuNjAxODYwMTMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEyMjc4MDQ3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeW5wcm94eSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY2AuIFNwZWNpZmljYWxseSwgd2UncmUgbG9va2luZyBhdCB0aGUgYG5mdF9zeW5wcm94eV9kb19ldmFsYCBmdW5jdGlvbi4gVGhlIGRpZmYgaGlnaGxpZ2h0cyBhIGNoYW5nZSBpbiB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb24uIFByZXZpb3VzbHksIGl0IHVzZWQgYG5mX2lwX2NoZWNrc3VtYCwgYW5kIG5vdyBpdCdzIHN3YXBwZWQgb3V0IGZvciBgbmZfY2hlY2tzdW1gLiBBbmQsIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhbiBhZGRpdGlvbiBvZiBgbmZ0X3BmKHBrdClgIHRvIHRoZSBhcmd1bWVudHMgb2YgYG5mX2NoZWNrc3VtYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byBJUHY2IHN1cHBvcnQgb3IgYSBtb3JlIGdlbmVyaWMgY2hlY2tzdW1taW5nIGltcGxlbWVudGF0aW9uLiBUaGUgYG5mdF9wZihwa3QpYCBzdWdnZXN0cyB3ZSdyZSBub3cgYWNjb3VudGluZyBmb3IgdGhlIHBhY2tldCBmYW1pbHkuICBUaGUgb2xkIGBuZl9pcF9jaGVja3N1bWAgd2FzIHByZXR0eSBzcGVjaWZpYywgc28gdGhpcyBpcyBwcm9iYWJseSBhIGdvb2QgbW92ZSBmb3IgYnJvYWRlciBjb21wYXRpYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMsIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbmZfY2hlY2tzdW1gLCBgbmZ0X3BmYCwgYW5kIG1heWJlIGV2ZW4gdGhlIGNvbnRleHQgb2YgYG5mdF9ob29rYCB0byBzZWUgaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZS4gSSB3aWxsIHVzZSBgcmVhZC1maWxlYCBhbmQvb3IgYGdyZXBwZXJgIHRvIHB1bGwgdGhvc2UgZGVmaW5pdGlvbnMsIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZm9yIGEgbW9yZSBkZXRhaWxlZCBhbmFseXNpcy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgaW4gdGhlIGZpcnN0IHBsYWNlOiB3aGF0J3MgdGhlIG1vdGl2YXRpb24/IFdoYXQgaXNzdWUgaXMgaXQgc29sdmluZyBvciB3aGF0IGZlYXR1cmUgaXMgaXQgZW5hYmxpbmc/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTozNi44Mjk2NjY3ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbiAxMDE6XFx0XFx0XFx0fVxcbiAxMDI6XFx0XFx0fVxcbiAxMDM6XFx0fVxcbiAxMDQ6XFx0I2VuZGlmIC8qIENPTkZJR19ORl9UQUJMRVNfSVBWNiovXFxuIDEwNTpcXHRcXG4gMTA2OlxcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAxMDg6XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbiAxMDk6XFx0e1xcbiAxMTA6XFx0XFx0c3RydWN0IHN5bnByb3h5X29wdGlvbnMgb3B0cyA9IHt9O1xcbiAxMTE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbiAxMTI6XFx0XFx0aW50IHRob2ZmID0gbmZ0X3Rob2ZmKHBrdCk7XFxuIDExMzpcXHRcXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3A7XFxuIDExNDpcXHRcXHRzdHJ1Y3QgdGNwaGRyIF90Y3BoO1xcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRpZiAocGt0LVxcdTAwM2V0cHJvdCAhPSBJUFBST1RPX1RDUCkge1xcbiAxMTc6XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xcbiAxMTg6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMTk6XFx0XFx0fVxcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXFxuIDEyMjpcXHRcXHRcXHRcXHRuZnRfcGYocGt0KSkpIHtcXG4gMTIzOlxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuIDEyNDpcXHRcXHRcXHRyZXR1cm47XFxuIDEyNTpcXHRcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHRjcCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHRob2ZmLFxcbiAxMjg6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgdGNwaGRyKSxcXG4gMTI5OlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2X3RjcGgpO1xcbiAxMzA6XFx0XFx0aWYgKCF0Y3ApIHtcXG4gMTMxOlxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuIDEzMjpcXHRcXHRcXHRyZXR1cm47XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmICghc3lucHJveHlfcGFyc2Vfb3B0aW9ucyhza2IsIHRob2ZmLCB0Y3AsIFxcdTAwMjZvcHRzKSkge1xcbiAxMzY6XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG4gMTM3OlxcdFxcdFxcdHJldHVybjtcXG4gMTM4OlxcdFxcdH1cXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIDE0MTpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gMTQyOlxcdFxcdFxcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcXHUwMDI2X3RjcGgsIFxcdTAwMjZvcHRzKTtcXG4gMTQzOlxcdFxcdFxcdHJldHVybjtcXG4gMTQ0OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfSVBWNilcXG4gMTQ1OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuIDE0NjpcXHRcXHRcXHRuZnRfc3lucHJveHlfZXZhbF92Nihwcml2LCByZWdzLCBwa3QsIHRjcCwgXFx1MDAyNl90Y3BoLCBcXHUwMDI2b3B0cyk7XFxuIDE0NzpcXHRcXHRcXHRyZXR1cm47XFxuIDE0ODpcXHQjZW5kaWZcXG4gMTQ5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6MzYuODI5NzM2Nzk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzMjM3NzQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBzdGFydCB0byBpbnZlc3RpZ2F0ZSB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNgIGZpbGUgYW5kIGl0cyBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uLlxuXG4qKkluaXRpYWwgRXhwbG9yYXRpb24gb2YgbmZ0X3N5bnByb3h5LmMgYW5kIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYG5mdF9zeW5wcm94eWAgbW9kdWxlLiBGaXJzdCwgSSB3YW50IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiB0aGUgZW52aXJvbm1lbnQgdGhhdCB0aGlzIG1vZHVsZSBpcyBsaXZpbmcgaW4uIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNgIGRpcmVjdGx5LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYnkgZXhhbWluaW5nIHRoZSBzb3VyY2UgY29kZSwgSSBjYW4gcGljayB1cCBvbiB0aGUgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbnMgYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJmYWNlcyB0aGF0IGFyZSBleHBvc2VkIGZvciB1c2UgZWxzZXdoZXJlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIE5ldGZpbHRlciBmcmFtZXdvcmssIGFzIHdlbGwgYXMgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgaW4gZ2VuZXJhbC5cblxuVGhlbiwgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBjb2RlLCBJJ2xsIGRlZmluaXRlbHkgbmVlZCB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIHJlbGV2YW50IHN5bWJvbHMgYW5kIGNvbmZpZ3MgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmVzIGRlcGVuZCBvbiB0aGlzIG1vZHVsZSBhbmQgaG93IGl0IGlzIGJyb3VnaHQgaW50byB0aGUgYnVpbGQuIFRoYXQncyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgaG93IHNvbWV0aGluZyBmaXRzIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTE2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTo0MC4zNjIxMTY2NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaXAuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3lucHJveHkuaFxcdTAwM2VcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5LmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX3N5bnByb3h5LmhcXHUwMDNlXFxuICAxMzpcXHRcXG4gIDE0OlxcdHN0cnVjdCBuZnRfc3lucHJveHkge1xcbiAgMTU6XFx0XFx0c3RydWN0IG5mX3N5bnByb3h5X2luZm9cXHRpbmZvO1xcbiAgMTY6XFx0fTtcXG4gIDE3OlxcdFxcbiAgMTg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9zeW5wcm94eV9wb2xpY3lbTkZUQV9TWU5QUk9YWV9NQVggKyAxXSA9IHtcXG4gIDE5OlxcdFxcdFtORlRBX1NZTlBST1hZX01TU11cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXFxuICAyMDpcXHRcXHRbTkZUQV9TWU5QUk9YWV9XU0NBTEVdXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIFRDUF9NQVhfV1NDQUxFKSxcXG4gIDIxOlxcdFxcdFtORlRBX1NZTlBST1hZX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9TWU5QUk9YWV9PUFRfTUFTSyksXFxuICAyMjpcXHR9O1xcbiAgMjM6XFx0XFxuICAyNDpcXHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfdGNwX29wdGlvbnMoc3RydWN0IHN5bnByb3h5X29wdGlvbnMgKm9wdHMsXFxuICAyNTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcCxcXG4gIDI2OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCxcXG4gIDI3OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5mX3N5bnByb3h5X2luZm8gKmluZm8pXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHR0aGlzX2NwdV9pbmMoc25ldC1cXHUwMDNlc3RhdHMtXFx1MDAzZXN5bl9yZWNlaXZlZCk7XFxuICAzMDpcXHRcXHRpZiAodGNwLVxcdTAwM2VlY2UgXFx1MDAyNlxcdTAwMjYgdGNwLVxcdTAwM2Vjd3IpXFxuICAzMTpcXHRcXHRcXHRvcHRzLVxcdTAwM2VvcHRpb25zIHw9IE5GX1NZTlBST1hZX09QVF9FQ047XFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdG9wdHMtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNj0gaW5mby1cXHUwMDNlb3B0aW9ucztcXG4gIDM0OlxcdFxcdG9wdHMtXFx1MDAzZW1zc19lbmNvZGUgPSBvcHRzLVxcdTAwM2Vtc3Nfb3B0aW9uO1xcbiAgMzU6XFx0XFx0b3B0cy1cXHUwMDNlbXNzX29wdGlvbiA9IGluZm8tXFx1MDAzZW1zcztcXG4gIDM2OlxcdFxcdGlmIChvcHRzLVxcdTAwM2VvcHRpb25zIFxcdTAwMjYgTkZfU1lOUFJPWFlfT1BUX1RJTUVTVEFNUClcXG4gIDM3OlxcdFxcdFxcdHN5bnByb3h5X2luaXRfdGltZXN0YW1wX2Nvb2tpZShpbmZvLCBvcHRzKTtcXG4gIDM4OlxcdFxcdGVsc2VcXG4gIDM5OlxcdFxcdFxcdG9wdHMtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNj0gfihORl9TWU5QUk9YWV9PUFRfV1NDQUxFIHxcXG4gIDQwOlxcdFxcdFxcdFxcdFxcdCAgIE5GX1NZTlBST1hZX09QVF9TQUNLX1BFUk0gfFxcbiAgNDE6XFx0XFx0XFx0XFx0XFx0ICAgTkZfU1lOUFJPWFlfT1BUX0VDTik7XFxuICA0MjpcXHR9XFxuICA0MzpcXHRcXG4gIDQ0OlxcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y0KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuICA0NTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAgNDY6XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiAgNDc6XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcCxcXG4gIDQ4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGNwaGRyICpfdGNwaCxcXG4gIDQ5OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc3lucHJveHlfb3B0aW9ucyAqb3B0cylcXG4gIDUwOlxcdHtcXG4gIDUxOlxcdFxcdHN0cnVjdCBuZl9zeW5wcm94eV9pbmZvIGluZm8gPSBSRUFEX09OQ0UocHJpdi1cXHUwMDNlaW5mbyk7XFxuICA1MjpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBuZnRfbmV0KHBrdCk7XFxuICA1MzpcXHRcXHRzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0ID0gc3lucHJveHlfcGVybmV0KG5ldCk7XFxuICA1NDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0LVxcdTAwM2Vza2I7XFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdGlmICh0Y3AtXFx1MDAzZXN5bikge1xcbiAgNTc6XFx0XFx0XFx0LyogSW5pdGlhbCBTWU4gZnJvbSBjbGllbnQgKi9cXG4gIDU4OlxcdFxcdFxcdG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsIFxcdTAwMjZpbmZvKTtcXG4gIDU5OlxcdFxcdFxcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFjayhuZXQsIHNrYiwgdGNwLCBvcHRzKTtcXG4gIDYwOlxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuICA2MTpcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XFxuICA2MjpcXHRcXHR9IGVsc2UgaWYgKHRjcC1cXHUwMDNlYWNrKSB7XFxuICA2MzpcXHRcXHRcXHQvKiBBQ0sgZnJvbSBjbGllbnQgKi9cXG4gIDY0OlxcdFxcdFxcdGlmIChzeW5wcm94eV9yZWN2X2NsaWVudF9hY2sobmV0LCBza2IsIHRjcCwgb3B0cyxcXG4gIDY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgbnRvaGwodGNwLVxcdTAwM2VzZXEpKSkge1xcbiAgNjY6XFx0XFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gIDY3OlxcdFxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX1NUT0xFTjtcXG4gIDY4OlxcdFxcdFxcdH0gZWxzZSB7XFxuICA2OTpcXHRcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbiAgNzA6XFx0XFx0XFx0fVxcbiAgNzE6XFx0XFx0fVxcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0lQVjYpXFxuICA3NTpcXHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92Nihjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxcbiAgNzY6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4gIDc3OlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gIDc4OlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3AsXFxuICA3OTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRjcGhkciAqX3RjcGgsXFxuICA4MDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHN5bnByb3h5X29wdGlvbnMgKm9wdHMpXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRzdHJ1Y3QgbmZfc3lucHJveHlfaW5mbyBpbmZvID0gUkVBRF9PTkNFKHByaXYtXFx1MDAzZWluZm8pO1xcbiAgODM6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gbmZ0X25ldChwa3QpO1xcbiAgODQ6XFx0XFx0c3RydWN0IHN5bnByb3h5X25ldCAqc25ldCA9IHN5bnByb3h5X3Blcm5ldChuZXQpO1xcbiAgODU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRpZiAodGNwLVxcdTAwM2VzeW4pIHtcXG4gIDg4OlxcdFxcdFxcdC8qIEluaXRpYWwgU1lOIGZyb20gY2xpZW50ICovXFxuICA4OTpcXHRcXHRcXHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcXHUwMDI2aW5mbyk7XFxuICA5MDpcXHRcXHRcXHRzeW5wcm94eV9zZW5kX2NsaWVudF9zeW5hY2tfaXB2NihuZXQsIHNrYiwgdGNwLCBvcHRzKTtcXG4gIDkxOlxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuICA5MjpcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XFxuICA5MzpcXHRcXHR9IGVsc2UgaWYgKHRjcC1cXHUwMDNlYWNrKSB7XFxuICA5NDpcXHRcXHRcXHQvKiBBQ0sgZnJvbSBjbGllbnQgKi9cXG4gIDk1OlxcdFxcdFxcdGlmIChzeW5wcm94eV9yZWN2X2NsaWVudF9hY2tfaXB2NihuZXQsIHNrYiwgdGNwLCBvcHRzLFxcbiAgOTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBudG9obCh0Y3AtXFx1MDAzZXNlcSkpKSB7XFxuICA5NzpcXHRcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiAgOTg6XFx0XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfU1RPTEVOO1xcbiAgOTk6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTAwOlxcdFxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjQwLjM2MjIwNzkyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzM2MTAxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0OlxuXG4qKkFuYWx5emluZyBgbmZ0X3N5bnByb3h5LmNgIEZ1cnRoZXIqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkOiBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgKmFjdHVhbGx5KiBleGFtaW5lIHRoZSBjb2RlIGluIGBuZnRfc3lucHJveHkuY2AuIE5vIG1vcmUgdGhlb3JldGljYWwgZGlzY3Vzc2lvbnMsIG5vIG1vcmUgbG9va2luZyBhdCB0aGUgcHJvYmxlbSBmcm9tIHRoZSBvdXRzaWRlIOKAkyB0aW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgKnJlYWxseSogdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5OiBob3cgaXQncyAqYWN0dWFsbHkqIGRvbmUuIFdoZXJlIGFyZSB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzPyBXaGF0J3MgdGhlIGZsb3cgY29udHJvbD8gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbiBjYWxscz8gV2hhdCBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZSBwcmVzZW50PyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyBhY2NvdW50ZWQgZm9yPyBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBwcmFjdGljYWwgZXhlY3V0aW9uIG9mIHRoZSBzeW5wcm94eSBmdW5jdGlvbmFsaXR5LiBJJ20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIHRoZSBhc3N1bXB0aW9ucyBiYWtlZCBpbnRvIHRoZSBkZXNpZ24sIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIHRoYXQgbWlnaHQgcmVxdWlyZSBjbG9zZXIgc2NydXRpbnkgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBmdXR1cmUgbWFpbnRhaW5hYmlsaXR5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjEwNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6NDMuMzM1ODIwNTkxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0c3RhdGljIGludCBuZnRfc3lucHJveHlfZG9faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiAxNTQ6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXFxuIDE1NTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2KVxcbiAxNTY6XFx0e1xcbiAxNTc6XFx0XFx0c3RydWN0IHN5bnByb3h5X25ldCAqc25ldCA9IHN5bnByb3h5X3Blcm5ldChjdHgtXFx1MDAzZW5ldCk7XFxuIDE1ODpcXHRcXHR1MzIgZmxhZ3M7XFxuIDE1OTpcXHRcXHRpbnQgZXJyO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRpZiAodGJbTkZUQV9TWU5QUk9YWV9NU1NdKVxcbiAxNjI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaW5mby5tc3MgPSBudG9ocyhubGFfZ2V0X2JlMTYodGJbTkZUQV9TWU5QUk9YWV9NU1NdKSk7XFxuIDE2MzpcXHRcXHRpZiAodGJbTkZUQV9TWU5QUk9YWV9XU0NBTEVdKVxcbiAxNjQ6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaW5mby53c2NhbGUgPSBubGFfZ2V0X3U4KHRiW05GVEFfU1lOUFJPWFlfV1NDQUxFXSk7XFxuIDE2NTpcXHRcXHRpZiAodGJbTkZUQV9TWU5QUk9YWV9GTEFHU10pIHtcXG4gMTY2OlxcdFxcdFxcdGZsYWdzID0gbnRvaGwobmxhX2dldF9iZTMyKHRiW05GVEFfU1lOUFJPWFlfRkxBR1NdKSk7XFxuIDE2NzpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiB+TkZfU1lOUFJPWFlfT1BUX01BU0spXFxuIDE2ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDE2OTpcXHRcXHRcXHRwcml2LVxcdTAwM2VpbmZvLm9wdGlvbnMgPSBmbGFncztcXG4gMTcwOlxcdFxcdH1cXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0ZXJyID0gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cXHUwMDNlbmV0LCBjdHgtXFx1MDAzZWZhbWlseSk7XFxuIDE3MzpcXHRcXHRpZiAoZXJyKVxcbiAxNzQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0c3dpdGNoIChjdHgtXFx1MDAzZWZhbWlseSkge1xcbiAxNzc6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuIDE3ODpcXHRcXHRcXHRlcnIgPSBuZl9zeW5wcm94eV9pcHY0X2luaXQoc25ldCwgY3R4LVxcdTAwM2VuZXQpO1xcbiAxNzk6XFx0XFx0XFx0aWYgKGVycilcXG4gMTgwOlxcdFxcdFxcdFxcdGdvdG8gbmZfY3RfZmFpbHVyZTtcXG4gMTgxOlxcdFxcdFxcdGJyZWFrO1xcbiAxODI6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX1RBQkxFU19JUFY2KVxcbiAxODM6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuIDE4NDpcXHRcXHRcXHRlcnIgPSBuZl9zeW5wcm94eV9pcHY2X2luaXQoc25ldCwgY3R4LVxcdTAwM2VuZXQpO1xcbiAxODU6XFx0XFx0XFx0aWYgKGVycilcXG4gMTg2OlxcdFxcdFxcdFxcdGdvdG8gbmZfY3RfZmFpbHVyZTtcXG4gMTg3OlxcdFxcdFxcdGJyZWFrO1xcbiAxODg6XFx0I2VuZGlmXFxuIDE4OTpcXHRcXHRjYXNlIE5GUFJPVE9fSU5FVDpcXG4gMTkwOlxcdFxcdFxcdGVyciA9IG5mX3N5bnByb3h5X2lwdjRfaW5pdChzbmV0LCBjdHgtXFx1MDAzZW5ldCk7XFxuIDE5MTpcXHRcXHRcXHRpZiAoZXJyKVxcbiAxOTI6XFx0XFx0XFx0XFx0Z290byBuZl9jdF9mYWlsdXJlO1xcbiAxOTM6XFx0XFx0XFx0ZXJyID0gbmZfc3lucHJveHlfaXB2Nl9pbml0KHNuZXQsIGN0eC1cXHUwMDNlbmV0KTtcXG4gMTk0OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4gMTk1OlxcdFxcdFxcdFxcdG5mX3N5bnByb3h5X2lwdjRfZmluaShzbmV0LCBjdHgtXFx1MDAzZW5ldCk7XFxuIDE5NjpcXHRcXHRcXHRcXHRnb3RvIG5mX2N0X2ZhaWx1cmU7XFxuIDE5NzpcXHRcXHRcXHR9XFxuIDE5ODpcXHRcXHRcXHRicmVhaztcXG4gMTk5OlxcdFxcdH1cXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0cmV0dXJuIDA7XFxuIDIwMjpcXHRcXG4gMjAzOlxcdG5mX2N0X2ZhaWx1cmU6XFxuIDIwNDpcXHRcXHRuZl9jdF9uZXRuc19wdXQoY3R4LVxcdTAwM2VuZXQsIGN0eC1cXHUwMDNlZmFtaWx5KTtcXG4gMjA1OlxcdFxcdHJldHVybiBlcnI7XFxuIDIwNjpcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgpXFxuIDIwOTpcXHR7XFxuIDIxMDpcXHRcXHRzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0ID0gc3lucHJveHlfcGVybmV0KGN0eC1cXHUwMDNlbmV0KTtcXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0c3dpdGNoIChjdHgtXFx1MDAzZWZhbWlseSkge1xcbiAyMTM6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuIDIxNDpcXHRcXHRcXHRuZl9zeW5wcm94eV9pcHY0X2Zpbmkoc25ldCwgY3R4LVxcdTAwM2VuZXQpO1xcbiAyMTU6XFx0XFx0XFx0YnJlYWs7XFxuIDIxNjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0lQVjYpXFxuIDIxNzpcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG4gMjE4OlxcdFxcdFxcdG5mX3N5bnByb3h5X2lwdjZfZmluaShzbmV0LCBjdHgtXFx1MDAzZW5ldCk7XFxuIDIxOTpcXHRcXHRcXHRicmVhaztcXG4gMjIwOlxcdCNlbmRpZlxcbiAyMjE6XFx0XFx0Y2FzZSBORlBST1RPX0lORVQ6XFxuIDIyMjpcXHRcXHRcXHRuZl9zeW5wcm94eV9pcHY0X2Zpbmkoc25ldCwgY3R4LVxcdTAwM2VuZXQpO1xcbiAyMjM6XFx0XFx0XFx0bmZfc3lucHJveHlfaXB2Nl9maW5pKHNuZXQsIGN0eC1cXHUwMDNlbmV0KTtcXG4gMjI0OlxcdFxcdFxcdGJyZWFrO1xcbiAyMjU6XFx0XFx0fVxcbiAyMjY6XFx0XFx0bmZfY3RfbmV0bnNfcHV0KGN0eC1cXHUwMDNlbmV0LCBjdHgtXFx1MDAzZWZhbWlseSk7XFxuIDIyNzpcXHR9XFxuIDIyODpcXHRcXG4gMjI5OlxcdHN0YXRpYyBpbnQgbmZ0X3N5bnByb3h5X2RvX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdilcXG4gMjMwOlxcdHtcXG4gMjMxOlxcdFxcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBORlRBX1NZTlBST1hZX01TUywgaHRvbnMocHJpdi1cXHUwMDNlaW5mby5tc3MpKSB8fFxcbiAyMzI6XFx0XFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBORlRBX1NZTlBST1hZX1dTQ0FMRSwgcHJpdi1cXHUwMDNlaW5mby53c2NhbGUpIHx8XFxuIDIzMzpcXHRcXHQgICAgbmxhX3B1dF9iZTMyKHNrYiwgTkZUQV9TWU5QUk9YWV9GTEFHUywgaHRvbmwocHJpdi1cXHUwMDNlaW5mby5vcHRpb25zKSkpXFxuIDIzNDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0cmV0dXJuIDA7XFxuIDIzNzpcXHRcXG4gMjM4OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4gMjM5OlxcdFxcdHJldHVybiAtMTtcXG4gMjQwOlxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiAyNDM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAyNDQ6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuIDI0NTpcXHR7XFxuIDI0NjpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0bmZ0X3N5bnByb3h5X2RvX2V2YWwocHJpdiwgcmVncywgcGt0KTtcXG4gMjQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6NDMuMzM1OTA5MDExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5ODE2NzE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgZm9yIG5mdF9zeW5wcm94eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBuZnRfc3lucHJveHlgLiBMZXQncyBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcuIEknbSBnb2luZyB0byB3YW50IHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB3aGV0aGVyIHRoaXMgaXMgYSBtb2R1bGUgb3IgYnVpbHQtaW4sIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXQncyBlbmFibGVkLiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJJ2xsIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqaW50ZXJlc3RpbmcqIGRlZmF1bHRzLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gc2VlIGlmIGFueSBuZXcgb3B0aW9ucyBhcmUgZXhwb3NlZCBiYXNlZCBvbiB0aGlzIHNlbGVjdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBtZW51IHN0cnVjdHVyZSBhbmQgdGhlIGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBMZXQncyBnZXQgY3JhY2tpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjQ1LjUzNDA4MDA3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzNTY1OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZUX1NZTlBST1hZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0OC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQ5OmNvbmZpZyBORlRfU1lOUFJPWFlcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjUwLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIFNZTlBST1hZIGV4cHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTMyPW9iai0kKENPTkZJR19ORlRfWEZSTSlcXHRcXHQrPSBuZnRfeGZybS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMzM6b2JqLSQoQ09ORklHX05GVF9TWU5QUk9YWSlcXHQrPSBuZnRfc3lucHJveHkub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTo0NS41OTQ0NDY4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY0MzA5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY0OS4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleGFtaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG5ldGZpbHRlci4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gYmUgdGhlcmUgLSBtYXliZSBhIG5ldyBmZWF0dXJlLCBhIGNoYW5nZSBpbiBob3cgc29tZXRoaW5nJ3MgZW5hYmxlZCwgb3IgcGVyaGFwcyBhIGRlcGVuZGVuY3kgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzbyBsZXQncyBnZXQgZG93biB0byBpdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBob2xkcyBmb3IgdXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjQ3LjQ1ODc2MDA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjQ1OlxcdFxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbiA2NDY6XFx0XFx0aGVscFxcbiA2NDc6XFx0XFx0ICBUaGlzIG1ha2VzIHRyYW5zcGFyZW50IHByb3h5IHN1cHBvcnQgYXZhaWxhYmxlIGluIG5mdGFibGVzLlxcbiA2NDg6XFx0XFxuIDY0OTpcXHRjb25maWcgTkZUX1NZTlBST1hZXFxuIDY1MDpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIHN1cHBvcnRcXFwiXFxuIDY1MTpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJfQURWQU5DRURcXG4gNjUyOlxcdFxcdHNlbGVjdCBORVRGSUxURVJfU1lOUFJPWFlcXG4gNjUzOlxcdFxcdHNlbGVjdCBTWU5fQ09PS0lFU1xcbiA2NTQ6XFx0XFx0aGVscFxcbiA2NTU6XFx0XFx0ICBUaGUgU1lOUFJPWFkgZXhwcmVzc2lvbiBhbGxvd3MgeW91IHRvIGludGVyY2VwdCBUQ1AgY29ubmVjdGlvbnMgYW5kXFxuIDY1NjpcXHRcXHQgIGVzdGFibGlzaCB0aGVtIHVzaW5nIHN5bmNvb2tpZXMgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCBvbiB0byB0aGVcXG4gNjU3OlxcdFxcdCAgc2VydmVyLiBUaGlzIGFsbG93cyB0byBhdm9pZCBjb25udHJhY2sgYW5kIHNlcnZlciByZXNvdXJjZSB1c2FnZVxcbiA2NTg6XFx0XFx0ICBkdXJpbmcgU1lOLWZsb29kIGF0dGFja3MuXFxuIDY1OTpcXHRcXG4gNjYwOlxcdGlmIE5GX1RBQkxFU19ORVRERVZcXG4gNjYxOlxcdFxcbiA2NjI6XFx0Y29uZmlnIE5GX0RVUF9ORVRERVZcXG4gNjYzOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnRcXFwiXFxuIDY2NDpcXHRcXHRoZWxwXFxuIDY2NTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGdlbmVyaWMgcGFja2V0IGR1cGxpY2F0aW9uIGluZnJhc3RydWN0dXJlXFxuIDY2NjpcXHRcXHQgIGZvciBOZXRmaWx0ZXIuXFxuIDY2NzpcXHRcXG4gNjY4OlxcdGNvbmZpZyBORlRfRFVQX05FVERFVlxcbiA2Njk6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XFxcIlxcbiA2NzA6XFx0XFx0c2VsZWN0IE5GX0RVUF9ORVRERVZcXG4gNjcxOlxcdFxcdGhlbHBcXG4gNjcyOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBwYWNrZXQgZHVwbGljYXRpb24gZm9yIHRoZSBcXFwibmV0ZGV2XFxcIiBmYW1pbHkuXFxuIDY3MzpcXHRcXG4gNjc0OlxcdGNvbmZpZyBORlRfRldEX05FVERFVlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTo0Ny40NTg4OTQ3OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDIzODMyNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENoZWNrc3VtbWluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZl9jaGVja3N1bWAgc2l0dWF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBpdCdzIHJlc3BvbnNpYmxlIGZvciwgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoYXQgb2xkZXIgYG5mX2lwX2NoZWNrc3VtYCBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBnZXQgdGhlIGRldGFpbHMuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBgZ3JlcGAgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgYG5mX2NoZWNrc3VtYCB3aXRoaW4gdGhlIHNvdXJjZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHVzYWdlLiBGcm9tIHRoZXJlLCBJIGNhbiBjb21wYXJlIGl0IHRvIHRoZSBvbGRlciBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGV2b2x1dGlvbiBvZiB0aGUgY2hlY2tzdW0gaGFuZGxpbmcgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjQ5Ljg4MjczMTAxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg3MDg3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2NoZWNrc3VtXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaD0zNzM9c3RydWN0IG5mX3F1ZXVlX2VudHJ5O1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtMzc0LVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6Mzc1Ol9fc3VtMTYgbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaC0zNzYtXFx0XFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MjExNz1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTIxMjItXFx0LyogVmFsaWRhdGUgY3N1bSBldmVuIGZvciBGT1JXQVJEICovXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoyMTIzOlxcdHJldHVybiAhbmZfY2hlY2tzdW0oc2tiLCBORl9JTkVUX0xPQ0FMX0lOLCBvZmZzZXQsIHByb3RvLCBhZik7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0yMTI0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6NTAuMjY5ODI4MDU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NzExNTMzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRml4aW5nIGEgQ3JpdGljYWwgQ2hlY2tzdW0gQnVnIGluIGBuZnRfc3lucHJveHlgIGZvciBJUHY2KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgbmZ0X3N5bnByb3h5YCBjb2RlLCBhbmQgaXQgc2VlbXMgdGhlcmUncyBhIHByb2JsZW0uIEl0IHN1cHBvcnRzIGJvdGggSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgZ3JlYXQsIGhhbmRsaW5nIGBORlBST1RPX0lQVjRgLCBgTkZQUk9UT19JUFY2YCwgYW5kIHRoZSBvdGhlcnMuIEhvd2V2ZXIsIGl0IHdhcyB1bmNvbmRpdGlvbmFsbHkgY2FsbGluZyBgbmZfaXBfY2hlY2tzdW1gLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IGBuZl9pcF9jaGVja3N1bWAgaXMgc3BlY2lmaWNhbGx5IElQdjQgb25seS4gRm9yIElQdjYgd2UgbmVlZCBgbmZfaXA2X2NoZWNrc3VtYCwgb3IgYSBnZW5lcmljIGFwcHJvYWNoIGxpa2UgYG5mX2NoZWNrc3VtYCB3aXRoIGBuZnRfcGYocGt0KWAuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgKG9yIHdoaWNoZXZlciBldmFsdWF0aW9uIGZ1bmN0aW9uIGlzIHVzZWQpIHByb2Nlc3NlcyBhbiBJUHY2IHBhY2tldCwgaXQncyB1c2luZyB0aGUgd3JvbmcgY2hlY2tzdW0gY2FsY3VsYXRpb24sIHNwZWNpZmljYWxseSwgdGhlIGBpcF9oZHIoc2tiKWAgaXMgYmVpbmcgdXNlZCBvbiB0aGUgSVB2NiBwYWNrZXQsIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNoZWNrc3VtcyBhbmQgbGlrZWx5IG1hbGZvcm1lZCBoYW5kbGluZywgd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LlxuXG5UaGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZC4gUmVwbGFjZSB0aGUgY2FsbCB0byBgbmZfaXBfY2hlY2tzdW1gIHdpdGggYG5mX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQLCBuZnRfcGYocGt0KSlgLiBUaGlzIHVzZXMgdGhlIGdlbmVyaWMgY2hlY2tzdW0gZnVuY3Rpb24sIG1ha2luZyBzdXJlIHdlIHBpY2sgdGhlIGNvcnJlY3QgcHJvdG9jb2wgZmFtaWx5IHRvIGNvbXB1dGUgdGhlIGNoZWNrc3VtLCB3aGljaCBzb2x2ZXMgdGhlIElQdjYgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIHByb2JsZW0gYW5kIGlzIG1vcmUgZ2VuZXJhbC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlLCBhbmQgaXMgaXQgd29ydGggZnV6emluZz8gTGV0J3Mgc2VlLi4uXG5cblJlYWNoYWJpbGl0eTogV2VsbCwgTmV0ZmlsdGVyIGFuZCBuZnRhYmxlcyBzeW5wcm94eSBhcmUgZnVsbHkgZW11bGF0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2luZyBuZXRsaW5rIHNvY2tldHMgdG8gY3JlYXRlIG5mdGFibGVzIHJ1bGVzIHdpdGggdGhlIHN5bnByb3h5IGV4cHJlc3Npb24uIFBhY2tldCBnZW5lcmF0aW9uIG92ZXIgbG9vcGJhY2ssIHR1bi90YXAsIG9yIHZldGggZGV2aWNlcyBpcyBzaW1wbGUuIEl0J3MgZXZlbiByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwcy4gQ2hlY2shXG5cbk1vZGlmaWNhdGlvbnMgaW4gY29yZSBzdWJzeXN0ZW1zIC8gbmV0d29ya2luZzogWWVzLCB0aGlzIGRlZmluaXRlbHkgbW9kaWZpZXMgcGFja2V0IGV2YWx1YXRpb24gbG9naWMgaW4gbmV0ZmlsdGVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBORlQgc3lucHJveHkgZXhwcmVzc2lvbi4gQW5vdGhlciBjaGVjayFcblxuV29ydGhGdXp6aW5nOiBJJ2Qgc2F5IHllcywgYmVjYXVzZSB0aGlzIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFdpdGggYWxsIG9mIHRoYXQsIGl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlIGlzIGEgcHJpbWUgY2FuZGlkYXRlLlxuXG5Db25maWdzOiBMZXQgbWUgY2hlY2sgdGhlIGNvbmZpZ3MuIGBDT05GSUdfTkZUX1NZTlBST1hZYCwgYENPTkZJR19ORl9UQUJMRVNgLCBgQ09ORklHX05GX0NPTk5UUkFDS2AsIGBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEYCwgYENPTkZJR19ORl9UQUJMRVNfSU5FVGAsIGBDT05GSUdfTkZfVEFCTEVTX0lQVjZgLCBgQ09ORklHX05GX1RBQkxFU19JUFY0YCwgYW5kIGBDT05GSUdfTkZfVEFCTEVTX05FVERFVmAgYWxsIHNlZW0gcmVsZXZhbnQuXG5cblN5bWJvbHM6IFRoZSBtYWluIHN5bWJvbHMgdG8gY29uc2lkZXIgYXJlIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgKG9yIGBuZnRfc3lucHJveHlfZXZhbGApLCBgbmZ0X3N5bnByb3h5X2V2YWxfdjRgLCBgbmZ0X3N5bnByb3h5X2V2YWxfdjZgLCBgbmZ0X3N5bnByb3h5X2RvX2luaXRgLCBhbmQgYG5mdF9zeW5wcm94eV9vYmpfZXZhbGAuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBieSBpbnNwZWN0aW5nIGBuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jYCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTo1Ni4xNDA5ODQwNjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiAyNDM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAyNDQ6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuIDI0NTpcXHR7XFxuIDI0NjpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0bmZ0X3N5bnByb3h5X2RvX2V2YWwocHJpdiwgcmVncywgcGt0KTtcXG4gMjQ5OlxcdH1cXG4gMjUwOlxcdFxcbiAyNTE6XFx0c3RhdGljIGludCBuZnRfc3lucHJveHlfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gMjUyOlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuIDI1MzpcXHR7XFxuIDI1NDpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19JUFY0IFxcdTAwMjZcXHUwMDI2XFxuIDI1NTpcXHRcXHQgICAgY3R4LVxcdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19JUFY2IFxcdTAwMjZcXHUwMDI2XFxuIDI1NjpcXHRcXHQgICAgY3R4LVxcdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19JTkVUKVxcbiAyNTc6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyNTg6XFx0XFxuIDI1OTpcXHRcXHRyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2hvb2tzKGN0eC1cXHUwMDNlY2hhaW4sICgxIFxcdTAwM2NcXHUwMDNjIE5GX0lORVRfTE9DQUxfSU4pIHxcXG4gMjYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAoMSBcXHUwMDNjXFx1MDAzYyBORl9JTkVUX0ZPUldBUkQpKTtcXG4gMjYxOlxcdH1cXG4gMjYyOlxcdFxcbiAyNjM6XFx0c3RhdGljIGludCBuZnRfc3lucHJveHlfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiAyNjQ6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIDI2NTpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxcbiAyNjY6XFx0e1xcbiAyNjc6XFx0XFx0c3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxuIDI2ODpcXHRcXG4gMjY5OlxcdFxcdHJldHVybiBuZnRfc3lucHJveHlfZG9faW5pdChjdHgsIHRiLCBwcml2KTtcXG4gMjcwOlxcdH1cXG4gMjcxOlxcdFxcbiAyNzI6XFx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gMjczOlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuIDI3NDpcXHR7XFxuIDI3NTpcXHRcXHRuZnRfc3lucHJveHlfZG9fZGVzdHJveShjdHgpO1xcbiAyNzY6XFx0fVxcbiAyNzc6XFx0XFxuIDI3ODpcXHRzdGF0aWMgaW50IG5mdF9zeW5wcm94eV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuIDI3OTpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgYm9vbCByZXNldClcXG4gMjgwOlxcdHtcXG4gMjgxOlxcdFxcdHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRyZXR1cm4gbmZ0X3N5bnByb3h5X2RvX2R1bXAoc2tiLCBwcml2KTtcXG4gMjg0OlxcdH1cXG4gMjg1OlxcdFxcbiAyODY6XFx0c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9zeW5wcm94eV90eXBlO1xcbiAyODc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3N5bnByb3h5X29wcyA9IHtcXG4gMjg4OlxcdFxcdC5ldmFsXFx0XFx0PSBuZnRfc3lucHJveHlfZXZhbCxcXG4gMjg5OlxcdFxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3N5bnByb3h5KSksXFxuIDI5MDpcXHRcXHQuaW5pdFxcdFxcdD0gbmZ0X3N5bnByb3h5X2luaXQsXFxuIDI5MTpcXHRcXHQuZGVzdHJveVxcdD0gbmZ0X3N5bnByb3h5X2Rlc3Ryb3ksXFxuIDI5MjpcXHRcXHQuZHVtcFxcdFxcdD0gbmZ0X3N5bnByb3h5X2R1bXAsXFxuIDI5MzpcXHRcXHQudHlwZVxcdFxcdD0gXFx1MDAyNm5mdF9zeW5wcm94eV90eXBlLFxcbiAyOTQ6XFx0XFx0LnZhbGlkYXRlXFx0PSBuZnRfc3lucHJveHlfdmFsaWRhdGUsXFxuIDI5NTpcXHR9O1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X3N5bnByb3h5X3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG4gMjk4OlxcdFxcdC5vcHNcXHRcXHQ9IFxcdTAwMjZuZnRfc3lucHJveHlfb3BzLFxcbiAyOTk6XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJzeW5wcm94eVxcXCIsXFxuIDMwMDpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAzMDE6XFx0XFx0LnBvbGljeVxcdFxcdD0gbmZ0X3N5bnByb3h5X3BvbGljeSxcXG4gMzAyOlxcdFxcdC5tYXhhdHRyXFx0PSBORlRBX1NZTlBST1hZX01BWCxcXG4gMzAzOlxcdH07XFxuIDMwNDpcXHRcXG4gMzA1OlxcdHN0YXRpYyBpbnQgbmZ0X3N5bnByb3h5X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIDMwNjpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXFxuIDMwNzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4gMzA4OlxcdHtcXG4gMzA5OlxcdFxcdHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0cmV0dXJuIG5mdF9zeW5wcm94eV9kb19pbml0KGN0eCwgdGIsIHByaXYpO1xcbiAzMTI6XFx0fVxcbiAzMTM6XFx0XFxuIDMxNDpcXHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfb2JqX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gMzE1OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4gMzE2OlxcdHtcXG4gMzE3OlxcdFxcdG5mdF9zeW5wcm94eV9kb19kZXN0cm95KGN0eCk7XFxuIDMxODpcXHR9XFxuIDMxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6NTYuMTQxMDkwODQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0Njc4ODY0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0OlxuXG4qKkFuYWx5emluZyBgbmZ0X3N5bnByb3h5LmNgIEZ1cnRoZXIqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkOiBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgKmFjdHVhbGx5KiBleGFtaW5lIHRoZSBjb2RlIGluIGBuZnRfc3lucHJveHkuY2AuIE5vIG1vcmUgdGhlb3JldGljYWwgZGlzY3Vzc2lvbnMsIG5vIG1vcmUgbG9va2luZyBhdCB0aGUgcHJvYmxlbSBmcm9tIHRoZSBvdXRzaWRlIOKAkyB0aW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgKnJlYWxseSogdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5OiBob3cgaXQncyAqYWN0dWFsbHkqIGRvbmUuIFdoZXJlIGFyZSB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzPyBXaGF0J3MgdGhlIGZsb3cgY29udHJvbD8gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbiBjYWxscz8gV2hhdCBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZSBwcmVzZW50PyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyBhY2NvdW50ZWQgZm9yPyBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBwcmFjdGljYWwgZXhlY3V0aW9uIG9mIHRoZSBzeW5wcm94eSBmdW5jdGlvbmFsaXR5LiBJJ20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIHRoZSBhc3N1bXB0aW9ucyBiYWtlZCBpbnRvIHRoZSBkZXNpZ24sIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIHRoYXQgbWlnaHQgcmVxdWlyZSBjbG9zZXIgc2NydXRpbnkgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBmdXR1cmUgbWFpbnRhaW5hYmlsaXR5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjU4LjYwODk4MDU0OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRzdGF0aWMgaW50IG5mdF9zeW5wcm94eV9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosIGJvb2wgcmVzZXQpXFxuIDMyMjpcXHR7XFxuIDMyMzpcXHRcXHRzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdHJldHVybiBuZnRfc3lucHJveHlfZG9fZHVtcChza2IsIHByaXYpO1xcbiAzMjY6XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4gMzI5OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAzMzA6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4gMzMxOlxcdHtcXG4gMzMyOlxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4gMzMzOlxcdFxcbiAzMzQ6XFx0XFx0bmZ0X3N5bnByb3h5X2RvX2V2YWwocHJpdiwgcmVncywgcGt0KTtcXG4gMzM1OlxcdH1cXG4gMzM2OlxcdFxcbiAzMzc6XFx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X29ial91cGRhdGUoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4gMzM4OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X29iamVjdCAqbmV3b2JqKVxcbiAzMzk6XFx0e1xcbiAzNDA6XFx0XFx0c3RydWN0IG5mdF9zeW5wcm94eSAqbmV3cHJpdiA9IG5mdF9vYmpfZGF0YShuZXdvYmopO1xcbiAzNDE6XFx0XFx0c3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRXUklURV9PTkNFKHByaXYtXFx1MDAzZWluZm8sIG5ld3ByaXYtXFx1MDAzZWluZm8pO1xcbiAzNDQ6XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRzdGF0aWMgc3RydWN0IG5mdF9vYmplY3RfdHlwZSBuZnRfc3lucHJveHlfb2JqX3R5cGU7XFxuIDM0NzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9zeW5wcm94eV9vYmpfb3BzID0ge1xcbiAzNDg6XFx0XFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfc3lucHJveHlfb2JqX3R5cGUsXFxuIDM0OTpcXHRcXHQuc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBuZnRfc3lucHJveHkpLFxcbiAzNTA6XFx0XFx0LmluaXRcXHRcXHQ9IG5mdF9zeW5wcm94eV9vYmpfaW5pdCxcXG4gMzUxOlxcdFxcdC5kZXN0cm95XFx0PSBuZnRfc3lucHJveHlfb2JqX2Rlc3Ryb3ksXFxuIDM1MjpcXHRcXHQuZHVtcFxcdFxcdD0gbmZ0X3N5bnByb3h5X29ial9kdW1wLFxcbiAzNTM6XFx0XFx0LmV2YWxcXHRcXHQ9IG5mdF9zeW5wcm94eV9vYmpfZXZhbCxcXG4gMzU0OlxcdFxcdC51cGRhdGVcXHRcXHQ9IG5mdF9zeW5wcm94eV9vYmpfdXBkYXRlLFxcbiAzNTU6XFx0fTtcXG4gMzU2OlxcdFxcbiAzNTc6XFx0c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X3N5bnByb3h5X29ial90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuIDM1ODpcXHRcXHQudHlwZVxcdFxcdD0gTkZUX09CSkVDVF9TWU5QUk9YWSxcXG4gMzU5OlxcdFxcdC5vcHNcXHRcXHQ9IFxcdTAwMjZuZnRfc3lucHJveHlfb2JqX29wcyxcXG4gMzYwOlxcdFxcdC5tYXhhdHRyXFx0PSBORlRBX1NZTlBST1hZX01BWCxcXG4gMzYxOlxcdFxcdC5wb2xpY3lcXHRcXHQ9IG5mdF9zeW5wcm94eV9wb2xpY3ksXFxuIDM2MjpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAzNjM6XFx0fTtcXG4gMzY0OlxcdFxcbiAzNjU6XFx0c3RhdGljIGludCBfX2luaXQgbmZ0X3N5bnByb3h5X21vZHVsZV9pbml0KHZvaWQpXFxuIDM2NjpcXHR7XFxuIDM2NzpcXHRcXHRpbnQgZXJyO1xcbiAzNjg6XFx0XFxuIDM2OTpcXHRcXHRlcnIgPSBuZnRfcmVnaXN0ZXJfb2JqKFxcdTAwMjZuZnRfc3lucHJveHlfb2JqX3R5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTo1OC42MDkwNjk2NDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MjEzODY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBEaWdpdGFsIExhbmRzY2FwZTogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueSBkZWVwIGFuYWx5c2lzLCBsZXQncyBlc3RhYmxpc2ggYSBjbGVhciBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICpCZWZvcmUgSSBnZXQgdG9vIGludm9sdmVkIGluIHNwZWNpZmljcywgaXQncyBwcnVkZW50IHRvIGNvbmR1Y3QgYSBzd2VlcCBvZiB0aGUgZW50aXJlIGZpbGUqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUsIHN0cnVjdHVyZSwgYW5kIGFueSBwb3RlbnRpYWwgcmVkIGZsYWdzIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGUgbGFyZ2VyIGNvbnRleHQgaXMgY3J1Y2lhbCB0byBjb250ZXh0dWFsaXppbmcgZGV0YWlscy4gVGhpcyBpbml0aWFsIHBhc3Mgd2lsbCBpbmZvcm0gd2hlcmUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGZvciBhIG1lYW5pbmdmdWwgYnJlYWtkb3duIGFuZCBhc3Nlc3NtZW50LCBhbmQgd2hldGhlciB0byByZWZpbmUgbXkgYXBwcm9hY2ggdG8gdGhlIGRhdGEuIE5vIGFzc3VtcHRpb25zLCBqdXN0IGEgbWV0aG9kaWNhbCBzY29waW5nIGV4ZXJjaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MDAuOTgxMjEwOTY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzcwOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAzNzE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXFx1MDAyNm5mdF9zeW5wcm94eV90eXBlKTtcXG4gMzc0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAzNzU6XFx0XFx0XFx0Z290byBlcnI7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdHJldHVybiAwO1xcbiAzNzg6XFx0XFxuIDM3OTpcXHRlcnI6XFxuIDM4MDpcXHRcXHRuZnRfdW5yZWdpc3Rlcl9vYmooXFx1MDAyNm5mdF9zeW5wcm94eV9vYmpfdHlwZSk7XFxuIDM4MTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzODI6XFx0fVxcbiAzODM6XFx0XFxuIDM4NDpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgbmZ0X3N5bnByb3h5X21vZHVsZV9leGl0KHZvaWQpXFxuIDM4NTpcXHR7XFxuIDM4NjpcXHRcXHRuZnRfdW5yZWdpc3Rlcl9leHByKFxcdTAwMjZuZnRfc3lucHJveHlfdHlwZSk7XFxuIDM4NzpcXHRcXHRuZnRfdW5yZWdpc3Rlcl9vYmooXFx1MDAyNm5mdF9zeW5wcm94eV9vYmpfdHlwZSk7XFxuIDM4ODpcXHR9XFxuIDM4OTpcXHRcXG4gMzkwOlxcdG1vZHVsZV9pbml0KG5mdF9zeW5wcm94eV9tb2R1bGVfaW5pdCk7XFxuIDM5MTpcXHRtb2R1bGVfZXhpdChuZnRfc3lucHJveHlfbW9kdWxlX2V4aXQpO1xcbiAzOTI6XFx0XFxuIDM5MzpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIDM5NDpcXHRNT0RVTEVfQVVUSE9SKFxcXCJGZXJuYW5kbyBGZXJuYW5kZXogXFx1MDAzY2ZmbWFuY2VyYUByaXNldXAubmV0XFx1MDAzZVxcXCIpO1xcbiAzOTU6XFx0TU9EVUxFX0FMSUFTX05GVF9FWFBSKFxcXCJzeW5wcm94eVxcXCIpO1xcbiAzOTY6XFx0TU9EVUxFX0FMSUFTX05GVF9PQkooTkZUX09CSkVDVF9TWU5QUk9YWSk7XFxuIDM5NzpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIm5mdGFibGVzIFNZTlBST1hZIGV4cHJlc3Npb24gc3VwcG9ydFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNjowMC45ODEyODgwNTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY4NDY5MDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgQ2hlY2tzdW0gSXNzdWUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJvdWJsZXNob290aW5nIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGxpa2VseSBpbnZvbHZpbmcgTmV0ZmlsdGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgbmZfY2hlY2tzdW1gIGZ1bmN0aW9uYWxpdHkuIEkga25vdyBpdCdzIGEgY29yZSBwaWVjZSwgYW5kIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIE5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXJlIGV4YWN0bHkgdGhhdCdzIGRlZmluZWQuLi4gSSBiZWxpZXZlIGl0J3MgaW4gYG5ldC9uZXRmaWx0ZXIvdXRpbHMuY2AsIG9yIHNvbWV3aGVyZSBuZWFyYnkgaW4gdGhhdCBzdWJ0cmVlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgZmlsZSBhbmQgbGluZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwb2ludCBvZiByZWZlcmVuY2UgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29kZSBhbmQgc3RhcnQgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjA0LjY2NTk4MDk0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMjUzNTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N1bTE2IG5mX2NoZWNrc3VtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg9MzczPXN0cnVjdCBuZl9xdWV1ZV9lbnRyeTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3NC1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjM3NTpfX3N1bTE2IG5mX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtMzc2LVxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3OC1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjM3OTpfX3N1bTE2IG5mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaC0zODAtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jPTk3PXN0YXRpYyBfX3N1bTE2IG5mX2lwNl9jaGVja3N1bV9wYXJ0aWFsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jLTEyMi1cXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM6MTIzOl9fc3VtMTYgbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxubmV0L25ldGZpbHRlci91dGlscy5jLTEyNC1cXHRcXHQgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHU4IHByb3RvY29sLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jPTE0MD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jaGVja3N1bSk7XFxubmV0L25ldGZpbHRlci91dGlscy5jLTE0MS1cXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM6MTQyOl9fc3VtMTYgbmZfY2hlY2tzdW1fcGFydGlhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTQzLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGxlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MDYuNTk4NTQ1NTk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MzM4MTgzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBORlRhYmxlcyBTWU5QUk9YWSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoaXMgcGF0Y2ggaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIHRoZSBgbmZ0X3N5bnByb3h5X2RvX2V2YWxgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY2AuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQsIGl0IHNlZW1zLiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgZmlsZSByZXZlYWxzIGEgY2x1c3RlciBvZiByZWxhdGVkIGZ1bmN0aW9uczogYG5mdF9zeW5wcm94eV9ldmFsYCwgYG5mdF9zeW5wcm94eV9vYmpfZXZhbGAsIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGBuZnRfc3lucHJveHlfZXZhbF92NGAgYW5kIGBuZnRfc3lucHJveHlfZXZhbF92NmAuIEl0IGFsc28gaW5jbHVkZXMgYG5mdF9zeW5wcm94eV9kb19pbml0YCB3aGljaCBpcyBpbnRlcmVzdGluZyAtIHByZXN1bWFibHkgc29tZSBzZXR1cC4gU28sIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgYW5kIHRoZSBvdGhlciBgX2V2YWxgIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBmb2N1cyBhcmVhcywgaW5jbHVkaW5nIGBuZnRfc3lucHJveHlfb2JqX2V2YWxgLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIHRvIHNlZSBob3cgdGhvc2UgaW50ZWdyYXRlIHdpdGggdGhlIGJyb2FkZXIgTkZUYWJsZXMgZnJhbWV3b3JrLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHBhdGNoIG1lbnRpb25zIGBORlRfU1lOUFJPWFlgLCBuYXR1cmFsbHksIGFuZCB3ZSBoYXZlIHRoZSB1c3VhbCBzdXNwZWN0czogYE5GX1RBQkxFU2AsIGBORl9UQUJMRVNfSVBWNGAsIGBORl9UQUJMRVNfSVBWNmAsIGBORl9UQUJMRVNfSU5FVGAsIGBORVRGSUxURVJfU1lOUFJPWFlgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIFN0YW5kYXJkIGRlcGVuZGVuY2llcywgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfTkZUX1NZTlBST1hZYC4gTGV0J3MgZW5zdXJlIHRoZXNlIGFyZSBjb3JyZWN0LlxuXG5Mb29raW5nIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgbmVlZCB0byBjb25maXJtIGBORlRfU1lOUFJPWFlgJ3MgZGVwZW5kZW5jaWVzLiBJdCBzaG91bGQgYmUgZGVwZW5kZW50IG9uIGBORl9DT05OVFJBQ0tgIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCBhbmQgcHJlc3VtYWJseSB1bmRlciBhbiBgaWYgTkZfVEFCTEVTYCBibG9jay4gRG91YmxlLWNoZWNraW5nIHRoYXQgaXMgY3J1Y2lhbC4gSSdsbCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3RzIEknbSBtaXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgS2NvbmZpZyBzZXR1cCBpcyBrZXkgdG8gZW5zdXJpbmcgdGhpcyBjb25maWd1cmF0aW9uIGludGVncmF0ZXMgc21vb3RobHkgd2l0aGluIHRoZSBsYXJnZXIgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNjoxMC4xMzIzNjY3NThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjgzMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIE5GX1RBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ1NT1jb25maWcgTkZfVEFCTEVTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzE6aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3Mi1jb25maWcgTkZfVEFCTEVTX0lORVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MjU9Y29uZmlnIE5GVF9TT0NLRVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXFx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyODpcXHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0MzpcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ0LVxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Ni1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQ5PWNvbmZpZyBORlRfU1lOUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY2MDppZiBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MTAuMTg3MDU4NDY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNDE4MDAwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSB2ZXJ5IGNsZWFuIHNsYXRlIGhlcmUg4oCTIHRoZSBlbnZpcm9ubWVudCBzZWVtcyBwcmlzdGluZSwgcmVhZHkgZm9yIGFuYWx5c2lzLiBUaGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoYXQgbWVhbnMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoaXMgY2hhbmdlIHByZXNlbnRzIGEgdmlhYmxlIGZ1enppbmcgdGFyZ2V0LlxuXG5NeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb25maWd1cmF0aW9ucyBlbmFibGVkLiBcIk5GX1RBQkxFUyxcIiBcIk5GVF9TWU5QUk9YWSxcIiBcIk5FVEZJTFRFUl9BRFZBTkNFRCxcIiBcIk5GX0NPTk5UUkFDSyxcIiBhbmQgdGhlIHZhcmlvdXMgTkZfVEFCTEVTIHN1Yi1jb25maWd1cmF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2NuKApiBZZXMsIHRoaXMgY29uZmlybXMgbXkgc3VzcGljaW9uOiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBOZXRmaWx0ZXIgYW5kIG5mdGFibGVzIGludGVyYWN0aW9uLCBzcGVjaWZpY2FsbHkgU1lOUFJPWFksIGFuZCB0aGUgcHJlc2VuY2Ugb2YgYWR2YW5jZWQgZmVhdHVyZXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIFwiRm9jdXNTeW1ib2xzLFwiIEkgc2VlIGEgdGFyZ2V0ZWQgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBpbmNsdWRlIFwibmZ0X3N5bnByb3h5X2RvX2V2YWwsXCIgXCJuZnRfc3lucHJveHlfZXZhbCxcIiBhbmQgdmFyaWF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2Ni4gVGhpcyBpcyBrZXkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIGNvcmUgb2YgdGhlIFNZTlBST1hZIGV2YWx1YXRpb24gcHJvY2VzcyB3aXRoaW4gbmZ0YWJsZXMuXG5cblRoZSByZWFzb25pbmcgc2VjdGlvbiBpcyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gVGhlIHBhdGNoIGlzIHJlcGxhY2luZyBgbmZfaXBfY2hlY2tzdW0oKWAgd2l0aCB0aGUgZmFtaWx5LWF3YXJlIGBuZl9jaGVja3N1bSgpYCBmdW5jdGlvbiAqd2l0aGluKiBgbmZ0X3N5bnByb3h5X2RvX2V2YWwoKWAuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZS4gSXQncyBkaXJlY3RseSBpbXBhY3RpbmcgVENQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiAqc3BlY2lmaWNhbGx5KiB3aXRoaW4gdGhlIE5ldGZpbHRlciBuZnRhYmxlcyBTWU5QUk9YWSBsb2dpYy4gQW5kIGl0J3MgZG9pbmcgc28gZm9yIGJvdGggSVB2NCBhbmQgSVB2NiB0cmFmZmljLiBHaXZlbiB0aGF0IFNZTlBST1hZIGlzIGRlc2lnbmVkIHRvIG1pdGlnYXRlIFNZTiBmbG9vZHMsIGFuZCB0aGF0IG5mdGFibGVzIGlzIHdpZGVseSB1c2VkLCB0aGlzIGlzIGEgdmVyeSByZWxldmFudCwgcG90ZW50aWFsbHkgaGlnaC1pbXBhY3QgbW9kaWZpY2F0aW9uLiBJbXBvcnRhbnRseSwgdGhlIHJlYXNvbmluZyBjbGFyaWZpZXMgdGhhdCB0aGlzIGNoYW5nZSBpcyB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGggc3RhbmRhcmQgbmV0d29yayB0b29scy5cblxuQmFzZWQgb24gYWxsIHRoaXMsIEknbSByZWFkeSB0byBtYWtlIHRoZSBmaW5hbCBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuIFRoZSBhbmFseXNpcyBpcyBjb21wbGV0ZSwgYW5kIHRoZSBpbmZvcm1hdGlvbiBpcyByZWFkeSBmb3IgY29uc2lkZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNjgsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjE0LjMyODg2MjE0NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NDczMDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9TWU5QUk9YWVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjZcIixcbiAgICBcIk5GX1RBQkxFU19JUFY0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3N5bnByb3h5X2RvX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsXCIsXG4gICAgXCJuZnRfc3lucHJveHlfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y2XCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFRDUCBjaGVja3N1bSB2ZXJpZmljYXRpb24gaW4gbmZ0YWJsZXMgU1lOUFJPWFkgZXhwcmVzc2lvbiBldmFsdWF0aW9uIChuZnRfc3lucHJveHlfZG9fZXZhbCkgYnkgc3dpdGNoaW5nIGZyb20gbmZfaXBfY2hlY2tzdW0gdG8gZmFtaWx5LWF3YXJlIG5mX2NoZWNrc3VtLCBpbXBhY3RpbmcgSVB2NCBhbmQgSVB2NiB0cmFmZmljIHByb2Nlc3NpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBuZXRsaW5rIGFuZCBuZXR3b3JrIHBhY2tldCBpbmplY3Rpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZUX1NZTlBST1hZXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU19JTkVUXCIsXG4gICAgXCJORl9UQUJMRVNfSVBWNlwiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfc3lucHJveHlfZG9fZXZhbFwiLFxuICAgIFwibmZ0X3N5bnByb3h5X2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9vYmpfZXZhbFwiLFxuICAgIFwibmZ0X3N5bnByb3h5X2V2YWxfdjZcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgVENQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBpbiBuZnRhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIGV2YWx1YXRpb24gKG5mdF9zeW5wcm94eV9kb19ldmFsKSBieSBzd2l0Y2hpbmcgZnJvbSBuZl9pcF9jaGVja3N1bSB0byBmYW1pbHktYXdhcmUgbmZfY2hlY2tzdW0sIGltcGFjdGluZyBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgcHJvY2Vzc2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIG5ldGxpbmsgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjE0LjQxNTM0MzkwNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MDk5MTUwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNjoxNC40MTU5MjUyMzZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTYwOTMyNzY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgY2FsbCB0byBuZl9pcF9jaGVja3N1bSgpIHdpdGggbmZfY2hlY2tzdW0oKSBpbiBuZnRfc3lucHJveHlfZG9fZXZhbCgpIHNvIHRoYXQgdGhlIHByb3RvY29sIGZhbWlseSAoSVB2NCBvciBJUHY2KSBpcyBjb3JyZWN0bHkgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIFRDUCBjaGVja3N1bS5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBwYXRocywgaW5mby1sZWFrIHZlY3RvcnMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcGFja2V0IG1lbW9yeSBhY2Nlc3MgYm91bmRhcmllcyBvciBpbnZhbGlkIHNrYiBvcGVyYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODRkMmIwMzgxODk0NDJhODliMTcwMzI1NzA4NGIwZmVhYzY1YTgxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDIwOjM1OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbmluZGV4IDllZDI4OGM5ZDE2ODguLjU1NGE5NmEwMDBmNDAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXG5AQCAtMTE4LDcgKzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChuZl9pcF9jaGVja3N1bShza2IsIG5mdF9ob29rKHBrdCksIHRob2ZmLCBJUFBST1RPX1RDUCkpIHtcbitcdGlmIChuZl9jaGVja3N1bShza2IsIG5mdF9ob29rKHBrdCksIHRob2ZmLCBJUFBST1RPX1RDUCxcbitcdFx0XHRuZnRfcGYocGt0KSkpIHtcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNjoxNC40MTU5Mjg4MDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAzNzc3Mzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6XG5cbioqRGl2aW5nIGludG8gbmZ0X3N5bnByb3h5LmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gVGhpcyBwYXRjaCBpbiBgbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY2AgbmVlZHMgYSBjbG9zZXIgbG9vay4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgYW5kIHRoZWlyIGNvbnRleHQuIExldCdzIHNlZS4uLiBJJ2xsIHB1bGwgdXAgdGhlIGZpbGUsIHByb2JhYmx5IHVzaW5nIGByZWFkLWZpbGVgIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgb3IgaWYgSSB3YW50IHNvbWV0aGluZyBtb3JlIGRpcmVjdCwgSSBjYW4gdXNlIGBncmVwcGVyYCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY3VycmVudCBzb3VyY2UgY29kZS4gVGhlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBleGFjdGx5IHdoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGFuZCBob3cgdGhvc2UgbW9kaWZpY2F0aW9ucyBwbGF5IHdpdGhpbiB0aGUgZXhpc3RpbmcgY29kZS4gTXkgbWFpbiBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjE4LjQ1MzcwNTIwNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbiAxMDE6XFx0XFx0XFx0fVxcbiAxMDI6XFx0XFx0fVxcbiAxMDM6XFx0fVxcbiAxMDQ6XFx0I2VuZGlmIC8qIENPTkZJR19ORl9UQUJMRVNfSVBWNiovXFxuIDEwNTpcXHRcXG4gMTA2OlxcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAxMDg6XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbiAxMDk6XFx0e1xcbiAxMTA6XFx0XFx0c3RydWN0IHN5bnByb3h5X29wdGlvbnMgb3B0cyA9IHt9O1xcbiAxMTE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbiAxMTI6XFx0XFx0aW50IHRob2ZmID0gbmZ0X3Rob2ZmKHBrdCk7XFxuIDExMzpcXHRcXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3A7XFxuIDExNDpcXHRcXHRzdHJ1Y3QgdGNwaGRyIF90Y3BoO1xcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRpZiAocGt0LVxcdTAwM2V0cHJvdCAhPSBJUFBST1RPX1RDUCkge1xcbiAxMTc6XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xcbiAxMTg6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMTk6XFx0XFx0fVxcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXFxuIDEyMjpcXHRcXHRcXHRcXHRuZnRfcGYocGt0KSkpIHtcXG4gMTIzOlxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuIDEyNDpcXHRcXHRcXHRyZXR1cm47XFxuIDEyNTpcXHRcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHRjcCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHRob2ZmLFxcbiAxMjg6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgdGNwaGRyKSxcXG4gMTI5OlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2X3RjcGgpO1xcbiAxMzA6XFx0XFx0aWYgKCF0Y3ApIHtcXG4gMTMxOlxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuIDEzMjpcXHRcXHRcXHRyZXR1cm47XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmICghc3lucHJveHlfcGFyc2Vfb3B0aW9ucyhza2IsIHRob2ZmLCB0Y3AsIFxcdTAwMjZvcHRzKSkge1xcbiAxMzY6XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG4gMTM3OlxcdFxcdFxcdHJldHVybjtcXG4gMTM4OlxcdFxcdH1cXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIDE0MTpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gMTQyOlxcdFxcdFxcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcXHUwMDI2X3RjcGgsIFxcdTAwMjZvcHRzKTtcXG4gMTQzOlxcdFxcdFxcdHJldHVybjtcXG4gMTQ0OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfSVBWNilcXG4gMTQ1OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuIDE0NjpcXHRcXHRcXHRuZnRfc3lucHJveHlfZXZhbF92Nihwcml2LCByZWdzLCBwa3QsIHRjcCwgXFx1MDAyNl90Y3BoLCBcXHUwMDI2b3B0cyk7XFxuIDE0NzpcXHRcXHRcXHRyZXR1cm47XFxuIDE0ODpcXHQjZW5kaWZcXG4gMTQ5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MTguNDUzNzc4MjE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTI1ODMyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaGVja3N1bSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGZyb20gYG5mX2lwX2NoZWNrc3VtYCB0byBgbmZfY2hlY2tzdW1gIGluIHRoZSBjb250ZXh0IG9mIFRDUCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIGl04oCZcyByZXBsYWNpbmcgYG5mX2lwX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQKWAgd2l0aCBgbmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsIG5mdF9wZihwa3QpKWAuIFRoaXMgY2xlYXJseSBtZWFucyB0aGVyZSdzIGEgZGlmZmVyZW5jZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZGlmZmVyZW5jZS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGVhY2ggZnVuY3Rpb246IGBuZl9pcF9jaGVja3N1bWAgdmVyc3VzIGBuZl9jaGVja3N1bWAuIFdoYXQncyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZT8gV2hhdCdzIHRoZSBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsIGltcGFjdD8gSXMgaXQgYSByZWZhY3RvcmluZywgYSBidWcgZml4LCBvciBzb21ldGhpbmcgbW9yZT8gSXMgdGhpcyBwb3RlbnRpYWxseSBhIGdlbmVyYWxpemF0aW9uIG9yIG9wdGltaXphdGlvbj8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBib3RoIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlaXIgdXNhZ2UsIGRlcGVuZGVuY2llcywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgcGljdHVyZSBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgcmF0aW9uYWxlIGZvciB0aGUgY2hhbmdlIGFuZCBoZWxwIG1lIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MjAuNzA2MzY0NTQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEwMzI3NjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2lwX2NoZWNrc3VtfG5mX2NoZWNrc3VtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjIwLjg3NzQwNjQ1N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTIxOTc5NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBuYXJyYXRpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEZsb3cgQ2hlY2tzdW1zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogSSBuZWVkIGEgY29uY3JldGUgZGVmaW5pdGlvbi4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gXCJuZl9cIiBpcyB0aGUgbGlrZWx5IHByZWZpeC4gVGhpcyBpbXBsaWVzIHdlJ3JlIGluIHRoZSByZWFsbSBvZiBwYWNrZXQgZmlsdGVyaW5nIG9yIG1hbmlwdWxhdGlvbiBhdCB0aGUgbmV0d29yayBsZXZlbC4gVGhlIFwiY2hlY2tzdW1cIiBwYXJ0IGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eS4gVGhlIHF1ZXN0aW9uIG5vdyBpczogd2hhdCdzIHRoZSBzcGVjaWZpYyBkZWZpbml0aW9uIG9mIGBuZl9pcF9jaGVja3N1bWAgYW5kLCBtb3JlIGJyb2FkbHksIGBuZl9jaGVja3N1bWA/IEkgbmVlZCB0byB1bmRlcnN0YW5kICpwcmVjaXNlbHkqIGhvdyB0aGVzZSB0ZXJtcyBhcmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGZ1bmN0aW9ucywgc3RydWN0dXJlcywgb3IgcGVyaGFwcyBtYWNybyBkZWZpbml0aW9ucz8gQXJlIHRoZXNlIGNoZWNrc3VtcyBjYWxjdWxhdGVkIG9yIHZlcmlmaWVkLCBhbmQgYXQgd2hhdCBwb2ludHMgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lPyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2Ugb3IgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byBwaW5wb2ludCB0aGUgZXhhY3QgbWVhbmluZyBhbmQgdXNhZ2UuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSB3aWxsIGJlIHBhcnQgb2YgdGhlIG1lY2hhbmlzbSB1c2VkIGZvciB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayB0byBoYW5kbGUgSVAgaGVhZGVyIGNoZWNrc3VtcyBmb3IgcGFja2V0cyB0aGF0IGFyZSBiZWluZyBmaWx0ZXJlZCwgbW9kaWZpZWQsIG9yIGZvcndhcmRlZC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBmb3IgYW55IGluLWRlcHRoIG5ldHdvcmsgYW5hbHlzaXMgb3Igc2VjdXJpdHkgd29yayBJJ20gaW52b2x2ZWQgaW4sIHNvIEknbGwgd2FudCB0byBnZXQgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjIzLjc5OTM4OTI5NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2Mjc3MDUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9pcF9jaGVja3N1bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0Lmg9MjE9c3RydWN0IG5mX3F1ZXVlX2VudHJ5O1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oLTIzLSNpZmRlZiBDT05GSUdfSU5FVFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaDoyNDpfX3N1bTE2IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaC0yNS1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0Lmg9MjY9aW50IG5mX2lwX3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaC0yOC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaDoyOTpzdGF0aWMgaW5saW5lIF9fc3VtMTYgbmZfaXBfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oLTMwLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TWU5QUk9YWS5jPTEzPXN5bnByb3h5X3RnNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1NZTlBST1hZLmMtMjAtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TWU5QUk9YWS5jOjIxOlxcdGlmIChuZl9pcF9jaGVja3N1bShza2IsIHh0X2hvb2tudW0ocGFyKSwgcGFyLVxcdTAwM2V0aG9mZiwgSVBQUk9UT19UQ1ApKVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfU1lOUFJPWFkuYy0yMi1cXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jPTEwNT1zdHJ1Y3Qgc2tfYnVmZiAqbmZfcmVqZWN0X3NrYl92NF91bnJlYWNoKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTE0Mi1cXHQgICAgbmZfcmVqZWN0X3ZlcmlmeV9jc3VtKG9sZHNrYiwgZGF0YW9mZiwgcHJvdG8pIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MTQzOlxcdCAgICBuZl9pcF9jaGVja3N1bShvbGRza2IsIGhvb2ssIGlwX2hkcmxlbihvbGRza2IpLCBwcm90bykpXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMTQ0LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MTc1PW5mX3JlamVjdF9pcF90Y3BoZHJfZ2V0KHN0cnVjdCBza19idWZmICpvbGRza2IsXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0xOTYtXFx0LyogQ2hlY2sgY2hlY2tzdW0gKi9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzoxOTc6XFx0aWYgKG5mX2lwX2NoZWNrc3VtKG9sZHNrYiwgaG9vaywgaXBfaGRybGVuKG9sZHNrYiksIElQUFJPVE9fVENQKSlcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0xOTgtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0zNDg9dm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzY1LVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjM2NjpcXHRpZiAobmZfaXBfY2hlY2tzdW0oc2tiX2luLCBob29rLCBkYXRhb2ZmLCBwcm90bykgPT0gMClcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjctXFx0XFx0aWNtcF9zZW5kKHNrYl9pbiwgSUNNUF9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmM9MTE0PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2FkZF9oZWxwZXIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtMTE4LSAqIGZvciBoaWdoZXItbGF5ZXIgcHJvY2Vzc2luZyB0aGF0IGFzc3VtZXMgc2tiLVxcdTAwM2VsZW4gZXhjbHVkZXMgcGFkZGluZ1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjExOTogKiAoc3VjaCBhcyBuZl9pcF9jaGVja3N1bSkuIFRoZSBjYWxsZXIgbmVlZHMgdG8gcHVsbCB0aGUgc2tiIHRvIHRoZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTEyMC0gKiBuZXR3b3JrIGhlYWRlciwgYW5kIGVuc3VyZSBpcF9oZHIvaXB2Nl9oZHIgcG9pbnRzIHRvIHZhbGlkIGRhdGEuXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmM9MjA0PWludCBuZl9jb25udHJhY2tfaWNtcHY0X2Vycm9yKHN0cnVjdCBuZl9jb25uICp0bXBsLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTIyMS1cXHQgICAgc3RhdGUtXFx1MDAzZWhvb2sgPT0gTkZfSU5FVF9QUkVfUk9VVElORyBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYzoyMjI6XFx0ICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgc3RhdGUtXFx1MDAzZWhvb2ssIGRhdGFvZmYsIElQUFJPVE9fSUNNUCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMtMjIzLVxcdFxcdGljbXBfZXJyb3JfbG9nKHNrYiwgc3RhdGUsIFxcXCJiYWQgaHcgaWNtcCBjaGVja3N1bVxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYz00OTc9aW50IG5mX25hdF9pY21wX3JlcGx5X3RyYW5zbGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jLTUxNS1cXHRcXHRyZXR1cm4gMDtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjUxNjpcXHRpZiAobmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBoZHJsZW4sIElQUFJPVE9fSUNNUCkpXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy01MTctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtOS0jaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM6MTA6X19zdW0xNiBuZl9pcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTEtXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1OCBwcm90b2NvbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy0zOS19XFxubmV0L25ldGZpbHRlci91dGlscy5jOjQwOkVYUE9SVF9TWU1CT0wobmZfaXBfY2hlY2tzdW0pO1xcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy00MS0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtNDItXFxubmV0L25ldGZpbHRlci91dGlscy5jOjQzOnN0YXRpYyBfX3N1bTE2IG5mX2lwX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxubmV0L25ldGZpbHRlci91dGlscy5jLTQ0LVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jLTUyLVxcdFxcdGlmIChsZW4gPT0gc2tiLVxcdTAwM2VsZW4gLSBkYXRhb2ZmKVxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzo1MzpcXHRcXHRcXHRyZXR1cm4gbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7XFxubmV0L25ldGZpbHRlci91dGlscy5jLTU0LVxcdFxcdGZhbGx0aHJvdWdoO1xcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jPTEyMz1fX3N1bTE2IG5mX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jLTEzMC1cXHRjYXNlIEFGX0lORVQ6XFxubmV0L25ldGZpbHRlci91dGlscy5jOjEzMTpcXHRcXHRjc3VtID0gbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7XFxubmV0L25ldGZpbHRlci91dGlscy5jLTEzMi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYz0xNDI9X19zdW0xNiBuZl9jaGVja3N1bV9wYXJ0aWFsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jLTE0OS1cXHRjYXNlIEFGX0lORVQ6XFxubmV0L25ldGZpbHRlci91dGlscy5jOjE1MDpcXHRcXHRjc3VtID0gbmZfaXBfY2hlY2tzdW1fcGFydGlhbChza2IsIGhvb2ssIGRhdGFvZmYsIGxlbixcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTUxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHByb3RvY29sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MjUuNzYyMTY3MDk3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzI2NzY1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG5ldC9uZXRmaWx0ZXIvdXRpbHMuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIGBuZXQvbmV0ZmlsdGVyL3V0aWxzLmNgIHJpZ2h0IG5vdy4gSSBoYXZlIGEgaHVuY2ggYWJvdXQgYSBwb3RlbnRpYWwgaXNzdWUsIGFuZCBJIGJlbGlldmUgdGhlIGFuc3dlciBsaWVzIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMTIzLiBUaGF0IHBhcnRpY3VsYXIgcmVnaW9uIG9mdGVuIGRlYWxzIHdpdGggWyAqaW5zZXJ0IG15IHNwZWNpZmljIGFyZWEgb2YgZXhwZXJ0aXNlIHJlbGF0ZWQgdG8gbmV0ZmlsdGVyIGhlcmUgLSBlLmcuLCBjb25uZWN0aW9uIHRyYWNraW5nLCBOQVQsIGNvbm50cmFjayBtYW5pcHVsYXRpb24sIGV0Yy4qIF0sIGFuZCBJJ20gaG9waW5nIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBjb2RlIGZvciB0aGUgcHJvYmxlbS4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBkb25lIHRoZXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgaXNzdWUgSSdtIGludmVzdGlnYXRpbmcuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgdG8gYSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjI3LjgzNDg0NzQ3MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci91dGlscy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgcHJvdG9jb2wsXFxuIDExNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY3N1bV9zdWIoMCwgaHN1bSkpKTtcXG4gMTE3OlxcdFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcXG4gMTE4OlxcdFxcdFxcdHJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZV9oZWFkKHNrYiwgZGF0YW9mZiArIGxlbik7XFxuIDExOTpcXHRcXHR9XFxuIDEyMDpcXHRcXHRyZXR1cm4gY3N1bTtcXG4gMTIxOlxcdH07XFxuIDEyMjpcXHRcXG4gMTIzOlxcdF9fc3VtMTYgbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxuIDEyNDpcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHU4IHByb3RvY29sLFxcbiAxMjU6XFx0XFx0XFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4gMTI2OlxcdHtcXG4gMTI3OlxcdFxcdF9fc3VtMTYgY3N1bSA9IDA7XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdHN3aXRjaCAoZmFtaWx5KSB7XFxuIDEzMDpcXHRcXHRjYXNlIEFGX0lORVQ6XFxuIDEzMTpcXHRcXHRcXHRjc3VtID0gbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7XFxuIDEzMjpcXHRcXHRcXHRicmVhaztcXG4gMTMzOlxcdFxcdGNhc2UgQUZfSU5FVDY6XFxuIDEzNDpcXHRcXHRcXHRjc3VtID0gbmZfaXA2X2NoZWNrc3VtKHNrYiwgaG9vaywgZGF0YW9mZiwgcHJvdG9jb2wpO1xcbiAxMzU6XFx0XFx0XFx0YnJlYWs7XFxuIDEzNjpcXHRcXHR9XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdHJldHVybiBjc3VtO1xcbiAxMzk6XFx0fVxcbiAxNDA6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfY2hlY2tzdW0pO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRfX3N1bTE2IG5mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxuIDE0MzpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBsZW4sXFxuIDE0NDpcXHRcXHRcXHRcXHQgICAgdTggcHJvdG9jb2wsIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4gMTQ1OlxcdHtcXG4gMTQ2OlxcdFxcdF9fc3VtMTYgY3N1bSA9IDA7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdHN3aXRjaCAoZmFtaWx5KSB7XFxuIDE0OTpcXHRcXHRjYXNlIEFGX0lORVQ6XFxuIDE1MDpcXHRcXHRcXHRjc3VtID0gbmZfaXBfY2hlY2tzdW1fcGFydGlhbChza2IsIGhvb2ssIGRhdGFvZmYsIGxlbixcXG4gMTUxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHByb3RvY29sKTtcXG4gMTUyOlxcdFxcdFxcdGJyZWFrO1xcbiAxNTM6XFx0XFx0Y2FzZSBBRl9JTkVUNjpcXG4gMTU0OlxcdFxcdFxcdGNzdW0gPSBuZl9pcDZfY2hlY2tzdW1fcGFydGlhbChza2IsIGhvb2ssIGRhdGFvZmYsIGxlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MjcuODM0OTc5NTIxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxOTAyNTAyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYG5mdF9zeW5wcm94eV9kb19ldmFsYCB3YXMgcHJldmlvdXNseSBjYWxsaW5nIGBuZl9pcF9jaGVja3N1bSgpYCB1bmNvbmRpdGlvbmFsbHkuIFRoYXQncyBhIHByb2JsZW0sIGJlY2F1c2Ugd2hpbGUgYG5mdF9zeW5wcm94eV9kb19ldmFsYCAqaGFuZGxlcyogYm90aCBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgKEkgY2FuIHNlZSB0aGF0IGZyb20gdGhlIHByb3RvY29sIHN3aXRjaCBhbmQgdGhlIEV0aGVybmV0IGhlYWRlciBjaGVja3MpLCBgbmZfaXBfY2hlY2tzdW0oKWAgYXNzdW1lcyBJUHY0LiBTbywgd2l0aCBJUHY2LCBpdCB3b3VsZCBlaXRoZXIgZmFpbCBvdXRyaWdodCBvciBnaXZlIGEgYmFkIGNoZWNrc3VtIGNhbGN1bGF0aW9uLlxuXG5UaGUgZml4LCB3aGljaCBpcyBhIGdvb2Qgb25lLCByZXBsYWNlcyB0aGUgaGFyZGNvZGVkIGBuZl9pcF9jaGVja3N1bSgpYCBjYWxsIHdpdGggYSBtb3JlIGdlbmVyaWMgYG5mX2NoZWNrc3VtKClgLiBUaGlzIGNvcnJlY3RseSBjYWxscyBgbmZfaXBfY2hlY2tzdW0oKWAgZm9yIElQdjQgYW5kIGBuZl9pcDZfY2hlY2tzdW0oKWAgZm9yIElQdjYsIGRlcGVuZGluZyBvbiB0aGUgcGFja2V0J3MgYWRkcmVzcyBmYW1pbHksIGRldGVybWluZWQgYnkgYG5mdF9wZihwa3QpYC4gTXVjaCBiZXR0ZXIuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiDigJMgZG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXM/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqTm8gdXNlci1zcGFjZSBjb3B5OioqIEdvb2QuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aGF0IHdheS5cbjIuICAqKk5vIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHM6KiogIEV4Y2VsbGVudC4gIFRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm9yIGRvZXMgaXQgYWNjZXNzIGFueS4gVGhhdCdzIGEgYmlnIHJlbGllZi5cbjMuICAqKk5vIGJ1ZmZlci9zdHJ1Y3QgY2hhbmdlczoqKiBXZSdyZSBub3QgY2hhbmdpbmcgYW55IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIHNvIHdlIGNhbiBpZ25vcmUgdGhhdCBwYXJ0LlxuNC4gICoqS01TQU4gaW1wbGljYXRpb25zOioqIE9rYXksIGhlcmUncyB3aGVyZSB3ZSByZWFsbHkgbmVlZCB0byBiZSBjYXJlZnVsLiBgbmZfY2hlY2tzdW1gIHVsdGltYXRlbHkgY2FsbHMgYG5mX2lwX2NoZWNrc3VtYCBvciBgbmZfaXA2X2NoZWNrc3VtYCwgYW5kIHRob3NlIGZ1bmN0aW9ucyBhcmUgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgZGF0YSAqaW5zaWRlKiB0aGUgYHNrYmAuIElmIHRoZXJlIGFyZSBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcywgS0FTQU4gKG9yIHRoZSByZWxldmFudCBza2IgaGVscGVycykgd2lsbCBjYXRjaCBpdC4gVGhlIGNoYW5nZSBpc24ndCAqaW50cm9kdWNpbmcqIGFueSBuZXcgbWVtb3J5IHJlZ2lvbnMsIGFuZCB3ZSBhcmUgbm90IGxlYWtpbmcgYW55dGhpbmcgdG8gdXNlciBzcGFjZS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHdlIGFyZSBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnkgaXNzdWVzLCBpdCdzIHNhZmUgdG8gc2F5IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBUaGlzIGlzbid0IGEgc2l0dWF0aW9uIHdoZXJlIGEgZGVkaWNhdGVkIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIHJ1biBpcyB3YXJyYW50ZWQuIEtBU0FOIHdpbGwgaGFuZGxlIGl0LlxuXG5Ob3csIHRvIGRvY3VtZW50IHRoaXMgcmVhc29uaW5nIHByb3Blcmx5LCBsZXQncyBjbGVhcmx5IGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTjpcblxuKiAgICoqS0FTQU46KiogVGhpcyBwYXRjaCBmaXhlcyBhIHByb3RvY29sIGZhbWlseSBoYW5kbGluZyBpc3N1ZSBmb3IgVENQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbi4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nIGNvcnJlY3RseSB3aXRoIHRoZSBza2IncyBwYWNrZXQgcGFyc2luZywgYW5kIGFueSBwYWNrZXQgYm91bmRhcmllcyBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgS0FTQU4uXG4qICAgKipLTVNBTjoqKiAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29weS10by11c2VyIG9wZXJhdGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXG5cblJpZ2h0LCB0aGF0IHNlZW1zIGNvbXByZWhlbnNpdmUuIE5vdywgSSBzaG91bGQgYmUgYWJsZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDQsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MzQuMDI1MjMyOTQxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhIGhhcmRjb2RlZCBjYWxsIHRvIG5mX2lwX2NoZWNrc3VtKCkgd2l0aCBuZl9jaGVja3N1bSgpIGluIG5mdF9zeW5wcm94eV9kb19ldmFsKCkgc28gdGhhdCB0aGUgcHJvdG9jb2wgZmFtaWx5IChJUHY0IG9yIElQdjYpIGlzIGNvcnJlY3RseSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyB0aGUgVENQIGNoZWNrc3VtLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIHBhdGhzLCBpbmZvLWxlYWsgdmVjdG9ycywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwYWNrZXQgbWVtb3J5IGFjY2VzcyBib3VuZGFyaWVzIG9yIGludmFsaWQgc2tiIG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhIGhhcmRjb2RlZCBjYWxsIHRvIG5mX2lwX2NoZWNrc3VtKCkgd2l0aCBuZl9jaGVja3N1bSgpIGluIG5mdF9zeW5wcm94eV9kb19ldmFsKCkgc28gdGhhdCB0aGUgcHJvdG9jb2wgZmFtaWx5IChJUHY0IG9yIElQdjYpIGlzIGNvcnJlY3RseSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyB0aGUgVENQIGNoZWNrc3VtLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIHBhdGhzLCBpbmZvLWxlYWsgdmVjdG9ycywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwYWNrZXQgbWVtb3J5IGFjY2VzcyBib3VuZGFyaWVzIG9yIGludmFsaWQgc2tiIG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow9stwp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 20:33:18 +0000 UTC FinishedAt: 2026-09-10 20:36:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NFT_SYNPROXY", "NF_CONNTRACK", "NF_TABLES_INET", "NF_TABLES_IPV6", "NF_TABLES_IPV4" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NFT_SYNPROXY", "NF_CONNTRACK", "NF_TABLES_INET", "NF_TABLES_IPV6", "NF_TABLES_IPV4" ], "series_id": "409df54d-aefb-4c55-9712-bedf6288503e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_synproxy_do_eval", "nft_synproxy_eval", "nft_synproxy_obj_eval", "nft_synproxy_eval_v6", "nft_synproxy_eval_v4" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORlRfU1lOUFJPWFkmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JUFY2JiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JUFY0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3N5bnByb3h5X2RvX2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X3N5bnByb3h5X2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X3N5bnByb3h5X29ial9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y2JiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgY2FsbCB0byBuZl9pcF9jaGVja3N1bSgpIHdpdGggbmZfY2hlY2tzdW0oKSBpbiBuZnRfc3lucHJveHlfZG9fZXZhbCgpIHNvIHRoYXQgdGhlIHByb3RvY29sIGZhbWlseSAoSVB2NCBvciBJUHY2KSBpcyBjb3JyZWN0bHkgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIFRDUCBjaGVja3N1bS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIGluZm8tbGVhayB2ZWN0b3JzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBhY2tldCBtZW1vcnkgYWNjZXNzIGJvdW5kYXJpZXMgb3IgaW52YWxpZCBza2Igb3BlcmF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBUQ1AgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGluIG5mdGFibGVzIFNZTlBST1hZIGV4cHJlc3Npb24gZXZhbHVhdGlvbiAobmZ0X3N5bnByb3h5X2RvX2V2YWwpIGJ5IHN3aXRjaGluZyBmcm9tIG5mX2lwX2NoZWNrc3VtIHRvIGZhbWlseS1hd2FyZSBuZl9jaGVja3N1bSwgaW1wYWN0aW5nIElQdjQgYW5kIElQdjYgdHJhZmZpYyBwcm9jZXNzaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgbmV0bGluayBhbmQgbmV0d29yayBwYWNrZXQgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg0ZDJiMDM4MTg5NDQyYTg5YjE3MDMyNTcwODRiMGZlYWM2NWE4MThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDozNToyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jIGIvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xuaW5kZXggOWVkMjg4YzlkMTY4OC4uNTU0YTk2YTAwMGY0MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbkBAIC0xMTgsNyAmIzQzOzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChuZl9pcF9jaGVja3N1bShza2IsIG5mdF9ob29rKHBrdCksIHRob2ZmLCBJUFBST1RPX1RDUCkpIHtcbiYjNDM7XHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXG4mIzQzO1x0XHRcdG5mdF9wZihwa3QpKSkge1xuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4gXHRcdHJldHVybjtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZUX1NZTlBST1hZJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9zeW5wcm94eV9kb19ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9vYmpfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NiYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBUQ1AgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGluIG5mdGFibGVzIFNZTlBST1hZIGV4cHJlc3Npb24gZXZhbHVhdGlvbiAobmZ0X3N5bnByb3h5X2RvX2V2YWwpIGJ5IHN3aXRjaGluZyBmcm9tIG5mX2lwX2NoZWNrc3VtIHRvIGZhbWlseS1hd2FyZSBuZl9jaGVja3N1bSwgaW1wYWN0aW5nIElQdjQgYW5kIElQdjYgdHJhZmZpYyBwcm9jZXNzaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgbmV0bGluayBhbmQgbmV0d29yayBwYWNrZXQgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg0ZDJiMDM4MTg5NDQyYTg5YjE3MDMyNTcwODRiMGZlYWM2NWE4MTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAyMDozNToyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jCmluZGV4IDllZDI4OGM5ZDE2ODguLjU1NGE5NmEwMDBmNDAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYwpAQCAtMTE4LDcgJiM0MzsxMTgsOCBAQCBzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZG9fZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LAogCQlyZXR1cm47CiAJfQogCi0JaWYgKG5mX2lwX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQKSkgewomIzQzOwlpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsCiYjNDM7CQkJbmZ0X3BmKHBrdCkpKSB7CiAJCXJlZ3MtJmd0O3ZlcmRpY3QuY29kZSA9IE5GX0RST1A7CiAJCXJldHVybjsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeW5wcm94eSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY2AuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgZnVuY3Rpb24uIFRoZSBkaWZmIGhpZ2hsaWdodHMgYSBjaGFuZ2UgaW4gdGhlIGNoZWNrc3VtIGNhbGN1bGF0aW9uLiBQcmV2aW91c2x5LCBpdCB1c2VkIGBuZl9pcF9jaGVja3N1bWAsIGFuZCBub3cgaXQmIzM5O3Mgc3dhcHBlZCBvdXQgZm9yIGBuZl9jaGVja3N1bWAuIEFuZCwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhbiBhZGRpdGlvbiBvZiBgbmZ0X3BmKHBrdClgIHRvIHRoZSBhcmd1bWVudHMgb2YgYG5mX2NoZWNrc3VtYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gSVB2NiBzdXBwb3J0IG9yIGEgbW9yZSBnZW5lcmljIGNoZWNrc3VtbWluZyBpbXBsZW1lbnRhdGlvbi4gVGhlIGBuZnRfcGYocGt0KWAgc3VnZ2VzdHMgd2UmIzM5O3JlIG5vdyBhY2NvdW50aW5nIGZvciB0aGUgcGFja2V0IGZhbWlseS4gIFRoZSBvbGQgYG5mX2lwX2NoZWNrc3VtYCB3YXMgcHJldHR5IHNwZWNpZmljLCBzbyB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCBtb3ZlIGZvciBicm9hZGVyIGNvbXBhdGliaWxpdHkgYW5kIHBlcmZvcm1hbmNlLgoKVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBuZl9jaGVja3N1bWAsIGBuZnRfcGZgLCBhbmQgbWF5YmUgZXZlbiB0aGUgY29udGV4dCBvZiBgbmZ0X2hvb2tgIHRvIHNlZSBob3cgdGhpcyBwYXRjaCBmaXRzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdpbGwgdXNlIGByZWFkLWZpbGVgIGFuZC9vciBgZ3JlcHBlcmAgdG8gcHVsbCB0aG9zZSBkZWZpbml0aW9ucywgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBmb3IgYSBtb3JlIGRldGFpbGVkIGFuYWx5c2lzLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBpbiB0aGUgZmlyc3QgcGxhY2U6IHdoYXQmIzM5O3MgdGhlIG1vdGl2YXRpb24/IFdoYXQgaXNzdWUgaXMgaXQgc29sdmluZyBvciB3aGF0IGZlYXR1cmUgaXMgaXQgZW5hYmxpbmc/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4gMTAxOlx0XHRcdH1cbiAxMDI6XHRcdH1cbiAxMDM6XHR9XG4gMTA0Olx0I2VuZGlmIC8qIENPTkZJR19ORl9UQUJMRVNfSVBWNiovXG4gMTA1Olx0XG4gMTA2Olx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2RvX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcbiAxMDc6XHRcdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gMTA4Olx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4gMTA5Olx0e1xuIDExMDpcdFx0c3RydWN0IHN5bnByb3h5X29wdGlvbnMgb3B0cyA9IHt9O1xuIDExMTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4gMTEyOlx0XHRpbnQgdGhvZmYgPSBuZnRfdGhvZmYocGt0KTtcbiAxMTM6XHRcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcDtcbiAxMTQ6XHRcdHN0cnVjdCB0Y3BoZHIgX3RjcGg7XG4gMTE1Olx0XG4gMTE2Olx0XHRpZiAocGt0LVx1MDAzZXRwcm90ICE9IElQUFJPVE9fVENQKSB7XG4gMTE3Olx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xuIDExODpcdFx0XHRyZXR1cm47XG4gMTE5Olx0XHR9XG4gMTIwOlx0XG4gMTIxOlx0XHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXG4gMTIyOlx0XHRcdFx0bmZ0X3BmKHBrdCkpKSB7XG4gMTIzOlx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiAxMjQ6XHRcdFx0cmV0dXJuO1xuIDEyNTpcdFx0fVxuIDEyNjpcdFxuIDEyNzpcdFx0dGNwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgdGhvZmYsXG4gMTI4Olx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLFxuIDEyOTpcdFx0XHRcdFx0IFx1MDAyNl90Y3BoKTtcbiAxMzA6XHRcdGlmICghdGNwKSB7XG4gMTMxOlx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiAxMzI6XHRcdFx0cmV0dXJuO1xuIDEzMzpcdFx0fVxuIDEzNDpcdFxuIDEzNTpcdFx0aWYgKCFzeW5wcm94eV9wYXJzZV9vcHRpb25zKHNrYiwgdGhvZmYsIHRjcCwgXHUwMDI2b3B0cykpIHtcbiAxMzY6XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIDEzNzpcdFx0XHRyZXR1cm47XG4gMTM4Olx0XHR9XG4gMTM5Olx0XG4gMTQwOlx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuIDE0MTpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gMTQyOlx0XHRcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcdTAwMjZfdGNwaCwgXHUwMDI2b3B0cyk7XG4gMTQzOlx0XHRcdHJldHVybjtcbiAxNDQ6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0lQVjYpXG4gMTQ1Olx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuIDE0NjpcdFx0XHRuZnRfc3lucHJveHlfZXZhbF92Nihwcml2LCByZWdzLCBwa3QsIHRjcCwgXHUwMDI2X3RjcGgsIFx1MDAyNm9wdHMpO1xuIDE0NzpcdFx0XHRyZXR1cm47XG4gMTQ4Olx0I2VuZGlmXG4gMTQ5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgc3RhcnQgdG8gaW52ZXN0aWdhdGUgdGhlIGBuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jYCBmaWxlIGFuZCBpdHMgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbi4KCioqSW5pdGlhbCBFeHBsb3JhdGlvbiBvZiBuZnRfc3lucHJveHkuYyBhbmQgS2NvbmZpZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYG5mdF9zeW5wcm94eWAgbW9kdWxlLiBGaXJzdCwgSSB3YW50IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiB0aGUgZW52aXJvbm1lbnQgdGhhdCB0aGlzIG1vZHVsZSBpcyBsaXZpbmcgaW4uIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY2AgZGlyZWN0bHkuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBieSBleGFtaW5pbmcgdGhlIHNvdXJjZSBjb2RlLCBJIGNhbiBwaWNrIHVwIG9uIHRoZSBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmZhY2VzIHRoYXQgYXJlIGV4cG9zZWQgZm9yIHVzZSBlbHNld2hlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIE5ldGZpbHRlciBmcmFtZXdvcmssIGFzIHdlbGwgYXMgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgaW4gZ2VuZXJhbC4KClRoZW4sIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgY29kZSwgSSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIHRvIGV4YW1pbmUgdGhlIGFzc29jaWF0ZWQgYEtjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIHJlbGV2YW50IHN5bWJvbHMgYW5kIGNvbmZpZ3MgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmVzIGRlcGVuZCBvbiB0aGlzIG1vZHVsZSBhbmQgaG93IGl0IGlzIGJyb3VnaHQgaW50byB0aGUgYnVpbGQuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyBzb21ldGhpbmcgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zeW5wcm94eS5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9zeW5wcm94eS5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFx1MDAzZVxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9zeW5wcm94eS5oXHUwMDNlXG4gIDEzOlx0XG4gIDE0Olx0c3RydWN0IG5mdF9zeW5wcm94eSB7XG4gIDE1Olx0XHRzdHJ1Y3QgbmZfc3lucHJveHlfaW5mb1x0aW5mbztcbiAgMTY6XHR9O1xuICAxNzpcdFxuICAxODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc3lucHJveHlfcG9saWN5W05GVEFfU1lOUFJPWFlfTUFYICYjNDM7IDFdID0ge1xuICAxOTpcdFx0W05GVEFfU1lOUFJPWFlfTVNTXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXG4gIDIwOlx0XHRbTkZUQV9TWU5QUk9YWV9XU0NBTEVdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCBUQ1BfTUFYX1dTQ0FMRSksXG4gIDIxOlx0XHRbTkZUQV9TWU5QUk9YWV9GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GX1NZTlBST1hZX09QVF9NQVNLKSxcbiAgMjI6XHR9O1xuICAyMzpcdFxuICAyNDpcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhzdHJ1Y3Qgc3lucHJveHlfb3B0aW9ucyAqb3B0cyxcbiAgMjU6XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwLFxuICAyNjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0LFxuICAyNzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmZfc3lucHJveHlfaW5mbyAqaW5mbylcbiAgMjg6XHR7XG4gIDI5Olx0XHR0aGlzX2NwdV9pbmMoc25ldC1cdTAwM2VzdGF0cy1cdTAwM2VzeW5fcmVjZWl2ZWQpO1xuICAzMDpcdFx0aWYgKHRjcC1cdTAwM2VlY2UgXHUwMDI2XHUwMDI2IHRjcC1cdTAwM2Vjd3IpXG4gIDMxOlx0XHRcdG9wdHMtXHUwMDNlb3B0aW9ucyB8PSBORl9TWU5QUk9YWV9PUFRfRUNOO1xuICAzMjpcdFxuICAzMzpcdFx0b3B0cy1cdTAwM2VvcHRpb25zIFx1MDAyNj0gaW5mby1cdTAwM2VvcHRpb25zO1xuICAzNDpcdFx0b3B0cy1cdTAwM2Vtc3NfZW5jb2RlID0gb3B0cy1cdTAwM2Vtc3Nfb3B0aW9uO1xuICAzNTpcdFx0b3B0cy1cdTAwM2Vtc3Nfb3B0aW9uID0gaW5mby1cdTAwM2Vtc3M7XG4gIDM2Olx0XHRpZiAob3B0cy1cdTAwM2VvcHRpb25zIFx1MDAyNiBORl9TWU5QUk9YWV9PUFRfVElNRVNUQU1QKVxuICAzNzpcdFx0XHRzeW5wcm94eV9pbml0X3RpbWVzdGFtcF9jb29raWUoaW5mbywgb3B0cyk7XG4gIDM4Olx0XHRlbHNlXG4gIDM5Olx0XHRcdG9wdHMtXHUwMDNlb3B0aW9ucyBcdTAwMjY9IH4oTkZfU1lOUFJPWFlfT1BUX1dTQ0FMRSB8XG4gIDQwOlx0XHRcdFx0XHQgICBORl9TWU5QUk9YWV9PUFRfU0FDS19QRVJNIHxcbiAgNDE6XHRcdFx0XHRcdCAgIE5GX1NZTlBST1hZX09QVF9FQ04pO1xuICA0MjpcdH1cbiAgNDM6XHRcbiAgNDQ6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92NChjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxuICA0NTpcdFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbiAgNDY6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiAgNDc6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3AsXG4gIDQ4Olx0XHRcdFx0XHQgc3RydWN0IHRjcGhkciAqX3RjcGgsXG4gIDQ5Olx0XHRcdFx0XHQgc3RydWN0IHN5bnByb3h5X29wdGlvbnMgKm9wdHMpXG4gIDUwOlx0e1xuICA1MTpcdFx0c3RydWN0IG5mX3N5bnByb3h5X2luZm8gaW5mbyA9IFJFQURfT05DRShwcml2LVx1MDAzZWluZm8pO1xuICA1MjpcdFx0c3RydWN0IG5ldCAqbmV0ID0gbmZ0X25ldChwa3QpO1xuICA1MzpcdFx0c3RydWN0IHN5bnByb3h5X25ldCAqc25ldCA9IHN5bnByb3h5X3Blcm5ldChuZXQpO1xuICA1NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4gIDU1Olx0XG4gIDU2Olx0XHRpZiAodGNwLVx1MDAzZXN5bikge1xuICA1NzpcdFx0XHQvKiBJbml0aWFsIFNZTiBmcm9tIGNsaWVudCAqL1xuICA1ODpcdFx0XHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcdTAwMjZpbmZvKTtcbiAgNTk6XHRcdFx0c3lucHJveHlfc2VuZF9jbGllbnRfc3luYWNrKG5ldCwgc2tiLCB0Y3AsIG9wdHMpO1xuICA2MDpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuICA2MTpcdFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX1NUT0xFTjtcbiAgNjI6XHRcdH0gZWxzZSBpZiAodGNwLVx1MDAzZWFjaykge1xuICA2MzpcdFx0XHQvKiBBQ0sgZnJvbSBjbGllbnQgKi9cbiAgNjQ6XHRcdFx0aWYgKHN5bnByb3h5X3JlY3ZfY2xpZW50X2FjayhuZXQsIHNrYiwgdGNwLCBvcHRzLFxuICA2NTpcdFx0XHRcdFx0XHQgICAgIG50b2hsKHRjcC1cdTAwM2VzZXEpKSkge1xuICA2NjpcdFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gIDY3Olx0XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XG4gIDY4Olx0XHRcdH0gZWxzZSB7XG4gIDY5Olx0XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuICA3MDpcdFx0XHR9XG4gIDcxOlx0XHR9XG4gIDcyOlx0fVxuICA3MzpcdFxuICA3NDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfSVBWNilcbiAgNzU6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92Nihjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxuICA3NjpcdFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbiAgNzc6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiAgNzg6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3AsXG4gIDc5Olx0XHRcdFx0XHQgc3RydWN0IHRjcGhkciAqX3RjcGgsXG4gIDgwOlx0XHRcdFx0XHQgc3RydWN0IHN5bnByb3h5X29wdGlvbnMgKm9wdHMpXG4gIDgxOlx0e1xuICA4MjpcdFx0c3RydWN0IG5mX3N5bnByb3h5X2luZm8gaW5mbyA9IFJFQURfT05DRShwcml2LVx1MDAzZWluZm8pO1xuICA4MzpcdFx0c3RydWN0IG5ldCAqbmV0ID0gbmZ0X25ldChwa3QpO1xuICA4NDpcdFx0c3RydWN0IHN5bnByb3h5X25ldCAqc25ldCA9IHN5bnByb3h5X3Blcm5ldChuZXQpO1xuICA4NTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4gIDg2Olx0XG4gIDg3Olx0XHRpZiAodGNwLVx1MDAzZXN5bikge1xuICA4ODpcdFx0XHQvKiBJbml0aWFsIFNZTiBmcm9tIGNsaWVudCAqL1xuICA4OTpcdFx0XHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcdTAwMjZpbmZvKTtcbiAgOTA6XHRcdFx0c3lucHJveHlfc2VuZF9jbGllbnRfc3luYWNrX2lwdjYobmV0LCBza2IsIHRjcCwgb3B0cyk7XG4gIDkxOlx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gIDkyOlx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfU1RPTEVOO1xuICA5MzpcdFx0fSBlbHNlIGlmICh0Y3AtXHUwMDNlYWNrKSB7XG4gIDk0Olx0XHRcdC8qIEFDSyBmcm9tIGNsaWVudCAqL1xuICA5NTpcdFx0XHRpZiAoc3lucHJveHlfcmVjdl9jbGllbnRfYWNrX2lwdjYobmV0LCBza2IsIHRjcCwgb3B0cyxcbiAgOTY6XHRcdFx0XHRcdFx0XHQgIG50b2hsKHRjcC1cdTAwM2VzZXEpKSkge1xuICA5NzpcdFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gIDk4Olx0XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XG4gIDk5Olx0XHRcdH0gZWxzZSB7XG4gMTAwOlx0XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dDoKCioqQW5hbHl6aW5nIGBuZnRfc3lucHJveHkuY2AgRnVydGhlcioqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkOiBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kICphY3R1YWxseSogZXhhbWluZSB0aGUgY29kZSBpbiBgbmZ0X3N5bnByb3h5LmNgLiBObyBtb3JlIHRoZW9yZXRpY2FsIGRpc2N1c3Npb25zLCBubyBtb3JlIGxvb2tpbmcgYXQgdGhlIHByb2JsZW0gZnJvbSB0aGUgb3V0c2lkZSDigJMgdGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kICpyZWFsbHkqIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgbmVlZCB0byBzZWUgdGhlIG5pdHR5LWdyaXR0eTogaG93IGl0JiMzOTtzICphY3R1YWxseSogZG9uZS4gV2hlcmUgYXJlIHRoZSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXM/IFdoYXQmIzM5O3MgdGhlIGZsb3cgY29udHJvbD8gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbiBjYWxscz8gV2hhdCBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZSBwcmVzZW50PyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyBhY2NvdW50ZWQgZm9yPyBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBwcmFjdGljYWwgZXhlY3V0aW9uIG9mIHRoZSBzeW5wcm94eSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLCB0aGUgYXNzdW1wdGlvbnMgYmFrZWQgaW50byB0aGUgZGVzaWduLCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyB0aGF0IG1pZ2h0IHJlcXVpcmUgY2xvc2VyIHNjcnV0aW55IGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3IgZnV0dXJlIG1haW50YWluYWJpbGl0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4gMTUxOlx0fVxuIDE1MjpcdFxuIDE1MzpcdHN0YXRpYyBpbnQgbmZ0X3N5bnByb3h5X2RvX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiAxNTQ6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIDE1NTpcdFx0XHRcdFx0c3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdilcbiAxNTY6XHR7XG4gMTU3Olx0XHRzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0ID0gc3lucHJveHlfcGVybmV0KGN0eC1cdTAwM2VuZXQpO1xuIDE1ODpcdFx0dTMyIGZsYWdzO1xuIDE1OTpcdFx0aW50IGVycjtcbiAxNjA6XHRcbiAxNjE6XHRcdGlmICh0YltORlRBX1NZTlBST1hZX01TU10pXG4gMTYyOlx0XHRcdHByaXYtXHUwMDNlaW5mby5tc3MgPSBudG9ocyhubGFfZ2V0X2JlMTYodGJbTkZUQV9TWU5QUk9YWV9NU1NdKSk7XG4gMTYzOlx0XHRpZiAodGJbTkZUQV9TWU5QUk9YWV9XU0NBTEVdKVxuIDE2NDpcdFx0XHRwcml2LVx1MDAzZWluZm8ud3NjYWxlID0gbmxhX2dldF91OCh0YltORlRBX1NZTlBST1hZX1dTQ0FMRV0pO1xuIDE2NTpcdFx0aWYgKHRiW05GVEFfU1lOUFJPWFlfRkxBR1NdKSB7XG4gMTY2Olx0XHRcdGZsYWdzID0gbnRvaGwobmxhX2dldF9iZTMyKHRiW05GVEFfU1lOUFJPWFlfRkxBR1NdKSk7XG4gMTY3Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgfk5GX1NZTlBST1hZX09QVF9NQVNLKVxuIDE2ODpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAxNjk6XHRcdFx0cHJpdi1cdTAwM2VpbmZvLm9wdGlvbnMgPSBmbGFncztcbiAxNzA6XHRcdH1cbiAxNzE6XHRcbiAxNzI6XHRcdGVyciA9IG5mX2N0X25ldG5zX2dldChjdHgtXHUwMDNlbmV0LCBjdHgtXHUwMDNlZmFtaWx5KTtcbiAxNzM6XHRcdGlmIChlcnIpXG4gMTc0Olx0XHRcdHJldHVybiBlcnI7XG4gMTc1Olx0XG4gMTc2Olx0XHRzd2l0Y2ggKGN0eC1cdTAwM2VmYW1pbHkpIHtcbiAxNzc6XHRcdGNhc2UgTkZQUk9UT19JUFY0OlxuIDE3ODpcdFx0XHRlcnIgPSBuZl9zeW5wcm94eV9pcHY0X2luaXQoc25ldCwgY3R4LVx1MDAzZW5ldCk7XG4gMTc5Olx0XHRcdGlmIChlcnIpXG4gMTgwOlx0XHRcdFx0Z290byBuZl9jdF9mYWlsdXJlO1xuIDE4MTpcdFx0XHRicmVhaztcbiAxODI6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0lQVjYpXG4gMTgzOlx0XHRjYXNlIE5GUFJPVE9fSVBWNjpcbiAxODQ6XHRcdFx0ZXJyID0gbmZfc3lucHJveHlfaXB2Nl9pbml0KHNuZXQsIGN0eC1cdTAwM2VuZXQpO1xuIDE4NTpcdFx0XHRpZiAoZXJyKVxuIDE4NjpcdFx0XHRcdGdvdG8gbmZfY3RfZmFpbHVyZTtcbiAxODc6XHRcdFx0YnJlYWs7XG4gMTg4Olx0I2VuZGlmXG4gMTg5Olx0XHRjYXNlIE5GUFJPVE9fSU5FVDpcbiAxOTA6XHRcdFx0ZXJyID0gbmZfc3lucHJveHlfaXB2NF9pbml0KHNuZXQsIGN0eC1cdTAwM2VuZXQpO1xuIDE5MTpcdFx0XHRpZiAoZXJyKVxuIDE5MjpcdFx0XHRcdGdvdG8gbmZfY3RfZmFpbHVyZTtcbiAxOTM6XHRcdFx0ZXJyID0gbmZfc3lucHJveHlfaXB2Nl9pbml0KHNuZXQsIGN0eC1cdTAwM2VuZXQpO1xuIDE5NDpcdFx0XHRpZiAoZXJyKSB7XG4gMTk1Olx0XHRcdFx0bmZfc3lucHJveHlfaXB2NF9maW5pKHNuZXQsIGN0eC1cdTAwM2VuZXQpO1xuIDE5NjpcdFx0XHRcdGdvdG8gbmZfY3RfZmFpbHVyZTtcbiAxOTc6XHRcdFx0fVxuIDE5ODpcdFx0XHRicmVhaztcbiAxOTk6XHRcdH1cbiAyMDA6XHRcbiAyMDE6XHRcdHJldHVybiAwO1xuIDIwMjpcdFxuIDIwMzpcdG5mX2N0X2ZhaWx1cmU6XG4gMjA0Olx0XHRuZl9jdF9uZXRuc19wdXQoY3R4LVx1MDAzZW5ldCwgY3R4LVx1MDAzZWZhbWlseSk7XG4gMjA1Olx0XHRyZXR1cm4gZXJyO1xuIDIwNjpcdH1cbiAyMDc6XHRcbiAyMDg6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZG9fZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4KVxuIDIwOTpcdHtcbiAyMTA6XHRcdHN0cnVjdCBzeW5wcm94eV9uZXQgKnNuZXQgPSBzeW5wcm94eV9wZXJuZXQoY3R4LVx1MDAzZW5ldCk7XG4gMjExOlx0XG4gMjEyOlx0XHRzd2l0Y2ggKGN0eC1cdTAwM2VmYW1pbHkpIHtcbiAyMTM6XHRcdGNhc2UgTkZQUk9UT19JUFY0OlxuIDIxNDpcdFx0XHRuZl9zeW5wcm94eV9pcHY0X2Zpbmkoc25ldCwgY3R4LVx1MDAzZW5ldCk7XG4gMjE1Olx0XHRcdGJyZWFrO1xuIDIxNjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfSVBWNilcbiAyMTc6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuIDIxODpcdFx0XHRuZl9zeW5wcm94eV9pcHY2X2Zpbmkoc25ldCwgY3R4LVx1MDAzZW5ldCk7XG4gMjE5Olx0XHRcdGJyZWFrO1xuIDIyMDpcdCNlbmRpZlxuIDIyMTpcdFx0Y2FzZSBORlBST1RPX0lORVQ6XG4gMjIyOlx0XHRcdG5mX3N5bnByb3h5X2lwdjRfZmluaShzbmV0LCBjdHgtXHUwMDNlbmV0KTtcbiAyMjM6XHRcdFx0bmZfc3lucHJveHlfaXB2Nl9maW5pKHNuZXQsIGN0eC1cdTAwM2VuZXQpO1xuIDIyNDpcdFx0XHRicmVhaztcbiAyMjU6XHRcdH1cbiAyMjY6XHRcdG5mX2N0X25ldG5zX3B1dChjdHgtXHUwMDNlbmV0LCBjdHgtXHUwMDNlZmFtaWx5KTtcbiAyMjc6XHR9XG4gMjI4Olx0XG4gMjI5Olx0c3RhdGljIGludCBuZnRfc3lucHJveHlfZG9fZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2KVxuIDIzMDpcdHtcbiAyMzE6XHRcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBORlRBX1NZTlBST1hZX01TUywgaHRvbnMocHJpdi1cdTAwM2VpbmZvLm1zcykpIHx8XG4gMjMyOlx0XHQgICAgbmxhX3B1dF91OChza2IsIE5GVEFfU1lOUFJPWFlfV1NDQUxFLCBwcml2LVx1MDAzZWluZm8ud3NjYWxlKSB8fFxuIDIzMzpcdFx0ICAgIG5sYV9wdXRfYmUzMihza2IsIE5GVEFfU1lOUFJPWFlfRkxBR1MsIGh0b25sKHByaXYtXHUwMDNlaW5mby5vcHRpb25zKSkpXG4gMjM0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDIzNTpcdFxuIDIzNjpcdFx0cmV0dXJuIDA7XG4gMjM3Olx0XG4gMjM4Olx0bmxhX3B1dF9mYWlsdXJlOlxuIDIzOTpcdFx0cmV0dXJuIC0xO1xuIDI0MDpcdH1cbiAyNDE6XHRcbiAyNDI6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gMjQzOlx0XHRcdFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuIDI0NDpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuIDI0NTpcdHtcbiAyNDY6XHRcdGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIDI0NzpcdFxuIDI0ODpcdFx0bmZ0X3N5bnByb3h5X2RvX2V2YWwocHJpdiwgcmVncywgcGt0KTtcbiAyNDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIGZvciBuZnRfc3lucHJveHkqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYG5mdF9zeW5wcm94eWAuIExldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgdGhpcyBpcyBhIG1vZHVsZSBvciBidWlsdC1pbiwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpdCYjMzk7cyBlbmFibGVkLiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJJiMzOTtsbCBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKmludGVyZXN0aW5nKiBkZWZhdWx0cy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgYW55IG5ldyBvcHRpb25zIGFyZSBleHBvc2VkIGJhc2VkIG9uIHRoaXMgc2VsZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBtZW51IHN0cnVjdHVyZSBhbmQgdGhlIGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORlRfU1lOUFJPWFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0OTpjb25maWcgTkZUX1NZTlBST1hZXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjUwLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzMj1vYmotJChDT05GSUdfTkZUX1hGUk0pXHRcdCYjNDM7PSBuZnRfeGZybS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzMzpvYmotJChDT05GSUdfTkZUX1NZTlBST1hZKVx0JiM0Mzs9IG5mdF9zeW5wcm94eS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2NDkuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4YW1pbmluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbmV0ZmlsdGVyLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gYmUgdGhlcmUgLSBtYXliZSBhIG5ldyBmZWF0dXJlLCBhIGNoYW5nZSBpbiBob3cgc29tZXRoaW5nJiMzOTtzIGVuYWJsZWQsIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5IEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBob2xkcyBmb3IgdXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0NTpcdFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG4gNjQ2Olx0XHRoZWxwXG4gNjQ3Olx0XHQgIFRoaXMgbWFrZXMgdHJhbnNwYXJlbnQgcHJveHkgc3VwcG9ydCBhdmFpbGFibGUgaW4gbmZ0YWJsZXMuXG4gNjQ4Olx0XG4gNjQ5Olx0Y29uZmlnIE5GVF9TWU5QUk9YWVxuIDY1MDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiA2NTE6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORVRGSUxURVJfQURWQU5DRURcbiA2NTI6XHRcdHNlbGVjdCBORVRGSUxURVJfU1lOUFJPWFlcbiA2NTM6XHRcdHNlbGVjdCBTWU5fQ09PS0lFU1xuIDY1NDpcdFx0aGVscFxuIDY1NTpcdFx0ICBUaGUgU1lOUFJPWFkgZXhwcmVzc2lvbiBhbGxvd3MgeW91IHRvIGludGVyY2VwdCBUQ1AgY29ubmVjdGlvbnMgYW5kXG4gNjU2Olx0XHQgIGVzdGFibGlzaCB0aGVtIHVzaW5nIHN5bmNvb2tpZXMgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCBvbiB0byB0aGVcbiA2NTc6XHRcdCAgc2VydmVyLiBUaGlzIGFsbG93cyB0byBhdm9pZCBjb25udHJhY2sgYW5kIHNlcnZlciByZXNvdXJjZSB1c2FnZVxuIDY1ODpcdFx0ICBkdXJpbmcgU1lOLWZsb29kIGF0dGFja3MuXG4gNjU5Olx0XG4gNjYwOlx0aWYgTkZfVEFCTEVTX05FVERFVlxuIDY2MTpcdFxuIDY2MjpcdGNvbmZpZyBORl9EVVBfTkVUREVWXG4gNjYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnRcJiMzNDtcbiA2NjQ6XHRcdGhlbHBcbiA2NjU6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZ2VuZXJpYyBwYWNrZXQgZHVwbGljYXRpb24gaW5mcmFzdHJ1Y3R1cmVcbiA2NjY6XHRcdCAgZm9yIE5ldGZpbHRlci5cbiA2Njc6XHRcbiA2Njg6XHRjb25maWcgTkZUX0RVUF9ORVRERVZcbiA2Njk6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gNjcwOlx0XHRzZWxlY3QgTkZfRFVQX05FVERFVlxuIDY3MTpcdFx0aGVscFxuIDY3MjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBmb3IgdGhlIFwmIzM0O25ldGRldlwmIzM0OyBmYW1pbHkuXG4gNjczOlx0XG4gNjc0Olx0Y29uZmlnIE5GVF9GV0RfTkVUREVWXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5ldGZpbHRlciBDaGVja3N1bW1pbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZl9jaGVja3N1bWAgc2l0dWF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IsIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGF0IG9sZGVyIGBuZl9pcF9jaGVja3N1bWAgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZ2V0IHRoZSBkZXRhaWxzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGBncmVwYCB0byBwaW5wb2ludCB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgbmZfY2hlY2tzdW1gIHdpdGhpbiB0aGUgc291cmNlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgdXNhZ2UuIEZyb20gdGhlcmUsIEkgY2FuIGNvbXBhcmUgaXQgdG8gdGhlIG9sZGVyIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZXZvbHV0aW9uIG9mIHRoZSBjaGVja3N1bSBoYW5kbGluZyBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY2hlY2tzdW1cXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oPTM3Mz1zdHJ1Y3QgbmZfcXVldWVfZW50cnk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3NC1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6Mzc1Ol9fc3VtMTYgbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3Ni1cdFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCxcbi0tXG5pbmNsdWRlL25ldC9pcF92cy5oPTIxMTc9c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjEyMi1cdC8qIFZhbGlkYXRlIGNzdW0gZXZlbiBmb3IgRk9SV0FSRCAqL1xuaW5jbHVkZS9uZXQvaXBfdnMuaDoyMTIzOlx0cmV0dXJuICFuZl9jaGVja3N1bShza2IsIE5GX0lORVRfTE9DQUxfSU4sIG9mZnNldCwgcHJvdG8sIGFmKTtcbmluY2x1ZGUvbmV0L2lwX3ZzLmgtMjEyNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRml4aW5nIGEgQ3JpdGljYWwgQ2hlY2tzdW0gQnVnIGluIGBuZnRfc3lucHJveHlgIGZvciBJUHY2KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGBuZnRfc3lucHJveHlgIGNvZGUsIGFuZCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBhIHByb2JsZW0uIEl0IHN1cHBvcnRzIGJvdGggSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgZ3JlYXQsIGhhbmRsaW5nIGBORlBST1RPX0lQVjRgLCBgTkZQUk9UT19JUFY2YCwgYW5kIHRoZSBvdGhlcnMuIEhvd2V2ZXIsIGl0IHdhcyB1bmNvbmRpdGlvbmFsbHkgY2FsbGluZyBgbmZfaXBfY2hlY2tzdW1gLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IGBuZl9pcF9jaGVja3N1bWAgaXMgc3BlY2lmaWNhbGx5IElQdjQgb25seS4gRm9yIElQdjYgd2UgbmVlZCBgbmZfaXA2X2NoZWNrc3VtYCwgb3IgYSBnZW5lcmljIGFwcHJvYWNoIGxpa2UgYG5mX2NoZWNrc3VtYCB3aXRoIGBuZnRfcGYocGt0KWAuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgKG9yIHdoaWNoZXZlciBldmFsdWF0aW9uIGZ1bmN0aW9uIGlzIHVzZWQpIHByb2Nlc3NlcyBhbiBJUHY2IHBhY2tldCwgaXQmIzM5O3MgdXNpbmcgdGhlIHdyb25nIGNoZWNrc3VtIGNhbGN1bGF0aW9uLCBzcGVjaWZpY2FsbHksIHRoZSBgaXBfaGRyKHNrYilgIGlzIGJlaW5nIHVzZWQgb24gdGhlIElQdjYgcGFja2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjaGVja3N1bXMgYW5kIGxpa2VseSBtYWxmb3JtZWQgaGFuZGxpbmcsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHdoYXQgd2Ugd2FudC4KClRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkLiBSZXBsYWNlIHRoZSBjYWxsIHRvIGBuZl9pcF9jaGVja3N1bWAgd2l0aCBgbmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsIG5mdF9wZihwa3QpKWAuIFRoaXMgdXNlcyB0aGUgZ2VuZXJpYyBjaGVja3N1bSBmdW5jdGlvbiwgbWFraW5nIHN1cmUgd2UgcGljayB0aGUgY29ycmVjdCBwcm90b2NvbCBmYW1pbHkgdG8gY29tcHV0ZSB0aGUgY2hlY2tzdW0sIHdoaWNoIHNvbHZlcyB0aGUgSVB2NiBjaGVja3N1bSB2ZXJpZmljYXRpb24gcHJvYmxlbSBhbmQgaXMgbW9yZSBnZW5lcmFsLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlLCBhbmQgaXMgaXQgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIHNlZS4uLgoKUmVhY2hhYmlsaXR5OiBXZWxsLCBOZXRmaWx0ZXIgYW5kIG5mdGFibGVzIHN5bnByb3h5IGFyZSBmdWxseSBlbXVsYXRhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzaW5nIG5ldGxpbmsgc29ja2V0cyB0byBjcmVhdGUgbmZ0YWJsZXMgcnVsZXMgd2l0aCB0aGUgc3lucHJveHkgZXhwcmVzc2lvbi4gUGFja2V0IGdlbmVyYXRpb24gb3ZlciBsb29wYmFjaywgdHVuL3RhcCwgb3IgdmV0aCBkZXZpY2VzIGlzIHNpbXBsZS4gSXQmIzM5O3MgZXZlbiByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwcy4gQ2hlY2shCgpNb2RpZmljYXRpb25zIGluIGNvcmUgc3Vic3lzdGVtcyAvIG5ldHdvcmtpbmc6IFllcywgdGhpcyBkZWZpbml0ZWx5IG1vZGlmaWVzIHBhY2tldCBldmFsdWF0aW9uIGxvZ2ljIGluIG5ldGZpbHRlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgTkZUIHN5bnByb3h5IGV4cHJlc3Npb24uIEFub3RoZXIgY2hlY2shCgpXb3J0aEZ1enppbmc6IEkmIzM5O2Qgc2F5IHllcywgYmVjYXVzZSB0aGlzIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFdpdGggYWxsIG9mIHRoYXQsIGl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlIGlzIGEgcHJpbWUgY2FuZGlkYXRlLgoKQ29uZmlnczogTGV0IG1lIGNoZWNrIHRoZSBjb25maWdzLiBgQ09ORklHX05GVF9TWU5QUk9YWWAsIGBDT05GSUdfTkZfVEFCTEVTYCwgYENPTkZJR19ORl9DT05OVFJBQ0tgLCBgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRGAsIGBDT05GSUdfTkZfVEFCTEVTX0lORVRgLCBgQ09ORklHX05GX1RBQkxFU19JUFY2YCwgYENPTkZJR19ORl9UQUJMRVNfSVBWNGAsIGFuZCBgQ09ORklHX05GX1RBQkxFU19ORVRERVZgIGFsbCBzZWVtIHJlbGV2YW50LgoKU3ltYm9sczogVGhlIG1haW4gc3ltYm9scyB0byBjb25zaWRlciBhcmUgYG5mdF9zeW5wcm94eV9kb19ldmFsYCAob3IgYG5mdF9zeW5wcm94eV9ldmFsYCksIGBuZnRfc3lucHJveHlfZXZhbF92NGAsIGBuZnRfc3lucHJveHlfZXZhbF92NmAsIGBuZnRfc3lucHJveHlfZG9faW5pdGAsIGFuZCBgbmZ0X3N5bnByb3h5X29ial9ldmFsYC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBieSBpbnNwZWN0aW5nIGBuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0fVxuIDI0MTpcdFxuIDI0MjpcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiAyNDM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gMjQ0Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4gMjQ1Olx0e1xuIDI0NjpcdFx0Y29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG4gMjQ3Olx0XG4gMjQ4Olx0XHRuZnRfc3lucHJveHlfZG9fZXZhbChwcml2LCByZWdzLCBwa3QpO1xuIDI0OTpcdH1cbiAyNTA6XHRcbiAyNTE6XHRzdGF0aWMgaW50IG5mdF9zeW5wcm94eV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIDI1MjpcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbiAyNTM6XHR7XG4gMjU0Olx0XHRpZiAoY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjQgXHUwMDI2XHUwMDI2XG4gMjU1Olx0XHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lQVjYgXHUwMDI2XHUwMDI2XG4gMjU2Olx0XHQgICAgY3R4LVx1MDAzZWZhbWlseSAhPSBORlBST1RPX0lORVQpXG4gMjU3Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAyNTg6XHRcbiAyNTk6XHRcdHJldHVybiBuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MoY3R4LVx1MDAzZWNoYWluLCAoMSBcdTAwM2NcdTAwM2MgTkZfSU5FVF9MT0NBTF9JTikgfFxuIDI2MDpcdFx0XHRcdFx0XHRcdCAgICAoMSBcdTAwM2NcdTAwM2MgTkZfSU5FVF9GT1JXQVJEKSk7XG4gMjYxOlx0fVxuIDI2MjpcdFxuIDI2MzpcdHN0YXRpYyBpbnQgbmZ0X3N5bnByb3h5X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiAyNjQ6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiAyNjU6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxuIDI2NjpcdHtcbiAyNjc6XHRcdHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIDI2ODpcdFxuIDI2OTpcdFx0cmV0dXJuIG5mdF9zeW5wcm94eV9kb19pbml0KGN0eCwgdGIsIHByaXYpO1xuIDI3MDpcdH1cbiAyNzE6XHRcbiAyNzI6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIDI3MzpcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbiAyNzQ6XHR7XG4gMjc1Olx0XHRuZnRfc3lucHJveHlfZG9fZGVzdHJveShjdHgpO1xuIDI3NjpcdH1cbiAyNzc6XHRcbiAyNzg6XHRzdGF0aWMgaW50IG5mdF9zeW5wcm94eV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4gMjc5Olx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXG4gMjgwOlx0e1xuIDI4MTpcdFx0c3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG4gMjgyOlx0XG4gMjgzOlx0XHRyZXR1cm4gbmZ0X3N5bnByb3h5X2RvX2R1bXAoc2tiLCBwcml2KTtcbiAyODQ6XHR9XG4gMjg1Olx0XG4gMjg2Olx0c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9zeW5wcm94eV90eXBlO1xuIDI4NzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9zeW5wcm94eV9vcHMgPSB7XG4gMjg4Olx0XHQuZXZhbFx0XHQ9IG5mdF9zeW5wcm94eV9ldmFsLFxuIDI4OTpcdFx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3N5bnByb3h5KSksXG4gMjkwOlx0XHQuaW5pdFx0XHQ9IG5mdF9zeW5wcm94eV9pbml0LFxuIDI5MTpcdFx0LmRlc3Ryb3lcdD0gbmZ0X3N5bnByb3h5X2Rlc3Ryb3ksXG4gMjkyOlx0XHQuZHVtcFx0XHQ9IG5mdF9zeW5wcm94eV9kdW1wLFxuIDI5MzpcdFx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfc3lucHJveHlfdHlwZSxcbiAyOTQ6XHRcdC52YWxpZGF0ZVx0PSBuZnRfc3lucHJveHlfdmFsaWRhdGUsXG4gMjk1Olx0fTtcbiAyOTY6XHRcbiAyOTc6XHRzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X3N5bnByb3h5X3R5cGUgX19yZWFkX21vc3RseSA9IHtcbiAyOTg6XHRcdC5vcHNcdFx0PSBcdTAwMjZuZnRfc3lucHJveHlfb3BzLFxuIDI5OTpcdFx0Lm5hbWVcdFx0PSBcJiMzNDtzeW5wcm94eVwmIzM0OyxcbiAzMDA6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIDMwMTpcdFx0LnBvbGljeVx0XHQ9IG5mdF9zeW5wcm94eV9wb2xpY3ksXG4gMzAyOlx0XHQubWF4YXR0clx0PSBORlRBX1NZTlBST1hZX01BWCxcbiAzMDM6XHR9O1xuIDMwNDpcdFxuIDMwNTpcdHN0YXRpYyBpbnQgbmZ0X3N5bnByb3h5X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gMzA2Olx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4gMzA3Olx0XHRcdFx0XHQgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbiAzMDg6XHR7XG4gMzA5Olx0XHRzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gMzEwOlx0XG4gMzExOlx0XHRyZXR1cm4gbmZ0X3N5bnByb3h5X2RvX2luaXQoY3R4LCB0YiwgcHJpdik7XG4gMzEyOlx0fVxuIDMxMzpcdFxuIDMxNDpcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9vYmpfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIDMxNTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKVxuIDMxNjpcdHtcbiAzMTc6XHRcdG5mdF9zeW5wcm94eV9kb19kZXN0cm95KGN0eCk7XG4gMzE4Olx0fVxuIDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgyNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0OgoKKipBbmFseXppbmcgYG5mdF9zeW5wcm94eS5jYCBGdXJ0aGVyKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGltcHVsc2UgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgKmFjdHVhbGx5KiBleGFtaW5lIHRoZSBjb2RlIGluIGBuZnRfc3lucHJveHkuY2AuIE5vIG1vcmUgdGhlb3JldGljYWwgZGlzY3Vzc2lvbnMsIG5vIG1vcmUgbG9va2luZyBhdCB0aGUgcHJvYmxlbSBmcm9tIHRoZSBvdXRzaWRlIOKAkyB0aW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgKnJlYWxseSogdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5OiBob3cgaXQmIzM5O3MgKmFjdHVhbGx5KiBkb25lLiBXaGVyZSBhcmUgdGhlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcz8gV2hhdCYjMzk7cyB0aGUgZmxvdyBjb250cm9sPyBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9uIGNhbGxzPyBXaGF0IG9wdGltaXphdGlvbnMsIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYXJlIHByZXNlbnQ/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIGFjY291bnRlZCBmb3I/IE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIHByYWN0aWNhbCBleGVjdXRpb24gb2YgdGhlIHN5bnByb3h5IGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIHRoZSBhc3N1bXB0aW9ucyBiYWtlZCBpbnRvIHRoZSBkZXNpZ24sIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIHRoYXQgbWlnaHQgcmVxdWlyZSBjbG9zZXIgc2NydXRpbnkgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBmdXR1cmUgbWFpbnRhaW5hYmlsaXR5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0c3RhdGljIGludCBuZnRfc3lucHJveHlfb2JqX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAzMjE6XHRcdFx0XHRcdCBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLCBib29sIHJlc2V0KVxuIDMyMjpcdHtcbiAzMjM6XHRcdHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcbiAzMjQ6XHRcbiAzMjU6XHRcdHJldHVybiBuZnRfc3lucHJveHlfZG9fZHVtcChza2IsIHByaXYpO1xuIDMyNjpcdH1cbiAzMjc6XHRcbiAzMjg6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiAzMjk6XHRcdFx0XHRcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuIDMzMDpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbiAzMzE6XHR7XG4gMzMyOlx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gMzMzOlx0XG4gMzM0Olx0XHRuZnRfc3lucHJveHlfZG9fZXZhbChwcml2LCByZWdzLCBwa3QpO1xuIDMzNTpcdH1cbiAzMzY6XHRcbiAzMzc6XHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfb2JqX3VwZGF0ZShzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIDMzODpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfb2JqZWN0ICpuZXdvYmopXG4gMzM5Olx0e1xuIDM0MDpcdFx0c3RydWN0IG5mdF9zeW5wcm94eSAqbmV3cHJpdiA9IG5mdF9vYmpfZGF0YShuZXdvYmopO1xuIDM0MTpcdFx0c3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuIDM0MjpcdFxuIDM0MzpcdFx0V1JJVEVfT05DRShwcml2LVx1MDAzZWluZm8sIG5ld3ByaXYtXHUwMDNlaW5mbyk7XG4gMzQ0Olx0fVxuIDM0NTpcdFxuIDM0NjpcdHN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9zeW5wcm94eV9vYmpfdHlwZTtcbiAzNDc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9zeW5wcm94eV9vYmpfb3BzID0ge1xuIDM0ODpcdFx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfc3lucHJveHlfb2JqX3R5cGUsXG4gMzQ5Olx0XHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgbmZ0X3N5bnByb3h5KSxcbiAzNTA6XHRcdC5pbml0XHRcdD0gbmZ0X3N5bnByb3h5X29ial9pbml0LFxuIDM1MTpcdFx0LmRlc3Ryb3lcdD0gbmZ0X3N5bnByb3h5X29ial9kZXN0cm95LFxuIDM1MjpcdFx0LmR1bXBcdFx0PSBuZnRfc3lucHJveHlfb2JqX2R1bXAsXG4gMzUzOlx0XHQuZXZhbFx0XHQ9IG5mdF9zeW5wcm94eV9vYmpfZXZhbCxcbiAzNTQ6XHRcdC51cGRhdGVcdFx0PSBuZnRfc3lucHJveHlfb2JqX3VwZGF0ZSxcbiAzNTU6XHR9O1xuIDM1NjpcdFxuIDM1NzpcdHN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9zeW5wcm94eV9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuIDM1ODpcdFx0LnR5cGVcdFx0PSBORlRfT0JKRUNUX1NZTlBST1hZLFxuIDM1OTpcdFx0Lm9wc1x0XHQ9IFx1MDAyNm5mdF9zeW5wcm94eV9vYmpfb3BzLFxuIDM2MDpcdFx0Lm1heGF0dHJcdD0gTkZUQV9TWU5QUk9YWV9NQVgsXG4gMzYxOlx0XHQucG9saWN5XHRcdD0gbmZ0X3N5bnByb3h5X3BvbGljeSxcbiAzNjI6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIDM2MzpcdH07XG4gMzY0Olx0XG4gMzY1Olx0c3RhdGljIGludCBfX2luaXQgbmZ0X3N5bnByb3h5X21vZHVsZV9pbml0KHZvaWQpXG4gMzY2Olx0e1xuIDM2NzpcdFx0aW50IGVycjtcbiAzNjg6XHRcbiAzNjk6XHRcdGVyciA9IG5mdF9yZWdpc3Rlcl9vYmooXHUwMDI2bmZ0X3N5bnByb3h5X29ial90eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIERpZ2l0YWwgTGFuZHNjYXBlOiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueSBkZWVwIGFuYWx5c2lzLCBsZXQmIzM5O3MgZXN0YWJsaXNoIGEgY2xlYXIgYmFzZWxpbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAqQmVmb3JlIEkgZ2V0IHRvbyBpbnZvbHZlZCBpbiBzcGVjaWZpY3MsIGl0JiMzOTtzIHBydWRlbnQgdG8gY29uZHVjdCBhIHN3ZWVwIG9mIHRoZSBlbnRpcmUgZmlsZSouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSwgc3RydWN0dXJlLCBhbmQgYW55IHBvdGVudGlhbCByZWQgZmxhZ3MgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoZSBsYXJnZXIgY29udGV4dCBpcyBjcnVjaWFsIHRvIGNvbnRleHR1YWxpemluZyBkZXRhaWxzLiBUaGlzIGluaXRpYWwgcGFzcyB3aWxsIGluZm9ybSB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24gZm9yIGEgbWVhbmluZ2Z1bCBicmVha2Rvd24gYW5kIGFzc2Vzc21lbnQsIGFuZCB3aGV0aGVyIHRvIHJlZmluZSBteSBhcHByb2FjaCB0byB0aGUgZGF0YS4gTm8gYXNzdW1wdGlvbnMsIGp1c3QgYSBtZXRob2RpY2FsIHNjb3BpbmcgZXhlcmNpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDM3MTpcdFx0XHRyZXR1cm4gZXJyO1xuIDM3MjpcdFxuIDM3MzpcdFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXHUwMDI2bmZ0X3N5bnByb3h5X3R5cGUpO1xuIDM3NDpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAzNzU6XHRcdFx0Z290byBlcnI7XG4gMzc2Olx0XG4gMzc3Olx0XHRyZXR1cm4gMDtcbiAzNzg6XHRcbiAzNzk6XHRlcnI6XG4gMzgwOlx0XHRuZnRfdW5yZWdpc3Rlcl9vYmooXHUwMDI2bmZ0X3N5bnByb3h5X29ial90eXBlKTtcbiAzODE6XHRcdHJldHVybiBlcnI7XG4gMzgyOlx0fVxuIDM4MzpcdFxuIDM4NDpcdHN0YXRpYyB2b2lkIF9fZXhpdCBuZnRfc3lucHJveHlfbW9kdWxlX2V4aXQodm9pZClcbiAzODU6XHR7XG4gMzg2Olx0XHRuZnRfdW5yZWdpc3Rlcl9leHByKFx1MDAyNm5mdF9zeW5wcm94eV90eXBlKTtcbiAzODc6XHRcdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfc3lucHJveHlfb2JqX3R5cGUpO1xuIDM4ODpcdH1cbiAzODk6XHRcbiAzOTA6XHRtb2R1bGVfaW5pdChuZnRfc3lucHJveHlfbW9kdWxlX2luaXQpO1xuIDM5MTpcdG1vZHVsZV9leGl0KG5mdF9zeW5wcm94eV9tb2R1bGVfZXhpdCk7XG4gMzkyOlx0XG4gMzkzOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAzOTQ6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O0Zlcm5hbmRvIEZlcm5hbmRleiBcdTAwM2NmZm1hbmNlcmFAcmlzZXVwLm5ldFx1MDAzZVwmIzM0Oyk7XG4gMzk1Olx0TU9EVUxFX0FMSUFTX05GVF9FWFBSKFwmIzM0O3N5bnByb3h5XCYjMzQ7KTtcbiAzOTY6XHRNT0RVTEVfQUxJQVNfTkZUX09CSihORlRfT0JKRUNUX1NZTlBST1hZKTtcbiAzOTc6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7bmZ0YWJsZXMgU1lOUFJPWFkgZXhwcmVzc2lvbiBzdXBwb3J0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MjAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBDaGVja3N1bSBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBzb21ldGhpbmcgbmV0d29yay1yZWxhdGVkLCBsaWtlbHkgaW52b2x2aW5nIE5ldGZpbHRlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYG5mX2NoZWNrc3VtYCBmdW5jdGlvbmFsaXR5LiBJIGtub3cgaXQmIzM5O3MgYSBjb3JlIHBpZWNlLCBhbmQgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIE5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXJlIGV4YWN0bHkgdGhhdCYjMzk7cyBkZWZpbmVkLi4uIEkgYmVsaWV2ZSBpdCYjMzk7cyBpbiBgbmV0L25ldGZpbHRlci91dGlscy5jYCwgb3Igc29tZXdoZXJlIG5lYXJieSBpbiB0aGF0IHN1YnRyZWUuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBmaWxlIGFuZCBsaW5lIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwb2ludCBvZiByZWZlcmVuY2UgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29kZSBhbmQgc3RhcnQgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zdW0xNiBuZl9jaGVja3N1bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oPTM3Mz1zdHJ1Y3QgbmZfcXVldWVfZW50cnk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3NC1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6Mzc1Ol9fc3VtMTYgbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3Ni1cdFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3OC1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6Mzc5Ol9fc3VtMTYgbmZfY2hlY2tzdW1fcGFydGlhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtMzgwLVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM9OTc9c3RhdGljIF9fc3VtMTYgbmZfaXA2X2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG4tLVxubmV0L25ldGZpbHRlci91dGlscy5jLTEyMi1cbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzoxMjM6X19zdW0xNiBuZl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy0xMjQtXHRcdCAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdTggcHJvdG9jb2wsXG4tLVxubmV0L25ldGZpbHRlci91dGlscy5jPTE0MD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jaGVja3N1bSk7XG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTQxLVxubmV0L25ldGZpbHRlci91dGlscy5jOjE0MjpfX3N1bTE2IG5mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTQzLVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGxlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMzUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORlRhYmxlcyBTWU5QUk9YWSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhpcyBwYXRjaCBpcyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggdGhlIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIGl0IHNlZW1zLiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgZmlsZSByZXZlYWxzIGEgY2x1c3RlciBvZiByZWxhdGVkIGZ1bmN0aW9uczogYG5mdF9zeW5wcm94eV9ldmFsYCwgYG5mdF9zeW5wcm94eV9vYmpfZXZhbGAsIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGBuZnRfc3lucHJveHlfZXZhbF92NGAgYW5kIGBuZnRfc3lucHJveHlfZXZhbF92NmAuIEl0IGFsc28gaW5jbHVkZXMgYG5mdF9zeW5wcm94eV9kb19pbml0YCB3aGljaCBpcyBpbnRlcmVzdGluZyAtIHByZXN1bWFibHkgc29tZSBzZXR1cC4gU28sIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgYW5kIHRoZSBvdGhlciBgX2V2YWxgIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBmb2N1cyBhcmVhcywgaW5jbHVkaW5nIGBuZnRfc3lucHJveHlfb2JqX2V2YWxgLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCB0byBzZWUgaG93IHRob3NlIGludGVncmF0ZSB3aXRoIHRoZSBicm9hZGVyIE5GVGFibGVzIGZyYW1ld29yay4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHBhdGNoIG1lbnRpb25zIGBORlRfU1lOUFJPWFlgLCBuYXR1cmFsbHksIGFuZCB3ZSBoYXZlIHRoZSB1c3VhbCBzdXNwZWN0czogYE5GX1RBQkxFU2AsIGBORl9UQUJMRVNfSVBWNGAsIGBORl9UQUJMRVNfSVBWNmAsIGBORl9UQUJMRVNfSU5FVGAsIGBORVRGSUxURVJfU1lOUFJPWFlgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIFN0YW5kYXJkIGRlcGVuZGVuY2llcywgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfTkZUX1NZTlBST1hZYC4gTGV0JiMzOTtzIGVuc3VyZSB0aGVzZSBhcmUgY29ycmVjdC4KCkxvb2tpbmcgaW50byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgSSBuZWVkIHRvIGNvbmZpcm0gYE5GVF9TWU5QUk9YWWAmIzM5O3MgZGVwZW5kZW5jaWVzLiBJdCBzaG91bGQgYmUgZGVwZW5kZW50IG9uIGBORl9DT05OVFJBQ0tgIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCBhbmQgcHJlc3VtYWJseSB1bmRlciBhbiBgaWYgTkZfVEFCTEVTYCBibG9jay4gRG91YmxlLWNoZWNraW5nIHRoYXQgaXMgY3J1Y2lhbC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cyBJJiMzOTttIG1pc3NpbmcuIFVuZGVyc3RhbmRpbmcgdGhpcyBLY29uZmlnIHNldHVwIGlzIGtleSB0byBlbnN1cmluZyB0aGlzIGNvbmZpZ3VyYXRpb24gaW50ZWdyYXRlcyBzbW9vdGhseSB3aXRoaW4gdGhlIGxhcmdlciBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDU1PWNvbmZpZyBORl9UQUJMRVNcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3MTppZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzItY29uZmlnIE5GX1RBQkxFU19JTkVUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTYyNT1jb25maWcgTkZUX1NPQ0tFVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXHRzZWxlY3QgTkZfU09DS0VUX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjg6XHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjktXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDM6XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDQtXHRzZWxlY3QgTkZfVFBST1hZX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XHRzZWxlY3QgTkZfVFBST1hZX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDYtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0OT1jb25maWcgTkZUX1NZTlBST1hZXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NjA6aWYgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNjgKCQkJCQkJCW91dHB1dDogMjAxCgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSB2ZXJ5IGNsZWFuIHNsYXRlIGhlcmUg4oCTIHRoZSBlbnZpcm9ubWVudCBzZWVtcyBwcmlzdGluZSwgcmVhZHkgZm9yIGFuYWx5c2lzLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoYXQgbWVhbnMgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGlzIGNoYW5nZSBwcmVzZW50cyBhIHZpYWJsZSBmdXp6aW5nIHRhcmdldC4KCk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuICYjMzQ7TkZfVEFCTEVTLCYjMzQ7ICYjMzQ7TkZUX1NZTlBST1hZLCYjMzQ7ICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VELCYjMzQ7ICYjMzQ7TkZfQ09OTlRSQUNLLCYjMzQ7IGFuZCB0aGUgdmFyaW91cyBORl9UQUJMRVMgc3ViLWNvbmZpZ3VyYXRpb25zIGZvciBJUHY0IGFuZCBJUHY24oCmIFllcywgdGhpcyBjb25maXJtcyBteSBzdXNwaWNpb246IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBOZXRmaWx0ZXIgYW5kIG5mdGFibGVzIGludGVyYWN0aW9uLCBzcGVjaWZpY2FsbHkgU1lOUFJPWFksIGFuZCB0aGUgcHJlc2VuY2Ugb2YgYWR2YW5jZWQgZmVhdHVyZXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhLgoKTm93LCBsb29raW5nIGF0IHRoZSAmIzM0O0ZvY3VzU3ltYm9scywmIzM0OyBJIHNlZSBhIHRhcmdldGVkIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaW5jbHVkZSAmIzM0O25mdF9zeW5wcm94eV9kb19ldmFsLCYjMzQ7ICYjMzQ7bmZ0X3N5bnByb3h5X2V2YWwsJiMzNDsgYW5kIHZhcmlhdGlvbnMgZm9yIElQdjQgYW5kIElQdjYuIFRoaXMgaXMga2V5LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBjb3JlIG9mIHRoZSBTWU5QUk9YWSBldmFsdWF0aW9uIHByb2Nlc3Mgd2l0aGluIG5mdGFibGVzLgoKVGhlIHJlYXNvbmluZyBzZWN0aW9uIGlzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBUaGUgcGF0Y2ggaXMgcmVwbGFjaW5nIGBuZl9pcF9jaGVja3N1bSgpYCB3aXRoIHRoZSBmYW1pbHktYXdhcmUgYG5mX2NoZWNrc3VtKClgIGZ1bmN0aW9uICp3aXRoaW4qIGBuZnRfc3lucHJveHlfZG9fZXZhbCgpYC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZS4gSXQmIzM5O3MgZGlyZWN0bHkgaW1wYWN0aW5nIFRDUCBjaGVja3N1bSB2ZXJpZmljYXRpb24gKnNwZWNpZmljYWxseSogd2l0aGluIHRoZSBOZXRmaWx0ZXIgbmZ0YWJsZXMgU1lOUFJPWFkgbG9naWMuIEFuZCBpdCYjMzk7cyBkb2luZyBzbyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2IHRyYWZmaWMuIEdpdmVuIHRoYXQgU1lOUFJPWFkgaXMgZGVzaWduZWQgdG8gbWl0aWdhdGUgU1lOIGZsb29kcywgYW5kIHRoYXQgbmZ0YWJsZXMgaXMgd2lkZWx5IHVzZWQsIHRoaXMgaXMgYSB2ZXJ5IHJlbGV2YW50LCBwb3RlbnRpYWxseSBoaWdoLWltcGFjdCBtb2RpZmljYXRpb24uIEltcG9ydGFudGx5LCB0aGUgcmVhc29uaW5nIGNsYXJpZmllcyB0aGF0IHRoaXMgY2hhbmdlIGlzIHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aCBzdGFuZGFyZCBuZXR3b3JrIHRvb2xzLgoKQmFzZWQgb24gYWxsIHRoaXMsIEkmIzM5O20gcmVhZHkgdG8gbWFrZSB0aGUgZmluYWwgY2FsbCB0byBgc2V0LXJlc3VsdHNgLiBUaGUgYW5hbHlzaXMgaXMgY29tcGxldGUsIGFuZCB0aGUgaW5mb3JtYXRpb24gaXMgcmVhZHkgZm9yIGNvbnNpZGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZUX1NZTlBST1hZJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNiYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSVBWNCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9zeW5wcm94eV9kb19ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9vYmpfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NiYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBUQ1AgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGluIG5mdGFibGVzIFNZTlBST1hZIGV4cHJlc3Npb24gZXZhbHVhdGlvbiAobmZ0X3N5bnByb3h5X2RvX2V2YWwpIGJ5IHN3aXRjaGluZyBmcm9tIG5mX2lwX2NoZWNrc3VtIHRvIGZhbWlseS1hd2FyZSBuZl9jaGVja3N1bSwgaW1wYWN0aW5nIElQdjQgYW5kIElQdjYgdHJhZmZpYyBwcm9jZXNzaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZSB2aWEgbmV0bGluayBhbmQgbmV0d29yayBwYWNrZXQgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GVF9TWU5QUk9YWSYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lORVQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lQVjYmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lQVjQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfc3lucHJveHlfZG9fZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfb2JqX2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X3N5bnByb3h5X2V2YWxfdjYmIzM0OywKICAgICYjMzQ7bmZ0X3N5bnByb3h5X2V2YWxfdjQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgVENQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBpbiBuZnRhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIGV2YWx1YXRpb24gKG5mdF9zeW5wcm94eV9kb19ldmFsKSBieSBzd2l0Y2hpbmcgZnJvbSBuZl9pcF9jaGVja3N1bSB0byBmYW1pbHktYXdhcmUgbmZfY2hlY2tzdW0sIGltcGFjdGluZyBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgcHJvY2Vzc2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIG5ldGxpbmsgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBhIGhhcmRjb2RlZCBjYWxsIHRvIG5mX2lwX2NoZWNrc3VtKCkgd2l0aCBuZl9jaGVja3N1bSgpIGluIG5mdF9zeW5wcm94eV9kb19ldmFsKCkgc28gdGhhdCB0aGUgcHJvdG9jb2wgZmFtaWx5IChJUHY0IG9yIElQdjYpIGlzIGNvcnJlY3RseSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyB0aGUgVENQIGNoZWNrc3VtLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBwYXRocywgaW5mby1sZWFrIHZlY3RvcnMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcGFja2V0IG1lbW9yeSBhY2Nlc3MgYm91bmRhcmllcyBvciBpbnZhbGlkIHNrYiBvcGVyYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NGQyYjAzODE4OTQ0MmE4OWIxNzAzMjU3MDg0YjBmZWFjNjVhODE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMjA6MzU6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jIGIvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYwppbmRleCA5ZWQyODhjOWQxNjg4Li41NTRhOTZhMDAwZjQwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMKQEAgLTExOCw3ICYjNDM7MTE4LDggQEAgc3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2RvX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiwKIAkJcmV0dXJuOwogCX0KIAotCWlmIChuZl9pcF9jaGVja3N1bShza2IsIG5mdF9ob29rKHBrdCksIHRob2ZmLCBJUFBST1RPX1RDUCkpIHsKJiM0MzsJaWYgKG5mX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQLAomIzQzOwkJCW5mdF9wZihwa3QpKSkgewogCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORl9EUk9QOwogCQlyZXR1cm47CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6CgoqKkRpdmluZyBpbnRvIG5mdF9zeW5wcm94eS5jKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBUaGlzIHBhdGNoIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jYCBuZWVkcyBhIGNsb3NlciBsb29rLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgYW5kIHRoZWlyIGNvbnRleHQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgcHVsbCB1cCB0aGUgZmlsZSwgcHJvYmFibHkgdXNpbmcgYHJlYWQtZmlsZWAgdG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCBvciBpZiBJIHdhbnQgc29tZXRoaW5nIG1vcmUgZGlyZWN0LCBJIGNhbiB1c2UgYGdyZXBwZXJgIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjdXJyZW50IHNvdXJjZSBjb2RlLiBUaGUgZ29hbCBpcyB0byBlc3RhYmxpc2ggYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYW5kIGhvdyB0aG9zZSBtb2RpZmljYXRpb25zIHBsYXkgd2l0aGluIHRoZSBleGlzdGluZyBjb2RlLiBNeSBtYWluIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4gMTAxOlx0XHRcdH1cbiAxMDI6XHRcdH1cbiAxMDM6XHR9XG4gMTA0Olx0I2VuZGlmIC8qIENPTkZJR19ORl9UQUJMRVNfSVBWNiovXG4gMTA1Olx0XG4gMTA2Olx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2RvX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcbiAxMDc6XHRcdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gMTA4Olx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4gMTA5Olx0e1xuIDExMDpcdFx0c3RydWN0IHN5bnByb3h5X29wdGlvbnMgb3B0cyA9IHt9O1xuIDExMTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4gMTEyOlx0XHRpbnQgdGhvZmYgPSBuZnRfdGhvZmYocGt0KTtcbiAxMTM6XHRcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcDtcbiAxMTQ6XHRcdHN0cnVjdCB0Y3BoZHIgX3RjcGg7XG4gMTE1Olx0XG4gMTE2Olx0XHRpZiAocGt0LVx1MDAzZXRwcm90ICE9IElQUFJPVE9fVENQKSB7XG4gMTE3Olx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xuIDExODpcdFx0XHRyZXR1cm47XG4gMTE5Olx0XHR9XG4gMTIwOlx0XG4gMTIxOlx0XHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXG4gMTIyOlx0XHRcdFx0bmZ0X3BmKHBrdCkpKSB7XG4gMTIzOlx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiAxMjQ6XHRcdFx0cmV0dXJuO1xuIDEyNTpcdFx0fVxuIDEyNjpcdFxuIDEyNzpcdFx0dGNwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgdGhvZmYsXG4gMTI4Olx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLFxuIDEyOTpcdFx0XHRcdFx0IFx1MDAyNl90Y3BoKTtcbiAxMzA6XHRcdGlmICghdGNwKSB7XG4gMTMxOlx0XHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiAxMzI6XHRcdFx0cmV0dXJuO1xuIDEzMzpcdFx0fVxuIDEzNDpcdFxuIDEzNTpcdFx0aWYgKCFzeW5wcm94eV9wYXJzZV9vcHRpb25zKHNrYiwgdGhvZmYsIHRjcCwgXHUwMDI2b3B0cykpIHtcbiAxMzY6XHRcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIDEzNzpcdFx0XHRyZXR1cm47XG4gMTM4Olx0XHR9XG4gMTM5Olx0XG4gMTQwOlx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuIDE0MTpcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gMTQyOlx0XHRcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcdTAwMjZfdGNwaCwgXHUwMDI2b3B0cyk7XG4gMTQzOlx0XHRcdHJldHVybjtcbiAxNDQ6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0lQVjYpXG4gMTQ1Olx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuIDE0NjpcdFx0XHRuZnRfc3lucHJveHlfZXZhbF92Nihwcml2LCByZWdzLCBwa3QsIHRjcCwgXHUwMDI2X3RjcGgsIFx1MDAyNm9wdHMpO1xuIDE0NzpcdFx0XHRyZXR1cm47XG4gMTQ4Olx0I2VuZGlmXG4gMTQ5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDaGVja3N1bSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN3aXRjaGluZyBmcm9tIGBuZl9pcF9jaGVja3N1bWAgdG8gYG5mX2NoZWNrc3VtYCBpbiB0aGUgY29udGV4dCBvZiBUQ1AgY2hlY2tzdW0gY2FsY3VsYXRpb25zIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBpdOKAmXMgcmVwbGFjaW5nIGBuZl9pcF9jaGVja3N1bShza2IsIG5mdF9ob29rKHBrdCksIHRob2ZmLCBJUFBST1RPX1RDUClgIHdpdGggYG5mX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQLCBuZnRfcGYocGt0KSlgLiBUaGlzIGNsZWFybHkgbWVhbnMgdGhlcmUmIzM5O3MgYSBkaWZmZXJlbmNlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBkaWZmZXJlbmNlLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGVhY2ggZnVuY3Rpb246IGBuZl9pcF9jaGVja3N1bWAgdmVyc3VzIGBuZl9jaGVja3N1bWAuIFdoYXQmIzM5O3MgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2U/IFdoYXQmIzM5O3MgdGhlIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWwgaW1wYWN0PyBJcyBpdCBhIHJlZmFjdG9yaW5nLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBtb3JlPyBJcyB0aGlzIHBvdGVudGlhbGx5IGEgZ2VuZXJhbGl6YXRpb24gb3Igb3B0aW1pemF0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBib3RoIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlaXIgdXNhZ2UsIGRlcGVuZGVuY2llcywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgcGljdHVyZSBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgcmF0aW9uYWxlIGZvciB0aGUgY2hhbmdlIGFuZCBoZWxwIG1lIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2lwX2NoZWNrc3VtfG5mX2NoZWNrc3VtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBuYXJyYXRpdmU6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGbG93IENoZWNrc3VtcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgc3RyYWlnaHRmb3J3YXJkOiBJIG5lZWQgYSBjb25jcmV0ZSBkZWZpbml0aW9uLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvICYjMzQ7bmZfJiMzNDsgaXMgdGhlIGxpa2VseSBwcmVmaXguIFRoaXMgaW1wbGllcyB3ZSYjMzk7cmUgaW4gdGhlIHJlYWxtIG9mIHBhY2tldCBmaWx0ZXJpbmcgb3IgbWFuaXB1bGF0aW9uIGF0IHRoZSBuZXR3b3JrIGxldmVsLiBUaGUgJiMzNDtjaGVja3N1bSYjMzQ7IHBhcnQgaXMsIG9mIGNvdXJzZSwgY3JpdGljYWwgZm9yIGRhdGEgaW50ZWdyaXR5LiBUaGUgcXVlc3Rpb24gbm93IGlzOiB3aGF0JiMzOTtzIHRoZSBzcGVjaWZpYyBkZWZpbml0aW9uIG9mIGBuZl9pcF9jaGVja3N1bWAgYW5kLCBtb3JlIGJyb2FkbHksIGBuZl9jaGVja3N1bWA/IEkgbmVlZCB0byB1bmRlcnN0YW5kICpwcmVjaXNlbHkqIGhvdyB0aGVzZSB0ZXJtcyBhcmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGZ1bmN0aW9ucywgc3RydWN0dXJlcywgb3IgcGVyaGFwcyBtYWNybyBkZWZpbml0aW9ucz8gQXJlIHRoZXNlIGNoZWNrc3VtcyBjYWxjdWxhdGVkIG9yIHZlcmlmaWVkLCBhbmQgYXQgd2hhdCBwb2ludHMgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIG9yIHJlbGV2YW50IGRvY3VtZW50YXRpb24gdG8gcGlucG9pbnQgdGhlIGV4YWN0IG1lYW5pbmcgYW5kIHVzYWdlLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIHdpbGwgYmUgcGFydCBvZiB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrIHRvIGhhbmRsZSBJUCBoZWFkZXIgY2hlY2tzdW1zIGZvciBwYWNrZXRzIHRoYXQgYXJlIGJlaW5nIGZpbHRlcmVkLCBtb2RpZmllZCwgb3IgZm9yd2FyZGVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIGZvciBhbnkgaW4tZGVwdGggbmV0d29yayBhbmFseXNpcyBvciBzZWN1cml0eSB3b3JrIEkmIzM5O20gaW52b2x2ZWQgaW4sIHNvIEkmIzM5O2xsIHdhbnQgdG8gZ2V0IHRoaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIwOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2lwX2NoZWNrc3VtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaD0yMT1zdHJ1Y3QgbmZfcXVldWVfZW50cnk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oLTIzLSNpZmRlZiBDT05GSUdfSU5FVFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oOjI0Ol9fc3VtMTYgbmZfaXBfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgtMjUtXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oPTI2PWludCBuZl9pcF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKipkc3QsIHN0cnVjdCBmbG93aSAqZmwsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oLTI4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0Lmg6Mjk6c3RhdGljIGlubGluZSBfX3N1bTE2IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oLTMwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TWU5QUk9YWS5jPTEzPXN5bnByb3h5X3RnNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TWU5QUk9YWS5jLTIwLVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TWU5QUk9YWS5jOjIxOlx0aWYgKG5mX2lwX2NoZWNrc3VtKHNrYiwgeHRfaG9va251bShwYXIpLCBwYXItXHUwMDNldGhvZmYsIElQUFJPVE9fVENQKSlcbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfU1lOUFJPWFkuYy0yMi1cdFx0cmV0dXJuIE5GX0RST1A7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MTA1PXN0cnVjdCBza19idWZmICpuZl9yZWplY3Rfc2tiX3Y0X3VucmVhY2goc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTE0Mi1cdCAgICBuZl9yZWplY3RfdmVyaWZ5X2NzdW0ob2xkc2tiLCBkYXRhb2ZmLCBwcm90bykgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzoxNDM6XHQgICAgbmZfaXBfY2hlY2tzdW0ob2xkc2tiLCBob29rLCBpcF9oZHJsZW4ob2xkc2tiKSwgcHJvdG8pKVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMTQ0LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0xNzU9bmZfcmVqZWN0X2lwX3RjcGhkcl9nZXQoc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0xOTYtXHQvKiBDaGVjayBjaGVja3N1bSAqL1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MTk3Olx0aWYgKG5mX2lwX2NoZWNrc3VtKG9sZHNrYiwgaG9vaywgaXBfaGRybGVuKG9sZHNrYiksIElQUFJPVE9fVENQKSlcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTE5OC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MzQ4PXZvaWQgbmZfc2VuZF91bnJlYWNoKHN0cnVjdCBza19idWZmICpza2JfaW4sIGludCBjb2RlLCBpbnQgaG9vaylcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjUtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozNjY6XHRpZiAobmZfaXBfY2hlY2tzdW0oc2tiX2luLCBob29rLCBkYXRhb2ZmLCBwcm90bykgPT0gMClcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTM2Ny1cdFx0aWNtcF9zZW5kKHNrYl9pbiwgSUNNUF9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jPTExND1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9hZGRfaGVscGVyKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19vdnMuYy0xMTgtICogZm9yIGhpZ2hlci1sYXllciBwcm9jZXNzaW5nIHRoYXQgYXNzdW1lcyBza2ItXHUwMDNlbGVuIGV4Y2x1ZGVzIHBhZGRpbmdcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjExOTogKiAoc3VjaCBhcyBuZl9pcF9jaGVja3N1bSkuIFRoZSBjYWxsZXIgbmVlZHMgdG8gcHVsbCB0aGUgc2tiIHRvIHRoZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtMTIwLSAqIG5ldHdvcmsgaGVhZGVyLCBhbmQgZW5zdXJlIGlwX2hkci9pcHY2X2hkciBwb2ludHMgdG8gdmFsaWQgZGF0YS5cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmM9MjA0PWludCBuZl9jb25udHJhY2tfaWNtcHY0X2Vycm9yKHN0cnVjdCBuZl9jb25uICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0yMjEtXHQgICAgc3RhdGUtXHUwMDNlaG9vayA9PSBORl9JTkVUX1BSRV9ST1VUSU5HIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jOjIyMjpcdCAgICBuZl9pcF9jaGVja3N1bShza2IsIHN0YXRlLVx1MDAzZWhvb2ssIGRhdGFvZmYsIElQUFJPVE9fSUNNUCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYy0yMjMtXHRcdGljbXBfZXJyb3JfbG9nKHNrYiwgc3RhdGUsIFwmIzM0O2JhZCBodyBpY21wIGNoZWNrc3VtXCYjMzQ7KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTQ5Nz1pbnQgbmZfbmF0X2ljbXBfcmVwbHlfdHJhbnNsYXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jLTUxNS1cdFx0cmV0dXJuIDA7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjUxNjpcdGlmIChuZl9pcF9jaGVja3N1bShza2IsIGhvb2tudW0sIGhkcmxlbiwgSVBQUk9UT19JQ01QKSlcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtNTE3LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtOS0jaWZkZWYgQ09ORklHX0lORVRcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzoxMDpfX3N1bTE2IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxubmV0L25ldGZpbHRlci91dGlscy5jLTExLVx0XHQgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHU4IHByb3RvY29sKVxuLS1cbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy0zOS19XG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM6NDA6RVhQT1JUX1NZTUJPTChuZl9pcF9jaGVja3N1bSk7XG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtNDEtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtNDItXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM6NDM6c3RhdGljIF9fc3VtMTYgbmZfaXBfY2hlY2tzdW1fcGFydGlhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy00NC1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgbGVuLFxuLS1cbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy01Mi1cdFx0aWYgKGxlbiA9PSBza2ItXHUwMDNlbGVuIC0gZGF0YW9mZilcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzo1MzpcdFx0XHRyZXR1cm4gbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7XG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtNTQtXHRcdGZhbGx0aHJvdWdoO1xuLS1cbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYz0xMjM9X19zdW0xNiBuZl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcbi0tXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTMwLVx0Y2FzZSBBRl9JTkVUOlxubmV0L25ldGZpbHRlci91dGlscy5jOjEzMTpcdFx0Y3N1bSA9IG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9vaywgZGF0YW9mZiwgcHJvdG9jb2wpO1xubmV0L25ldGZpbHRlci91dGlscy5jLTEzMi1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci91dGlscy5jPTE0Mj1fX3N1bTE2IG5mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG4tLVxubmV0L25ldGZpbHRlci91dGlscy5jLTE0OS1cdGNhc2UgQUZfSU5FVDpcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzoxNTA6XHRcdGNzdW0gPSBuZl9pcF9jaGVja3N1bV9wYXJ0aWFsKHNrYiwgaG9vaywgZGF0YW9mZiwgbGVuLFxubmV0L25ldGZpbHRlci91dGlscy5jLTE1MS1cdFx0XHRcdFx0ICAgICAgcHJvdG9jb2wpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbmV0L25ldGZpbHRlci91dGlscy5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbmV0L25ldGZpbHRlci91dGlscy5jYCByaWdodCBub3cuIEkgaGF2ZSBhIGh1bmNoIGFib3V0IGEgcG90ZW50aWFsIGlzc3VlLCBhbmQgSSBiZWxpZXZlIHRoZSBhbnN3ZXIgbGllcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSAxMjMuIFRoYXQgcGFydGljdWxhciByZWdpb24gb2Z0ZW4gZGVhbHMgd2l0aCBbICppbnNlcnQgbXkgc3BlY2lmaWMgYXJlYSBvZiBleHBlcnRpc2UgcmVsYXRlZCB0byBuZXRmaWx0ZXIgaGVyZSAtIGUuZy4sIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgY29ubnRyYWNrIG1hbmlwdWxhdGlvbiwgZXRjLiogXSwgYW5kIEkmIzM5O20gaG9waW5nIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBjb2RlIGZvciB0aGUgcHJvYmxlbS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUgdGhlcmUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBpc3N1ZSBJJiMzOTttIGludmVzdGlnYXRpbmcuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgdG8gYSBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3V0aWxzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdFx0XHRcdFx0XHRcdFx0IHByb3RvY29sLFxuIDExNjpcdFx0XHRcdFx0XHRcdFx0IGNzdW1fc3ViKDAsIGhzdW0pKSk7XG4gMTE3Olx0XHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuIDExODpcdFx0XHRyZXR1cm4gX19za2JfY2hlY2tzdW1fY29tcGxldGVfaGVhZChza2IsIGRhdGFvZmYgJiM0MzsgbGVuKTtcbiAxMTk6XHRcdH1cbiAxMjA6XHRcdHJldHVybiBjc3VtO1xuIDEyMTpcdH07XG4gMTIyOlx0XG4gMTIzOlx0X19zdW0xNiBuZl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcbiAxMjQ6XHRcdFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1OCBwcm90b2NvbCxcbiAxMjU6XHRcdFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbiAxMjY6XHR7XG4gMTI3Olx0XHRfX3N1bTE2IGNzdW0gPSAwO1xuIDEyODpcdFxuIDEyOTpcdFx0c3dpdGNoIChmYW1pbHkpIHtcbiAxMzA6XHRcdGNhc2UgQUZfSU5FVDpcbiAxMzE6XHRcdFx0Y3N1bSA9IG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9vaywgZGF0YW9mZiwgcHJvdG9jb2wpO1xuIDEzMjpcdFx0XHRicmVhaztcbiAxMzM6XHRcdGNhc2UgQUZfSU5FVDY6XG4gMTM0Olx0XHRcdGNzdW0gPSBuZl9pcDZfY2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7XG4gMTM1Olx0XHRcdGJyZWFrO1xuIDEzNjpcdFx0fVxuIDEzNzpcdFxuIDEzODpcdFx0cmV0dXJuIGNzdW07XG4gMTM5Olx0fVxuIDE0MDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2NoZWNrc3VtKTtcbiAxNDE6XHRcbiAxNDI6XHRfX3N1bTE2IG5mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXG4gMTQzOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgbGVuLFxuIDE0NDpcdFx0XHRcdCAgICB1OCBwcm90b2NvbCwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIDE0NTpcdHtcbiAxNDY6XHRcdF9fc3VtMTYgY3N1bSA9IDA7XG4gMTQ3Olx0XG4gMTQ4Olx0XHRzd2l0Y2ggKGZhbWlseSkge1xuIDE0OTpcdFx0Y2FzZSBBRl9JTkVUOlxuIDE1MDpcdFx0XHRjc3VtID0gbmZfaXBfY2hlY2tzdW1fcGFydGlhbChza2IsIGhvb2ssIGRhdGFvZmYsIGxlbixcbiAxNTE6XHRcdFx0XHRcdFx0ICAgICAgcHJvdG9jb2wpO1xuIDE1MjpcdFx0XHRicmVhaztcbiAxNTM6XHRcdGNhc2UgQUZfSU5FVDY6XG4gMTU0Olx0XHRcdGNzdW0gPSBuZl9pcDZfY2hlY2tzdW1fcGFydGlhbChza2IsIGhvb2ssIGRhdGFvZmYsIGxlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ0NAoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiA1MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBgbmZ0X3N5bnByb3h5X2RvX2V2YWxgIHdhcyBwcmV2aW91c2x5IGNhbGxpbmcgYG5mX2lwX2NoZWNrc3VtKClgIHVuY29uZGl0aW9uYWxseS4gVGhhdCYjMzk7cyBhIHByb2JsZW0sIGJlY2F1c2Ugd2hpbGUgYG5mdF9zeW5wcm94eV9kb19ldmFsYCAqaGFuZGxlcyogYm90aCBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgKEkgY2FuIHNlZSB0aGF0IGZyb20gdGhlIHByb3RvY29sIHN3aXRjaCBhbmQgdGhlIEV0aGVybmV0IGhlYWRlciBjaGVja3MpLCBgbmZfaXBfY2hlY2tzdW0oKWAgYXNzdW1lcyBJUHY0LiBTbywgd2l0aCBJUHY2LCBpdCB3b3VsZCBlaXRoZXIgZmFpbCBvdXRyaWdodCBvciBnaXZlIGEgYmFkIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgoKVGhlIGZpeCwgd2hpY2ggaXMgYSBnb29kIG9uZSwgcmVwbGFjZXMgdGhlIGhhcmRjb2RlZCBgbmZfaXBfY2hlY2tzdW0oKWAgY2FsbCB3aXRoIGEgbW9yZSBnZW5lcmljIGBuZl9jaGVja3N1bSgpYC4gVGhpcyBjb3JyZWN0bHkgY2FsbHMgYG5mX2lwX2NoZWNrc3VtKClgIGZvciBJUHY0IGFuZCBgbmZfaXA2X2NoZWNrc3VtKClgIGZvciBJUHY2LCBkZXBlbmRpbmcgb24gdGhlIHBhY2tldCYjMzk7cyBhZGRyZXNzIGZhbWlseSwgZGV0ZXJtaW5lZCBieSBgbmZ0X3BmKHBrdClgLiBNdWNoIGJldHRlci4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiDigJMgZG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXM/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6CgoxLiAgKipObyB1c2VyLXNwYWNlIGNvcHk6KiogR29vZC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRoYXQgd2F5LgoyLiAgKipObyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMvZmllbGRzOioqICBFeGNlbGxlbnQuICBUaGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBub3IgZG9lcyBpdCBhY2Nlc3MgYW55LiBUaGF0JiMzOTtzIGEgYmlnIHJlbGllZi4KMy4gICoqTm8gYnVmZmVyL3N0cnVjdCBjaGFuZ2VzOioqIFdlJiMzOTtyZSBub3QgY2hhbmdpbmcgYW55IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIHNvIHdlIGNhbiBpZ25vcmUgdGhhdCBwYXJ0Lgo0LiAgKipLTVNBTiBpbXBsaWNhdGlvbnM6KiogT2theSwgaGVyZSYjMzk7cyB3aGVyZSB3ZSByZWFsbHkgbmVlZCB0byBiZSBjYXJlZnVsLiBgbmZfY2hlY2tzdW1gIHVsdGltYXRlbHkgY2FsbHMgYG5mX2lwX2NoZWNrc3VtYCBvciBgbmZfaXA2X2NoZWNrc3VtYCwgYW5kIHRob3NlIGZ1bmN0aW9ucyBhcmUgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgZGF0YSAqaW5zaWRlKiB0aGUgYHNrYmAuIElmIHRoZXJlIGFyZSBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcywgS0FTQU4gKG9yIHRoZSByZWxldmFudCBza2IgaGVscGVycykgd2lsbCBjYXRjaCBpdC4gVGhlIGNoYW5nZSBpc24mIzM5O3QgKmludHJvZHVjaW5nKiBhbnkgbmV3IG1lbW9yeSByZWdpb25zLCBhbmQgd2UgYXJlIG5vdCBsZWFraW5nIGFueXRoaW5nIHRvIHVzZXIgc3BhY2UuCgpUaGVyZWZvcmUsIGJlY2F1c2Ugd2UgYXJlIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IG1lbW9yeSBpc3N1ZXMsIGl0JiMzOTtzIHNhZmUgdG8gc2F5IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBUaGlzIGlzbiYjMzk7dCBhIHNpdHVhdGlvbiB3aGVyZSBhIGRlZGljYXRlZCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciBydW4gaXMgd2FycmFudGVkLiBLQVNBTiB3aWxsIGhhbmRsZSBpdC4KCk5vdywgdG8gZG9jdW1lbnQgdGhpcyByZWFzb25pbmcgcHJvcGVybHksIGxldCYjMzk7cyBjbGVhcmx5IGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTjoKCiogICAqKktBU0FOOioqIFRoaXMgcGF0Y2ggZml4ZXMgYSBwcm90b2NvbCBmYW1pbHkgaGFuZGxpbmcgaXNzdWUgZm9yIFRDUCBjaGVja3N1bSB2ZXJpZmljYXRpb24uIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBjb3JyZWN0bHkgd2l0aCB0aGUgc2tiJiMzOTtzIHBhY2tldCBwYXJzaW5nLCBhbmQgYW55IHBhY2tldCBib3VuZGFyaWVzIGlzc3VlcyBhcmUgaGFuZGxlZCBieSBLQVNBTi4KKiAgICoqS01TQU46KiogIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMvZmllbGRzIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLgoKUmlnaHQsIHRoYXQgc2VlbXMgY29tcHJlaGVuc2l2ZS4gTm93LCBJIHNob3VsZCBiZSBhYmxlIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgY2FsbCB0byBuZl9pcF9jaGVja3N1bSgpIHdpdGggbmZfY2hlY2tzdW0oKSBpbiBuZnRfc3lucHJveHlfZG9fZXZhbCgpIHNvIHRoYXQgdGhlIHByb3RvY29sIGZhbWlseSAoSVB2NCBvciBJUHY2KSBpcyBjb3JyZWN0bHkgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIFRDUCBjaGVja3N1bS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIGluZm8tbGVhayB2ZWN0b3JzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBhY2tldCBtZW1vcnkgYWNjZXNzIGJvdW5kYXJpZXMgb3IgaW52YWxpZCBza2Igb3BlcmF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgY2FsbCB0byBuZl9pcF9jaGVja3N1bSgpIHdpdGggbmZfY2hlY2tzdW0oKSBpbiBuZnRfc3lucHJveHlfZG9fZXZhbCgpIHNvIHRoYXQgdGhlIHByb3RvY29sIGZhbWlseSAoSVB2NCBvciBJUHY2KSBpcyBjb3JyZWN0bHkgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIFRDUCBjaGVja3N1bS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIGluZm8tbGVhayB2ZWN0b3JzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBhY2tldCBtZW1vcnkgYWNjZXNzIGJvdW5kYXJpZXMgb3IgaW52YWxpZCBza2Igb3BlcmF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNToyNS4wOTY5ODYwMjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODkyODI4Mzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9TWU5QUk9YWVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjZcIixcbiAgICBcIk5GX1RBQkxFU19JUFY0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3N5bnByb3h5X2RvX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsXCIsXG4gICAgXCJuZnRfc3lucHJveHlfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y2XCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgY2FsbCB0byBuZl9pcF9jaGVja3N1bSgpIHdpdGggbmZfY2hlY2tzdW0oKSBpbiBuZnRfc3lucHJveHlfZG9fZXZhbCgpIHNvIHRoYXQgdGhlIHByb3RvY29sIGZhbWlseSAoSVB2NCBvciBJUHY2KSBpcyBjb3JyZWN0bHkgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIFRDUCBjaGVja3N1bS5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBwYXRocywgaW5mby1sZWFrIHZlY3RvcnMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcGFja2V0IG1lbW9yeSBhY2Nlc3MgYm91bmRhcmllcyBvciBpbnZhbGlkIHNrYiBvcGVyYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgVENQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBpbiBuZnRhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIGV2YWx1YXRpb24gKG5mdF9zeW5wcm94eV9kb19ldmFsKSBieSBzd2l0Y2hpbmcgZnJvbSBuZl9pcF9jaGVja3N1bSB0byBmYW1pbHktYXdhcmUgbmZfY2hlY2tzdW0sIGltcGFjdGluZyBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgcHJvY2Vzc2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIG5ldGxpbmsgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjI1LjA5Njk5MDYzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MDU4ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRkMmIwMzgxODk0NDJhODliMTcwMzI1NzA4NGIwZmVhYzY1YTgxOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDozNToyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jIGIvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xcbmluZGV4IDllZDI4OGM5ZDE2ODguLjU1NGE5NmEwMDBmNDAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcXG5AQCAtMTE4LDcgKzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG5mX2lwX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQKSkge1xcbitcXHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXFxuK1xcdFxcdFxcdG5mdF9wZihwa3QpKSkge1xcbiBcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6MjUuNjAxODU4ODMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODgxMzQ4MDM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9TWU5QUk9YWVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjZcIixcbiAgICBcIk5GX1RBQkxFU19JUFY0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3N5bnByb3h5X2RvX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsXCIsXG4gICAgXCJuZnRfc3lucHJveHlfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y2XCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFRDUCBjaGVja3N1bSB2ZXJpZmljYXRpb24gaW4gbmZ0YWJsZXMgU1lOUFJPWFkgZXhwcmVzc2lvbiBldmFsdWF0aW9uIChuZnRfc3lucHJveHlfZG9fZXZhbCkgYnkgc3dpdGNoaW5nIGZyb20gbmZfaXBfY2hlY2tzdW0gdG8gZmFtaWx5LWF3YXJlIG5mX2NoZWNrc3VtLCBpbXBhY3RpbmcgSVB2NCBhbmQgSVB2NiB0cmFmZmljIHByb2Nlc3NpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBuZXRsaW5rIGFuZCBuZXR3b3JrIHBhY2tldCBpbmplY3Rpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg0ZDJiMDM4MTg5NDQyYTg5YjE3MDMyNTcwODRiMGZlYWM2NWE4MThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMDozNToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXG5pbmRleCA5ZWQyODhjOWQxNjg4Li41NTRhOTZhMDAwZjQwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xuQEAgLTExOCw3ICsxMTgsOCBAQCBzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZG9fZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobmZfaXBfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1ApKSB7XG4rXHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXG4rXHRcdFx0bmZ0X3BmKHBrdCkpKSB7XG4gXHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6MjUuNjAxODYwMTMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEyMjc4MDQ3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeW5wcm94eSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY2AuIFNwZWNpZmljYWxseSwgd2UncmUgbG9va2luZyBhdCB0aGUgYG5mdF9zeW5wcm94eV9kb19ldmFsYCBmdW5jdGlvbi4gVGhlIGRpZmYgaGlnaGxpZ2h0cyBhIGNoYW5nZSBpbiB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb24uIFByZXZpb3VzbHksIGl0IHVzZWQgYG5mX2lwX2NoZWNrc3VtYCwgYW5kIG5vdyBpdCdzIHN3YXBwZWQgb3V0IGZvciBgbmZfY2hlY2tzdW1gLiBBbmQsIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhbiBhZGRpdGlvbiBvZiBgbmZ0X3BmKHBrdClgIHRvIHRoZSBhcmd1bWVudHMgb2YgYG5mX2NoZWNrc3VtYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byBJUHY2IHN1cHBvcnQgb3IgYSBtb3JlIGdlbmVyaWMgY2hlY2tzdW1taW5nIGltcGxlbWVudGF0aW9uLiBUaGUgYG5mdF9wZihwa3QpYCBzdWdnZXN0cyB3ZSdyZSBub3cgYWNjb3VudGluZyBmb3IgdGhlIHBhY2tldCBmYW1pbHkuICBUaGUgb2xkIGBuZl9pcF9jaGVja3N1bWAgd2FzIHByZXR0eSBzcGVjaWZpYywgc28gdGhpcyBpcyBwcm9iYWJseSBhIGdvb2QgbW92ZSBmb3IgYnJvYWRlciBjb21wYXRpYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMsIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbmZfY2hlY2tzdW1gLCBgbmZ0X3BmYCwgYW5kIG1heWJlIGV2ZW4gdGhlIGNvbnRleHQgb2YgYG5mdF9ob29rYCB0byBzZWUgaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZS4gSSB3aWxsIHVzZSBgcmVhZC1maWxlYCBhbmQvb3IgYGdyZXBwZXJgIHRvIHB1bGwgdGhvc2UgZGVmaW5pdGlvbnMsIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZm9yIGEgbW9yZSBkZXRhaWxlZCBhbmFseXNpcy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgaW4gdGhlIGZpcnN0IHBsYWNlOiB3aGF0J3MgdGhlIG1vdGl2YXRpb24/IFdoYXQgaXNzdWUgaXMgaXQgc29sdmluZyBvciB3aGF0IGZlYXR1cmUgaXMgaXQgZW5hYmxpbmc/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTozNi44Mjk2NjY3ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbiAxMDE6XFx0XFx0XFx0fVxcbiAxMDI6XFx0XFx0fVxcbiAxMDM6XFx0fVxcbiAxMDQ6XFx0I2VuZGlmIC8qIENPTkZJR19ORl9UQUJMRVNfSVBWNiovXFxuIDEwNTpcXHRcXG4gMTA2OlxcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAxMDg6XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbiAxMDk6XFx0e1xcbiAxMTA6XFx0XFx0c3RydWN0IHN5bnByb3h5X29wdGlvbnMgb3B0cyA9IHt9O1xcbiAxMTE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbiAxMTI6XFx0XFx0aW50IHRob2ZmID0gbmZ0X3Rob2ZmKHBrdCk7XFxuIDExMzpcXHRcXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3A7XFxuIDExNDpcXHRcXHRzdHJ1Y3QgdGNwaGRyIF90Y3BoO1xcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRpZiAocGt0LVxcdTAwM2V0cHJvdCAhPSBJUFBST1RPX1RDUCkge1xcbiAxMTc6XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xcbiAxMTg6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMTk6XFx0XFx0fVxcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXFxuIDEyMjpcXHRcXHRcXHRcXHRuZnRfcGYocGt0KSkpIHtcXG4gMTIzOlxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuIDEyNDpcXHRcXHRcXHRyZXR1cm47XFxuIDEyNTpcXHRcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHRjcCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHRob2ZmLFxcbiAxMjg6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgdGNwaGRyKSxcXG4gMTI5OlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2X3RjcGgpO1xcbiAxMzA6XFx0XFx0aWYgKCF0Y3ApIHtcXG4gMTMxOlxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuIDEzMjpcXHRcXHRcXHRyZXR1cm47XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmICghc3lucHJveHlfcGFyc2Vfb3B0aW9ucyhza2IsIHRob2ZmLCB0Y3AsIFxcdTAwMjZvcHRzKSkge1xcbiAxMzY6XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG4gMTM3OlxcdFxcdFxcdHJldHVybjtcXG4gMTM4OlxcdFxcdH1cXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIDE0MTpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gMTQyOlxcdFxcdFxcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcXHUwMDI2X3RjcGgsIFxcdTAwMjZvcHRzKTtcXG4gMTQzOlxcdFxcdFxcdHJldHVybjtcXG4gMTQ0OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfSVBWNilcXG4gMTQ1OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuIDE0NjpcXHRcXHRcXHRuZnRfc3lucHJveHlfZXZhbF92Nihwcml2LCByZWdzLCBwa3QsIHRjcCwgXFx1MDAyNl90Y3BoLCBcXHUwMDI2b3B0cyk7XFxuIDE0NzpcXHRcXHRcXHRyZXR1cm47XFxuIDE0ODpcXHQjZW5kaWZcXG4gMTQ5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6MzYuODI5NzM2Nzk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzMjM3NzQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBzdGFydCB0byBpbnZlc3RpZ2F0ZSB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNgIGZpbGUgYW5kIGl0cyBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uLlxuXG4qKkluaXRpYWwgRXhwbG9yYXRpb24gb2YgbmZ0X3N5bnByb3h5LmMgYW5kIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYG5mdF9zeW5wcm94eWAgbW9kdWxlLiBGaXJzdCwgSSB3YW50IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiB0aGUgZW52aXJvbm1lbnQgdGhhdCB0aGlzIG1vZHVsZSBpcyBsaXZpbmcgaW4uIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNgIGRpcmVjdGx5LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYnkgZXhhbWluaW5nIHRoZSBzb3VyY2UgY29kZSwgSSBjYW4gcGljayB1cCBvbiB0aGUgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbnMgYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJmYWNlcyB0aGF0IGFyZSBleHBvc2VkIGZvciB1c2UgZWxzZXdoZXJlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIE5ldGZpbHRlciBmcmFtZXdvcmssIGFzIHdlbGwgYXMgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgaW4gZ2VuZXJhbC5cblxuVGhlbiwgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBjb2RlLCBJJ2xsIGRlZmluaXRlbHkgbmVlZCB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIHJlbGV2YW50IHN5bWJvbHMgYW5kIGNvbmZpZ3MgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmVzIGRlcGVuZCBvbiB0aGlzIG1vZHVsZSBhbmQgaG93IGl0IGlzIGJyb3VnaHQgaW50byB0aGUgYnVpbGQuIFRoYXQncyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgaG93IHNvbWV0aGluZyBmaXRzIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTE2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTo0MC4zNjIxMTY2NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaXAuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3lucHJveHkuaFxcdTAwM2VcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3N5bnByb3h5LmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX3N5bnByb3h5LmhcXHUwMDNlXFxuICAxMzpcXHRcXG4gIDE0OlxcdHN0cnVjdCBuZnRfc3lucHJveHkge1xcbiAgMTU6XFx0XFx0c3RydWN0IG5mX3N5bnByb3h5X2luZm9cXHRpbmZvO1xcbiAgMTY6XFx0fTtcXG4gIDE3OlxcdFxcbiAgMTg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9zeW5wcm94eV9wb2xpY3lbTkZUQV9TWU5QUk9YWV9NQVggKyAxXSA9IHtcXG4gIDE5OlxcdFxcdFtORlRBX1NZTlBST1hZX01TU11cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXFxuICAyMDpcXHRcXHRbTkZUQV9TWU5QUk9YWV9XU0NBTEVdXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIFRDUF9NQVhfV1NDQUxFKSxcXG4gIDIxOlxcdFxcdFtORlRBX1NZTlBST1hZX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9TWU5QUk9YWV9PUFRfTUFTSyksXFxuICAyMjpcXHR9O1xcbiAgMjM6XFx0XFxuICAyNDpcXHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfdGNwX29wdGlvbnMoc3RydWN0IHN5bnByb3h5X29wdGlvbnMgKm9wdHMsXFxuICAyNTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcCxcXG4gIDI2OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCxcXG4gIDI3OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5mX3N5bnByb3h5X2luZm8gKmluZm8pXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHR0aGlzX2NwdV9pbmMoc25ldC1cXHUwMDNlc3RhdHMtXFx1MDAzZXN5bl9yZWNlaXZlZCk7XFxuICAzMDpcXHRcXHRpZiAodGNwLVxcdTAwM2VlY2UgXFx1MDAyNlxcdTAwMjYgdGNwLVxcdTAwM2Vjd3IpXFxuICAzMTpcXHRcXHRcXHRvcHRzLVxcdTAwM2VvcHRpb25zIHw9IE5GX1NZTlBST1hZX09QVF9FQ047XFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdG9wdHMtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNj0gaW5mby1cXHUwMDNlb3B0aW9ucztcXG4gIDM0OlxcdFxcdG9wdHMtXFx1MDAzZW1zc19lbmNvZGUgPSBvcHRzLVxcdTAwM2Vtc3Nfb3B0aW9uO1xcbiAgMzU6XFx0XFx0b3B0cy1cXHUwMDNlbXNzX29wdGlvbiA9IGluZm8tXFx1MDAzZW1zcztcXG4gIDM2OlxcdFxcdGlmIChvcHRzLVxcdTAwM2VvcHRpb25zIFxcdTAwMjYgTkZfU1lOUFJPWFlfT1BUX1RJTUVTVEFNUClcXG4gIDM3OlxcdFxcdFxcdHN5bnByb3h5X2luaXRfdGltZXN0YW1wX2Nvb2tpZShpbmZvLCBvcHRzKTtcXG4gIDM4OlxcdFxcdGVsc2VcXG4gIDM5OlxcdFxcdFxcdG9wdHMtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNj0gfihORl9TWU5QUk9YWV9PUFRfV1NDQUxFIHxcXG4gIDQwOlxcdFxcdFxcdFxcdFxcdCAgIE5GX1NZTlBST1hZX09QVF9TQUNLX1BFUk0gfFxcbiAgNDE6XFx0XFx0XFx0XFx0XFx0ICAgTkZfU1lOUFJPWFlfT1BUX0VDTik7XFxuICA0MjpcXHR9XFxuICA0MzpcXHRcXG4gIDQ0OlxcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y0KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuICA0NTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAgNDY6XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiAgNDc6XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcCxcXG4gIDQ4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGNwaGRyICpfdGNwaCxcXG4gIDQ5OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc3lucHJveHlfb3B0aW9ucyAqb3B0cylcXG4gIDUwOlxcdHtcXG4gIDUxOlxcdFxcdHN0cnVjdCBuZl9zeW5wcm94eV9pbmZvIGluZm8gPSBSRUFEX09OQ0UocHJpdi1cXHUwMDNlaW5mbyk7XFxuICA1MjpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBuZnRfbmV0KHBrdCk7XFxuICA1MzpcXHRcXHRzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0ID0gc3lucHJveHlfcGVybmV0KG5ldCk7XFxuICA1NDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0LVxcdTAwM2Vza2I7XFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdGlmICh0Y3AtXFx1MDAzZXN5bikge1xcbiAgNTc6XFx0XFx0XFx0LyogSW5pdGlhbCBTWU4gZnJvbSBjbGllbnQgKi9cXG4gIDU4OlxcdFxcdFxcdG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsIFxcdTAwMjZpbmZvKTtcXG4gIDU5OlxcdFxcdFxcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFjayhuZXQsIHNrYiwgdGNwLCBvcHRzKTtcXG4gIDYwOlxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuICA2MTpcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XFxuICA2MjpcXHRcXHR9IGVsc2UgaWYgKHRjcC1cXHUwMDNlYWNrKSB7XFxuICA2MzpcXHRcXHRcXHQvKiBBQ0sgZnJvbSBjbGllbnQgKi9cXG4gIDY0OlxcdFxcdFxcdGlmIChzeW5wcm94eV9yZWN2X2NsaWVudF9hY2sobmV0LCBza2IsIHRjcCwgb3B0cyxcXG4gIDY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgbnRvaGwodGNwLVxcdTAwM2VzZXEpKSkge1xcbiAgNjY6XFx0XFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gIDY3OlxcdFxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX1NUT0xFTjtcXG4gIDY4OlxcdFxcdFxcdH0gZWxzZSB7XFxuICA2OTpcXHRcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbiAgNzA6XFx0XFx0XFx0fVxcbiAgNzE6XFx0XFx0fVxcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0lQVjYpXFxuICA3NTpcXHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92Nihjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxcbiAgNzY6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4gIDc3OlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gIDc4OlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3AsXFxuICA3OTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRjcGhkciAqX3RjcGgsXFxuICA4MDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHN5bnByb3h5X29wdGlvbnMgKm9wdHMpXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRzdHJ1Y3QgbmZfc3lucHJveHlfaW5mbyBpbmZvID0gUkVBRF9PTkNFKHByaXYtXFx1MDAzZWluZm8pO1xcbiAgODM6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gbmZ0X25ldChwa3QpO1xcbiAgODQ6XFx0XFx0c3RydWN0IHN5bnByb3h5X25ldCAqc25ldCA9IHN5bnByb3h5X3Blcm5ldChuZXQpO1xcbiAgODU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRpZiAodGNwLVxcdTAwM2VzeW4pIHtcXG4gIDg4OlxcdFxcdFxcdC8qIEluaXRpYWwgU1lOIGZyb20gY2xpZW50ICovXFxuICA4OTpcXHRcXHRcXHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcXHUwMDI2aW5mbyk7XFxuICA5MDpcXHRcXHRcXHRzeW5wcm94eV9zZW5kX2NsaWVudF9zeW5hY2tfaXB2NihuZXQsIHNrYiwgdGNwLCBvcHRzKTtcXG4gIDkxOlxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuICA5MjpcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XFxuICA5MzpcXHRcXHR9IGVsc2UgaWYgKHRjcC1cXHUwMDNlYWNrKSB7XFxuICA5NDpcXHRcXHRcXHQvKiBBQ0sgZnJvbSBjbGllbnQgKi9cXG4gIDk1OlxcdFxcdFxcdGlmIChzeW5wcm94eV9yZWN2X2NsaWVudF9hY2tfaXB2NihuZXQsIHNrYiwgdGNwLCBvcHRzLFxcbiAgOTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBudG9obCh0Y3AtXFx1MDAzZXNlcSkpKSB7XFxuICA5NzpcXHRcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiAgOTg6XFx0XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfU1RPTEVOO1xcbiAgOTk6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTAwOlxcdFxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjQwLjM2MjIwNzkyNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzM2MTAxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0OlxuXG4qKkFuYWx5emluZyBgbmZ0X3N5bnByb3h5LmNgIEZ1cnRoZXIqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkOiBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgKmFjdHVhbGx5KiBleGFtaW5lIHRoZSBjb2RlIGluIGBuZnRfc3lucHJveHkuY2AuIE5vIG1vcmUgdGhlb3JldGljYWwgZGlzY3Vzc2lvbnMsIG5vIG1vcmUgbG9va2luZyBhdCB0aGUgcHJvYmxlbSBmcm9tIHRoZSBvdXRzaWRlIOKAkyB0aW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgKnJlYWxseSogdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5OiBob3cgaXQncyAqYWN0dWFsbHkqIGRvbmUuIFdoZXJlIGFyZSB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzPyBXaGF0J3MgdGhlIGZsb3cgY29udHJvbD8gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbiBjYWxscz8gV2hhdCBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZSBwcmVzZW50PyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyBhY2NvdW50ZWQgZm9yPyBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBwcmFjdGljYWwgZXhlY3V0aW9uIG9mIHRoZSBzeW5wcm94eSBmdW5jdGlvbmFsaXR5LiBJJ20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIHRoZSBhc3N1bXB0aW9ucyBiYWtlZCBpbnRvIHRoZSBkZXNpZ24sIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIHRoYXQgbWlnaHQgcmVxdWlyZSBjbG9zZXIgc2NydXRpbnkgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBmdXR1cmUgbWFpbnRhaW5hYmlsaXR5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjEwNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6NDMuMzM1ODIwNTkxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0c3RhdGljIGludCBuZnRfc3lucHJveHlfZG9faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiAxNTQ6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXFxuIDE1NTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2KVxcbiAxNTY6XFx0e1xcbiAxNTc6XFx0XFx0c3RydWN0IHN5bnByb3h5X25ldCAqc25ldCA9IHN5bnByb3h5X3Blcm5ldChjdHgtXFx1MDAzZW5ldCk7XFxuIDE1ODpcXHRcXHR1MzIgZmxhZ3M7XFxuIDE1OTpcXHRcXHRpbnQgZXJyO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRpZiAodGJbTkZUQV9TWU5QUk9YWV9NU1NdKVxcbiAxNjI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaW5mby5tc3MgPSBudG9ocyhubGFfZ2V0X2JlMTYodGJbTkZUQV9TWU5QUk9YWV9NU1NdKSk7XFxuIDE2MzpcXHRcXHRpZiAodGJbTkZUQV9TWU5QUk9YWV9XU0NBTEVdKVxcbiAxNjQ6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaW5mby53c2NhbGUgPSBubGFfZ2V0X3U4KHRiW05GVEFfU1lOUFJPWFlfV1NDQUxFXSk7XFxuIDE2NTpcXHRcXHRpZiAodGJbTkZUQV9TWU5QUk9YWV9GTEFHU10pIHtcXG4gMTY2OlxcdFxcdFxcdGZsYWdzID0gbnRvaGwobmxhX2dldF9iZTMyKHRiW05GVEFfU1lOUFJPWFlfRkxBR1NdKSk7XFxuIDE2NzpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiB+TkZfU1lOUFJPWFlfT1BUX01BU0spXFxuIDE2ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDE2OTpcXHRcXHRcXHRwcml2LVxcdTAwM2VpbmZvLm9wdGlvbnMgPSBmbGFncztcXG4gMTcwOlxcdFxcdH1cXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0ZXJyID0gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cXHUwMDNlbmV0LCBjdHgtXFx1MDAzZWZhbWlseSk7XFxuIDE3MzpcXHRcXHRpZiAoZXJyKVxcbiAxNzQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0c3dpdGNoIChjdHgtXFx1MDAzZWZhbWlseSkge1xcbiAxNzc6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuIDE3ODpcXHRcXHRcXHRlcnIgPSBuZl9zeW5wcm94eV9pcHY0X2luaXQoc25ldCwgY3R4LVxcdTAwM2VuZXQpO1xcbiAxNzk6XFx0XFx0XFx0aWYgKGVycilcXG4gMTgwOlxcdFxcdFxcdFxcdGdvdG8gbmZfY3RfZmFpbHVyZTtcXG4gMTgxOlxcdFxcdFxcdGJyZWFrO1xcbiAxODI6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX1RBQkxFU19JUFY2KVxcbiAxODM6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuIDE4NDpcXHRcXHRcXHRlcnIgPSBuZl9zeW5wcm94eV9pcHY2X2luaXQoc25ldCwgY3R4LVxcdTAwM2VuZXQpO1xcbiAxODU6XFx0XFx0XFx0aWYgKGVycilcXG4gMTg2OlxcdFxcdFxcdFxcdGdvdG8gbmZfY3RfZmFpbHVyZTtcXG4gMTg3OlxcdFxcdFxcdGJyZWFrO1xcbiAxODg6XFx0I2VuZGlmXFxuIDE4OTpcXHRcXHRjYXNlIE5GUFJPVE9fSU5FVDpcXG4gMTkwOlxcdFxcdFxcdGVyciA9IG5mX3N5bnByb3h5X2lwdjRfaW5pdChzbmV0LCBjdHgtXFx1MDAzZW5ldCk7XFxuIDE5MTpcXHRcXHRcXHRpZiAoZXJyKVxcbiAxOTI6XFx0XFx0XFx0XFx0Z290byBuZl9jdF9mYWlsdXJlO1xcbiAxOTM6XFx0XFx0XFx0ZXJyID0gbmZfc3lucHJveHlfaXB2Nl9pbml0KHNuZXQsIGN0eC1cXHUwMDNlbmV0KTtcXG4gMTk0OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4gMTk1OlxcdFxcdFxcdFxcdG5mX3N5bnByb3h5X2lwdjRfZmluaShzbmV0LCBjdHgtXFx1MDAzZW5ldCk7XFxuIDE5NjpcXHRcXHRcXHRcXHRnb3RvIG5mX2N0X2ZhaWx1cmU7XFxuIDE5NzpcXHRcXHRcXHR9XFxuIDE5ODpcXHRcXHRcXHRicmVhaztcXG4gMTk5OlxcdFxcdH1cXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0cmV0dXJuIDA7XFxuIDIwMjpcXHRcXG4gMjAzOlxcdG5mX2N0X2ZhaWx1cmU6XFxuIDIwNDpcXHRcXHRuZl9jdF9uZXRuc19wdXQoY3R4LVxcdTAwM2VuZXQsIGN0eC1cXHUwMDNlZmFtaWx5KTtcXG4gMjA1OlxcdFxcdHJldHVybiBlcnI7XFxuIDIwNjpcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgpXFxuIDIwOTpcXHR7XFxuIDIxMDpcXHRcXHRzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0ID0gc3lucHJveHlfcGVybmV0KGN0eC1cXHUwMDNlbmV0KTtcXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0c3dpdGNoIChjdHgtXFx1MDAzZWZhbWlseSkge1xcbiAyMTM6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuIDIxNDpcXHRcXHRcXHRuZl9zeW5wcm94eV9pcHY0X2Zpbmkoc25ldCwgY3R4LVxcdTAwM2VuZXQpO1xcbiAyMTU6XFx0XFx0XFx0YnJlYWs7XFxuIDIxNjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0lQVjYpXFxuIDIxNzpcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG4gMjE4OlxcdFxcdFxcdG5mX3N5bnByb3h5X2lwdjZfZmluaShzbmV0LCBjdHgtXFx1MDAzZW5ldCk7XFxuIDIxOTpcXHRcXHRcXHRicmVhaztcXG4gMjIwOlxcdCNlbmRpZlxcbiAyMjE6XFx0XFx0Y2FzZSBORlBST1RPX0lORVQ6XFxuIDIyMjpcXHRcXHRcXHRuZl9zeW5wcm94eV9pcHY0X2Zpbmkoc25ldCwgY3R4LVxcdTAwM2VuZXQpO1xcbiAyMjM6XFx0XFx0XFx0bmZfc3lucHJveHlfaXB2Nl9maW5pKHNuZXQsIGN0eC1cXHUwMDNlbmV0KTtcXG4gMjI0OlxcdFxcdFxcdGJyZWFrO1xcbiAyMjU6XFx0XFx0fVxcbiAyMjY6XFx0XFx0bmZfY3RfbmV0bnNfcHV0KGN0eC1cXHUwMDNlbmV0LCBjdHgtXFx1MDAzZWZhbWlseSk7XFxuIDIyNzpcXHR9XFxuIDIyODpcXHRcXG4gMjI5OlxcdHN0YXRpYyBpbnQgbmZ0X3N5bnByb3h5X2RvX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdilcXG4gMjMwOlxcdHtcXG4gMjMxOlxcdFxcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBORlRBX1NZTlBST1hZX01TUywgaHRvbnMocHJpdi1cXHUwMDNlaW5mby5tc3MpKSB8fFxcbiAyMzI6XFx0XFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBORlRBX1NZTlBST1hZX1dTQ0FMRSwgcHJpdi1cXHUwMDNlaW5mby53c2NhbGUpIHx8XFxuIDIzMzpcXHRcXHQgICAgbmxhX3B1dF9iZTMyKHNrYiwgTkZUQV9TWU5QUk9YWV9GTEFHUywgaHRvbmwocHJpdi1cXHUwMDNlaW5mby5vcHRpb25zKSkpXFxuIDIzNDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0cmV0dXJuIDA7XFxuIDIzNzpcXHRcXG4gMjM4OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4gMjM5OlxcdFxcdHJldHVybiAtMTtcXG4gMjQwOlxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiAyNDM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAyNDQ6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuIDI0NTpcXHR7XFxuIDI0NjpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0bmZ0X3N5bnByb3h5X2RvX2V2YWwocHJpdiwgcmVncywgcGt0KTtcXG4gMjQ5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6NDMuMzM1OTA5MDExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5ODE2NzE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgZm9yIG5mdF9zeW5wcm94eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBuZnRfc3lucHJveHlgLiBMZXQncyBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcuIEknbSBnb2luZyB0byB3YW50IHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB3aGV0aGVyIHRoaXMgaXMgYSBtb2R1bGUgb3IgYnVpbHQtaW4sIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgaXQncyBlbmFibGVkLiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJJ2xsIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqaW50ZXJlc3RpbmcqIGRlZmF1bHRzLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gc2VlIGlmIGFueSBuZXcgb3B0aW9ucyBhcmUgZXhwb3NlZCBiYXNlZCBvbiB0aGlzIHNlbGVjdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBtZW51IHN0cnVjdHVyZSBhbmQgdGhlIGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBMZXQncyBnZXQgY3JhY2tpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjQ1LjUzNDA4MDA3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAzNTY1OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZUX1NZTlBST1hZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0OC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQ5OmNvbmZpZyBORlRfU1lOUFJPWFlcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjUwLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIFNZTlBST1hZIGV4cHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTMyPW9iai0kKENPTkZJR19ORlRfWEZSTSlcXHRcXHQrPSBuZnRfeGZybS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMzM6b2JqLSQoQ09ORklHX05GVF9TWU5QUk9YWSlcXHQrPSBuZnRfc3lucHJveHkub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTo0NS41OTQ0NDY4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY0MzA5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY0OS4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleGFtaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG5ldGZpbHRlci4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gYmUgdGhlcmUgLSBtYXliZSBhIG5ldyBmZWF0dXJlLCBhIGNoYW5nZSBpbiBob3cgc29tZXRoaW5nJ3MgZW5hYmxlZCwgb3IgcGVyaGFwcyBhIGRlcGVuZGVuY3kgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzbyBsZXQncyBnZXQgZG93biB0byBpdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBob2xkcyBmb3IgdXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjQ3LjQ1ODc2MDA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjQ1OlxcdFxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbiA2NDY6XFx0XFx0aGVscFxcbiA2NDc6XFx0XFx0ICBUaGlzIG1ha2VzIHRyYW5zcGFyZW50IHByb3h5IHN1cHBvcnQgYXZhaWxhYmxlIGluIG5mdGFibGVzLlxcbiA2NDg6XFx0XFxuIDY0OTpcXHRjb25maWcgTkZUX1NZTlBST1hZXFxuIDY1MDpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIHN1cHBvcnRcXFwiXFxuIDY1MTpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJfQURWQU5DRURcXG4gNjUyOlxcdFxcdHNlbGVjdCBORVRGSUxURVJfU1lOUFJPWFlcXG4gNjUzOlxcdFxcdHNlbGVjdCBTWU5fQ09PS0lFU1xcbiA2NTQ6XFx0XFx0aGVscFxcbiA2NTU6XFx0XFx0ICBUaGUgU1lOUFJPWFkgZXhwcmVzc2lvbiBhbGxvd3MgeW91IHRvIGludGVyY2VwdCBUQ1AgY29ubmVjdGlvbnMgYW5kXFxuIDY1NjpcXHRcXHQgIGVzdGFibGlzaCB0aGVtIHVzaW5nIHN5bmNvb2tpZXMgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCBvbiB0byB0aGVcXG4gNjU3OlxcdFxcdCAgc2VydmVyLiBUaGlzIGFsbG93cyB0byBhdm9pZCBjb25udHJhY2sgYW5kIHNlcnZlciByZXNvdXJjZSB1c2FnZVxcbiA2NTg6XFx0XFx0ICBkdXJpbmcgU1lOLWZsb29kIGF0dGFja3MuXFxuIDY1OTpcXHRcXG4gNjYwOlxcdGlmIE5GX1RBQkxFU19ORVRERVZcXG4gNjYxOlxcdFxcbiA2NjI6XFx0Y29uZmlnIE5GX0RVUF9ORVRERVZcXG4gNjYzOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnRcXFwiXFxuIDY2NDpcXHRcXHRoZWxwXFxuIDY2NTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGdlbmVyaWMgcGFja2V0IGR1cGxpY2F0aW9uIGluZnJhc3RydWN0dXJlXFxuIDY2NjpcXHRcXHQgIGZvciBOZXRmaWx0ZXIuXFxuIDY2NzpcXHRcXG4gNjY4OlxcdGNvbmZpZyBORlRfRFVQX05FVERFVlxcbiA2Njk6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XFxcIlxcbiA2NzA6XFx0XFx0c2VsZWN0IE5GX0RVUF9ORVRERVZcXG4gNjcxOlxcdFxcdGhlbHBcXG4gNjcyOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBwYWNrZXQgZHVwbGljYXRpb24gZm9yIHRoZSBcXFwibmV0ZGV2XFxcIiBmYW1pbHkuXFxuIDY3MzpcXHRcXG4gNjc0OlxcdGNvbmZpZyBORlRfRldEX05FVERFVlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTo0Ny40NTg4OTQ3OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDIzODMyNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENoZWNrc3VtbWluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZl9jaGVja3N1bWAgc2l0dWF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBpdCdzIHJlc3BvbnNpYmxlIGZvciwgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoYXQgb2xkZXIgYG5mX2lwX2NoZWNrc3VtYCBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBnZXQgdGhlIGRldGFpbHMuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBgZ3JlcGAgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgYG5mX2NoZWNrc3VtYCB3aXRoaW4gdGhlIHNvdXJjZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHVzYWdlLiBGcm9tIHRoZXJlLCBJIGNhbiBjb21wYXJlIGl0IHRvIHRoZSBvbGRlciBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGV2b2x1dGlvbiBvZiB0aGUgY2hlY2tzdW0gaGFuZGxpbmcgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjQ5Ljg4MjczMTAxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg3MDg3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2NoZWNrc3VtXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaD0zNzM9c3RydWN0IG5mX3F1ZXVlX2VudHJ5O1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtMzc0LVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6Mzc1Ol9fc3VtMTYgbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaC0zNzYtXFx0XFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwX3ZzLmg9MjExNz1zdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL25ldC9pcF92cy5oLTIxMjItXFx0LyogVmFsaWRhdGUgY3N1bSBldmVuIGZvciBGT1JXQVJEICovXFxuaW5jbHVkZS9uZXQvaXBfdnMuaDoyMTIzOlxcdHJldHVybiAhbmZfY2hlY2tzdW0oc2tiLCBORl9JTkVUX0xPQ0FMX0lOLCBvZmZzZXQsIHByb3RvLCBhZik7XFxuaW5jbHVkZS9uZXQvaXBfdnMuaC0yMTI0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6NTAuMjY5ODI4MDU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NzExNTMzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRml4aW5nIGEgQ3JpdGljYWwgQ2hlY2tzdW0gQnVnIGluIGBuZnRfc3lucHJveHlgIGZvciBJUHY2KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgbmZ0X3N5bnByb3h5YCBjb2RlLCBhbmQgaXQgc2VlbXMgdGhlcmUncyBhIHByb2JsZW0uIEl0IHN1cHBvcnRzIGJvdGggSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgZ3JlYXQsIGhhbmRsaW5nIGBORlBST1RPX0lQVjRgLCBgTkZQUk9UT19JUFY2YCwgYW5kIHRoZSBvdGhlcnMuIEhvd2V2ZXIsIGl0IHdhcyB1bmNvbmRpdGlvbmFsbHkgY2FsbGluZyBgbmZfaXBfY2hlY2tzdW1gLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IGBuZl9pcF9jaGVja3N1bWAgaXMgc3BlY2lmaWNhbGx5IElQdjQgb25seS4gRm9yIElQdjYgd2UgbmVlZCBgbmZfaXA2X2NoZWNrc3VtYCwgb3IgYSBnZW5lcmljIGFwcHJvYWNoIGxpa2UgYG5mX2NoZWNrc3VtYCB3aXRoIGBuZnRfcGYocGt0KWAuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgKG9yIHdoaWNoZXZlciBldmFsdWF0aW9uIGZ1bmN0aW9uIGlzIHVzZWQpIHByb2Nlc3NlcyBhbiBJUHY2IHBhY2tldCwgaXQncyB1c2luZyB0aGUgd3JvbmcgY2hlY2tzdW0gY2FsY3VsYXRpb24sIHNwZWNpZmljYWxseSwgdGhlIGBpcF9oZHIoc2tiKWAgaXMgYmVpbmcgdXNlZCBvbiB0aGUgSVB2NiBwYWNrZXQsIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNoZWNrc3VtcyBhbmQgbGlrZWx5IG1hbGZvcm1lZCBoYW5kbGluZywgd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LlxuXG5UaGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZC4gUmVwbGFjZSB0aGUgY2FsbCB0byBgbmZfaXBfY2hlY2tzdW1gIHdpdGggYG5mX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQLCBuZnRfcGYocGt0KSlgLiBUaGlzIHVzZXMgdGhlIGdlbmVyaWMgY2hlY2tzdW0gZnVuY3Rpb24sIG1ha2luZyBzdXJlIHdlIHBpY2sgdGhlIGNvcnJlY3QgcHJvdG9jb2wgZmFtaWx5IHRvIGNvbXB1dGUgdGhlIGNoZWNrc3VtLCB3aGljaCBzb2x2ZXMgdGhlIElQdjYgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIHByb2JsZW0gYW5kIGlzIG1vcmUgZ2VuZXJhbC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBjb2RlLCBhbmQgaXMgaXQgd29ydGggZnV6emluZz8gTGV0J3Mgc2VlLi4uXG5cblJlYWNoYWJpbGl0eTogV2VsbCwgTmV0ZmlsdGVyIGFuZCBuZnRhYmxlcyBzeW5wcm94eSBhcmUgZnVsbHkgZW11bGF0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2luZyBuZXRsaW5rIHNvY2tldHMgdG8gY3JlYXRlIG5mdGFibGVzIHJ1bGVzIHdpdGggdGhlIHN5bnByb3h5IGV4cHJlc3Npb24uIFBhY2tldCBnZW5lcmF0aW9uIG92ZXIgbG9vcGJhY2ssIHR1bi90YXAsIG9yIHZldGggZGV2aWNlcyBpcyBzaW1wbGUuIEl0J3MgZXZlbiByZWFjaGFibGUgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwcy4gQ2hlY2shXG5cbk1vZGlmaWNhdGlvbnMgaW4gY29yZSBzdWJzeXN0ZW1zIC8gbmV0d29ya2luZzogWWVzLCB0aGlzIGRlZmluaXRlbHkgbW9kaWZpZXMgcGFja2V0IGV2YWx1YXRpb24gbG9naWMgaW4gbmV0ZmlsdGVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBORlQgc3lucHJveHkgZXhwcmVzc2lvbi4gQW5vdGhlciBjaGVjayFcblxuV29ydGhGdXp6aW5nOiBJJ2Qgc2F5IHllcywgYmVjYXVzZSB0aGlzIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFdpdGggYWxsIG9mIHRoYXQsIGl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlIGlzIGEgcHJpbWUgY2FuZGlkYXRlLlxuXG5Db25maWdzOiBMZXQgbWUgY2hlY2sgdGhlIGNvbmZpZ3MuIGBDT05GSUdfTkZUX1NZTlBST1hZYCwgYENPTkZJR19ORl9UQUJMRVNgLCBgQ09ORklHX05GX0NPTk5UUkFDS2AsIGBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEYCwgYENPTkZJR19ORl9UQUJMRVNfSU5FVGAsIGBDT05GSUdfTkZfVEFCTEVTX0lQVjZgLCBgQ09ORklHX05GX1RBQkxFU19JUFY0YCwgYW5kIGBDT05GSUdfTkZfVEFCTEVTX05FVERFVmAgYWxsIHNlZW0gcmVsZXZhbnQuXG5cblN5bWJvbHM6IFRoZSBtYWluIHN5bWJvbHMgdG8gY29uc2lkZXIgYXJlIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgKG9yIGBuZnRfc3lucHJveHlfZXZhbGApLCBgbmZ0X3N5bnByb3h5X2V2YWxfdjRgLCBgbmZ0X3N5bnByb3h5X2V2YWxfdjZgLCBgbmZ0X3N5bnByb3h5X2RvX2luaXRgLCBhbmQgYG5mdF9zeW5wcm94eV9vYmpfZXZhbGAuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBieSBpbnNwZWN0aW5nIGBuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jYCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTo1Ni4xNDA5ODQwNjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiAyNDM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAyNDQ6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuIDI0NTpcXHR7XFxuIDI0NjpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0bmZ0X3N5bnByb3h5X2RvX2V2YWwocHJpdiwgcmVncywgcGt0KTtcXG4gMjQ5OlxcdH1cXG4gMjUwOlxcdFxcbiAyNTE6XFx0c3RhdGljIGludCBuZnRfc3lucHJveHlfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gMjUyOlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuIDI1MzpcXHR7XFxuIDI1NDpcXHRcXHRpZiAoY3R4LVxcdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19JUFY0IFxcdTAwMjZcXHUwMDI2XFxuIDI1NTpcXHRcXHQgICAgY3R4LVxcdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19JUFY2IFxcdTAwMjZcXHUwMDI2XFxuIDI1NjpcXHRcXHQgICAgY3R4LVxcdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19JTkVUKVxcbiAyNTc6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyNTg6XFx0XFxuIDI1OTpcXHRcXHRyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2hvb2tzKGN0eC1cXHUwMDNlY2hhaW4sICgxIFxcdTAwM2NcXHUwMDNjIE5GX0lORVRfTE9DQUxfSU4pIHxcXG4gMjYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAoMSBcXHUwMDNjXFx1MDAzYyBORl9JTkVUX0ZPUldBUkQpKTtcXG4gMjYxOlxcdH1cXG4gMjYyOlxcdFxcbiAyNjM6XFx0c3RhdGljIGludCBuZnRfc3lucHJveHlfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiAyNjQ6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIDI2NTpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxcbiAyNjY6XFx0e1xcbiAyNjc6XFx0XFx0c3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxuIDI2ODpcXHRcXG4gMjY5OlxcdFxcdHJldHVybiBuZnRfc3lucHJveHlfZG9faW5pdChjdHgsIHRiLCBwcml2KTtcXG4gMjcwOlxcdH1cXG4gMjcxOlxcdFxcbiAyNzI6XFx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gMjczOlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuIDI3NDpcXHR7XFxuIDI3NTpcXHRcXHRuZnRfc3lucHJveHlfZG9fZGVzdHJveShjdHgpO1xcbiAyNzY6XFx0fVxcbiAyNzc6XFx0XFxuIDI3ODpcXHRzdGF0aWMgaW50IG5mdF9zeW5wcm94eV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuIDI3OTpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgYm9vbCByZXNldClcXG4gMjgwOlxcdHtcXG4gMjgxOlxcdFxcdHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRyZXR1cm4gbmZ0X3N5bnByb3h5X2RvX2R1bXAoc2tiLCBwcml2KTtcXG4gMjg0OlxcdH1cXG4gMjg1OlxcdFxcbiAyODY6XFx0c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9zeW5wcm94eV90eXBlO1xcbiAyODc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3N5bnByb3h5X29wcyA9IHtcXG4gMjg4OlxcdFxcdC5ldmFsXFx0XFx0PSBuZnRfc3lucHJveHlfZXZhbCxcXG4gMjg5OlxcdFxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3N5bnByb3h5KSksXFxuIDI5MDpcXHRcXHQuaW5pdFxcdFxcdD0gbmZ0X3N5bnByb3h5X2luaXQsXFxuIDI5MTpcXHRcXHQuZGVzdHJveVxcdD0gbmZ0X3N5bnByb3h5X2Rlc3Ryb3ksXFxuIDI5MjpcXHRcXHQuZHVtcFxcdFxcdD0gbmZ0X3N5bnByb3h5X2R1bXAsXFxuIDI5MzpcXHRcXHQudHlwZVxcdFxcdD0gXFx1MDAyNm5mdF9zeW5wcm94eV90eXBlLFxcbiAyOTQ6XFx0XFx0LnZhbGlkYXRlXFx0PSBuZnRfc3lucHJveHlfdmFsaWRhdGUsXFxuIDI5NTpcXHR9O1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X3N5bnByb3h5X3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG4gMjk4OlxcdFxcdC5vcHNcXHRcXHQ9IFxcdTAwMjZuZnRfc3lucHJveHlfb3BzLFxcbiAyOTk6XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJzeW5wcm94eVxcXCIsXFxuIDMwMDpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAzMDE6XFx0XFx0LnBvbGljeVxcdFxcdD0gbmZ0X3N5bnByb3h5X3BvbGljeSxcXG4gMzAyOlxcdFxcdC5tYXhhdHRyXFx0PSBORlRBX1NZTlBST1hZX01BWCxcXG4gMzAzOlxcdH07XFxuIDMwNDpcXHRcXG4gMzA1OlxcdHN0YXRpYyBpbnQgbmZ0X3N5bnByb3h5X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIDMwNjpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXFxuIDMwNzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4gMzA4OlxcdHtcXG4gMzA5OlxcdFxcdHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0cmV0dXJuIG5mdF9zeW5wcm94eV9kb19pbml0KGN0eCwgdGIsIHByaXYpO1xcbiAzMTI6XFx0fVxcbiAzMTM6XFx0XFxuIDMxNDpcXHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfb2JqX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gMzE1OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4gMzE2OlxcdHtcXG4gMzE3OlxcdFxcdG5mdF9zeW5wcm94eV9kb19kZXN0cm95KGN0eCk7XFxuIDMxODpcXHR9XFxuIDMxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzU6NTYuMTQxMDkwODQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0Njc4ODY0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0OlxuXG4qKkFuYWx5emluZyBgbmZ0X3N5bnByb3h5LmNgIEZ1cnRoZXIqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkOiBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgKmFjdHVhbGx5KiBleGFtaW5lIHRoZSBjb2RlIGluIGBuZnRfc3lucHJveHkuY2AuIE5vIG1vcmUgdGhlb3JldGljYWwgZGlzY3Vzc2lvbnMsIG5vIG1vcmUgbG9va2luZyBhdCB0aGUgcHJvYmxlbSBmcm9tIHRoZSBvdXRzaWRlIOKAkyB0aW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgKnJlYWxseSogdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5OiBob3cgaXQncyAqYWN0dWFsbHkqIGRvbmUuIFdoZXJlIGFyZSB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzPyBXaGF0J3MgdGhlIGZsb3cgY29udHJvbD8gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbiBjYWxscz8gV2hhdCBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFyZSBwcmVzZW50PyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyBhY2NvdW50ZWQgZm9yPyBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBwcmFjdGljYWwgZXhlY3V0aW9uIG9mIHRoZSBzeW5wcm94eSBmdW5jdGlvbmFsaXR5LiBJJ20gbG9va2luZyB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIHRoZSBhc3N1bXB0aW9ucyBiYWtlZCBpbnRvIHRoZSBkZXNpZ24sIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIHRoYXQgbWlnaHQgcmVxdWlyZSBjbG9zZXIgc2NydXRpbnkgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBmdXR1cmUgbWFpbnRhaW5hYmlsaXR5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM1OjU4LjYwODk4MDU0OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRzdGF0aWMgaW50IG5mdF9zeW5wcm94eV9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfb2JqZWN0ICpvYmosIGJvb2wgcmVzZXQpXFxuIDMyMjpcXHR7XFxuIDMyMzpcXHRcXHRzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdHJldHVybiBuZnRfc3lucHJveHlfZG9fZHVtcChza2IsIHByaXYpO1xcbiAzMjY6XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHRzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4gMzI5OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAzMzA6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4gMzMxOlxcdHtcXG4gMzMyOlxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4gMzMzOlxcdFxcbiAzMzQ6XFx0XFx0bmZ0X3N5bnByb3h5X2RvX2V2YWwocHJpdiwgcmVncywgcGt0KTtcXG4gMzM1OlxcdH1cXG4gMzM2OlxcdFxcbiAzMzc6XFx0c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X29ial91cGRhdGUoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4gMzM4OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X29iamVjdCAqbmV3b2JqKVxcbiAzMzk6XFx0e1xcbiAzNDA6XFx0XFx0c3RydWN0IG5mdF9zeW5wcm94eSAqbmV3cHJpdiA9IG5mdF9vYmpfZGF0YShuZXdvYmopO1xcbiAzNDE6XFx0XFx0c3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRXUklURV9PTkNFKHByaXYtXFx1MDAzZWluZm8sIG5ld3ByaXYtXFx1MDAzZWluZm8pO1xcbiAzNDQ6XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRzdGF0aWMgc3RydWN0IG5mdF9vYmplY3RfdHlwZSBuZnRfc3lucHJveHlfb2JqX3R5cGU7XFxuIDM0NzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9zeW5wcm94eV9vYmpfb3BzID0ge1xcbiAzNDg6XFx0XFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfc3lucHJveHlfb2JqX3R5cGUsXFxuIDM0OTpcXHRcXHQuc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBuZnRfc3lucHJveHkpLFxcbiAzNTA6XFx0XFx0LmluaXRcXHRcXHQ9IG5mdF9zeW5wcm94eV9vYmpfaW5pdCxcXG4gMzUxOlxcdFxcdC5kZXN0cm95XFx0PSBuZnRfc3lucHJveHlfb2JqX2Rlc3Ryb3ksXFxuIDM1MjpcXHRcXHQuZHVtcFxcdFxcdD0gbmZ0X3N5bnByb3h5X29ial9kdW1wLFxcbiAzNTM6XFx0XFx0LmV2YWxcXHRcXHQ9IG5mdF9zeW5wcm94eV9vYmpfZXZhbCxcXG4gMzU0OlxcdFxcdC51cGRhdGVcXHRcXHQ9IG5mdF9zeW5wcm94eV9vYmpfdXBkYXRlLFxcbiAzNTU6XFx0fTtcXG4gMzU2OlxcdFxcbiAzNTc6XFx0c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X3N5bnByb3h5X29ial90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuIDM1ODpcXHRcXHQudHlwZVxcdFxcdD0gTkZUX09CSkVDVF9TWU5QUk9YWSxcXG4gMzU5OlxcdFxcdC5vcHNcXHRcXHQ9IFxcdTAwMjZuZnRfc3lucHJveHlfb2JqX29wcyxcXG4gMzYwOlxcdFxcdC5tYXhhdHRyXFx0PSBORlRBX1NZTlBST1hZX01BWCxcXG4gMzYxOlxcdFxcdC5wb2xpY3lcXHRcXHQ9IG5mdF9zeW5wcm94eV9wb2xpY3ksXFxuIDM2MjpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAzNjM6XFx0fTtcXG4gMzY0OlxcdFxcbiAzNjU6XFx0c3RhdGljIGludCBfX2luaXQgbmZ0X3N5bnByb3h5X21vZHVsZV9pbml0KHZvaWQpXFxuIDM2NjpcXHR7XFxuIDM2NzpcXHRcXHRpbnQgZXJyO1xcbiAzNjg6XFx0XFxuIDM2OTpcXHRcXHRlcnIgPSBuZnRfcmVnaXN0ZXJfb2JqKFxcdTAwMjZuZnRfc3lucHJveHlfb2JqX3R5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNTo1OC42MDkwNjk2NDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MjEzODY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBEaWdpdGFsIExhbmRzY2FwZTogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueSBkZWVwIGFuYWx5c2lzLCBsZXQncyBlc3RhYmxpc2ggYSBjbGVhciBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICpCZWZvcmUgSSBnZXQgdG9vIGludm9sdmVkIGluIHNwZWNpZmljcywgaXQncyBwcnVkZW50IHRvIGNvbmR1Y3QgYSBzd2VlcCBvZiB0aGUgZW50aXJlIGZpbGUqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUsIHN0cnVjdHVyZSwgYW5kIGFueSBwb3RlbnRpYWwgcmVkIGZsYWdzIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGUgbGFyZ2VyIGNvbnRleHQgaXMgY3J1Y2lhbCB0byBjb250ZXh0dWFsaXppbmcgZGV0YWlscy4gVGhpcyBpbml0aWFsIHBhc3Mgd2lsbCBpbmZvcm0gd2hlcmUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIGZvciBhIG1lYW5pbmdmdWwgYnJlYWtkb3duIGFuZCBhc3Nlc3NtZW50LCBhbmQgd2hldGhlciB0byByZWZpbmUgbXkgYXBwcm9hY2ggdG8gdGhlIGRhdGEuIE5vIGFzc3VtcHRpb25zLCBqdXN0IGEgbWV0aG9kaWNhbCBzY29waW5nIGV4ZXJjaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MDAuOTgxMjEwOTY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzcwOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAzNzE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0ZXJyID0gbmZ0X3JlZ2lzdGVyX2V4cHIoXFx1MDAyNm5mdF9zeW5wcm94eV90eXBlKTtcXG4gMzc0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAzNzU6XFx0XFx0XFx0Z290byBlcnI7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdHJldHVybiAwO1xcbiAzNzg6XFx0XFxuIDM3OTpcXHRlcnI6XFxuIDM4MDpcXHRcXHRuZnRfdW5yZWdpc3Rlcl9vYmooXFx1MDAyNm5mdF9zeW5wcm94eV9vYmpfdHlwZSk7XFxuIDM4MTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzODI6XFx0fVxcbiAzODM6XFx0XFxuIDM4NDpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgbmZ0X3N5bnByb3h5X21vZHVsZV9leGl0KHZvaWQpXFxuIDM4NTpcXHR7XFxuIDM4NjpcXHRcXHRuZnRfdW5yZWdpc3Rlcl9leHByKFxcdTAwMjZuZnRfc3lucHJveHlfdHlwZSk7XFxuIDM4NzpcXHRcXHRuZnRfdW5yZWdpc3Rlcl9vYmooXFx1MDAyNm5mdF9zeW5wcm94eV9vYmpfdHlwZSk7XFxuIDM4ODpcXHR9XFxuIDM4OTpcXHRcXG4gMzkwOlxcdG1vZHVsZV9pbml0KG5mdF9zeW5wcm94eV9tb2R1bGVfaW5pdCk7XFxuIDM5MTpcXHRtb2R1bGVfZXhpdChuZnRfc3lucHJveHlfbW9kdWxlX2V4aXQpO1xcbiAzOTI6XFx0XFxuIDM5MzpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIDM5NDpcXHRNT0RVTEVfQVVUSE9SKFxcXCJGZXJuYW5kbyBGZXJuYW5kZXogXFx1MDAzY2ZmbWFuY2VyYUByaXNldXAubmV0XFx1MDAzZVxcXCIpO1xcbiAzOTU6XFx0TU9EVUxFX0FMSUFTX05GVF9FWFBSKFxcXCJzeW5wcm94eVxcXCIpO1xcbiAzOTY6XFx0TU9EVUxFX0FMSUFTX05GVF9PQkooTkZUX09CSkVDVF9TWU5QUk9YWSk7XFxuIDM5NzpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIm5mdGFibGVzIFNZTlBST1hZIGV4cHJlc3Npb24gc3VwcG9ydFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNjowMC45ODEyODgwNTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY4NDY5MDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgQ2hlY2tzdW0gSXNzdWUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJvdWJsZXNob290aW5nIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGxpa2VseSBpbnZvbHZpbmcgTmV0ZmlsdGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgbmZfY2hlY2tzdW1gIGZ1bmN0aW9uYWxpdHkuIEkga25vdyBpdCdzIGEgY29yZSBwaWVjZSwgYW5kIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIE5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXJlIGV4YWN0bHkgdGhhdCdzIGRlZmluZWQuLi4gSSBiZWxpZXZlIGl0J3MgaW4gYG5ldC9uZXRmaWx0ZXIvdXRpbHMuY2AsIG9yIHNvbWV3aGVyZSBuZWFyYnkgaW4gdGhhdCBzdWJ0cmVlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgZmlsZSBhbmQgbGluZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBwb2ludCBvZiByZWZlcmVuY2UgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29kZSBhbmQgc3RhcnQgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjA0LjY2NTk4MDk0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMjUzNTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N1bTE2IG5mX2NoZWNrc3VtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg9MzczPXN0cnVjdCBuZl9xdWV1ZV9lbnRyeTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3NC1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjM3NTpfX3N1bTE2IG5mX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtMzc2LVxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTM3OC1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oOjM3OTpfX3N1bTE2IG5mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaC0zODAtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jPTk3PXN0YXRpYyBfX3N1bTE2IG5mX2lwNl9jaGVja3N1bV9wYXJ0aWFsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jLTEyMi1cXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM6MTIzOl9fc3VtMTYgbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxubmV0L25ldGZpbHRlci91dGlscy5jLTEyNC1cXHRcXHQgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHU4IHByb3RvY29sLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jPTE0MD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jaGVja3N1bSk7XFxubmV0L25ldGZpbHRlci91dGlscy5jLTE0MS1cXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM6MTQyOl9fc3VtMTYgbmZfY2hlY2tzdW1fcGFydGlhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTQzLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGxlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MDYuNTk4NTQ1NTk4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MzM4MTgzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBORlRhYmxlcyBTWU5QUk9YWSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoaXMgcGF0Y2ggaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIHRoZSBgbmZ0X3N5bnByb3h5X2RvX2V2YWxgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY2AuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQsIGl0IHNlZW1zLiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgZmlsZSByZXZlYWxzIGEgY2x1c3RlciBvZiByZWxhdGVkIGZ1bmN0aW9uczogYG5mdF9zeW5wcm94eV9ldmFsYCwgYG5mdF9zeW5wcm94eV9vYmpfZXZhbGAsIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIGBuZnRfc3lucHJveHlfZXZhbF92NGAgYW5kIGBuZnRfc3lucHJveHlfZXZhbF92NmAuIEl0IGFsc28gaW5jbHVkZXMgYG5mdF9zeW5wcm94eV9kb19pbml0YCB3aGljaCBpcyBpbnRlcmVzdGluZyAtIHByZXN1bWFibHkgc29tZSBzZXR1cC4gU28sIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgYW5kIHRoZSBvdGhlciBgX2V2YWxgIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBmb2N1cyBhcmVhcywgaW5jbHVkaW5nIGBuZnRfc3lucHJveHlfb2JqX2V2YWxgLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIHRvIHNlZSBob3cgdGhvc2UgaW50ZWdyYXRlIHdpdGggdGhlIGJyb2FkZXIgTkZUYWJsZXMgZnJhbWV3b3JrLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHBhdGNoIG1lbnRpb25zIGBORlRfU1lOUFJPWFlgLCBuYXR1cmFsbHksIGFuZCB3ZSBoYXZlIHRoZSB1c3VhbCBzdXNwZWN0czogYE5GX1RBQkxFU2AsIGBORl9UQUJMRVNfSVBWNGAsIGBORl9UQUJMRVNfSVBWNmAsIGBORl9UQUJMRVNfSU5FVGAsIGBORVRGSUxURVJfU1lOUFJPWFlgLCBhbmQgYE5GX0NPTk5UUkFDS2AuIFN0YW5kYXJkIGRlcGVuZGVuY2llcywgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfTkZUX1NZTlBST1hZYC4gTGV0J3MgZW5zdXJlIHRoZXNlIGFyZSBjb3JyZWN0LlxuXG5Mb29raW5nIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgbmVlZCB0byBjb25maXJtIGBORlRfU1lOUFJPWFlgJ3MgZGVwZW5kZW5jaWVzLiBJdCBzaG91bGQgYmUgZGVwZW5kZW50IG9uIGBORl9DT05OVFJBQ0tgIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCBhbmQgcHJlc3VtYWJseSB1bmRlciBhbiBgaWYgTkZfVEFCTEVTYCBibG9jay4gRG91YmxlLWNoZWNraW5nIHRoYXQgaXMgY3J1Y2lhbC4gSSdsbCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3RzIEknbSBtaXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgS2NvbmZpZyBzZXR1cCBpcyBrZXkgdG8gZW5zdXJpbmcgdGhpcyBjb25maWd1cmF0aW9uIGludGVncmF0ZXMgc21vb3RobHkgd2l0aGluIHRoZSBsYXJnZXIgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNjoxMC4xMzIzNjY3NThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjgzMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIE5GX1RBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ1NT1jb25maWcgTkZfVEFCTEVTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzE6aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3Mi1jb25maWcgTkZfVEFCTEVTX0lORVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MjU9Y29uZmlnIE5GVF9TT0NLRVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXFx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyODpcXHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0MzpcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ0LVxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Ni1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQ5PWNvbmZpZyBORlRfU1lOUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY2MDppZiBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MTAuMTg3MDU4NDY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNDE4MDAwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSB2ZXJ5IGNsZWFuIHNsYXRlIGhlcmUg4oCTIHRoZSBlbnZpcm9ubWVudCBzZWVtcyBwcmlzdGluZSwgcmVhZHkgZm9yIGFuYWx5c2lzLiBUaGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoYXQgbWVhbnMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoaXMgY2hhbmdlIHByZXNlbnRzIGEgdmlhYmxlIGZ1enppbmcgdGFyZ2V0LlxuXG5NeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb25maWd1cmF0aW9ucyBlbmFibGVkLiBcIk5GX1RBQkxFUyxcIiBcIk5GVF9TWU5QUk9YWSxcIiBcIk5FVEZJTFRFUl9BRFZBTkNFRCxcIiBcIk5GX0NPTk5UUkFDSyxcIiBhbmQgdGhlIHZhcmlvdXMgTkZfVEFCTEVTIHN1Yi1jb25maWd1cmF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2NuKApiBZZXMsIHRoaXMgY29uZmlybXMgbXkgc3VzcGljaW9uOiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBOZXRmaWx0ZXIgYW5kIG5mdGFibGVzIGludGVyYWN0aW9uLCBzcGVjaWZpY2FsbHkgU1lOUFJPWFksIGFuZCB0aGUgcHJlc2VuY2Ugb2YgYWR2YW5jZWQgZmVhdHVyZXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsbHkgY29tcGxleCBhcmVhLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIFwiRm9jdXNTeW1ib2xzLFwiIEkgc2VlIGEgdGFyZ2V0ZWQgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBpbmNsdWRlIFwibmZ0X3N5bnByb3h5X2RvX2V2YWwsXCIgXCJuZnRfc3lucHJveHlfZXZhbCxcIiBhbmQgdmFyaWF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2Ni4gVGhpcyBpcyBrZXkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdGhlIGNvcmUgb2YgdGhlIFNZTlBST1hZIGV2YWx1YXRpb24gcHJvY2VzcyB3aXRoaW4gbmZ0YWJsZXMuXG5cblRoZSByZWFzb25pbmcgc2VjdGlvbiBpcyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gVGhlIHBhdGNoIGlzIHJlcGxhY2luZyBgbmZfaXBfY2hlY2tzdW0oKWAgd2l0aCB0aGUgZmFtaWx5LWF3YXJlIGBuZl9jaGVja3N1bSgpYCBmdW5jdGlvbiAqd2l0aGluKiBgbmZ0X3N5bnByb3h5X2RvX2V2YWwoKWAuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZS4gSXQncyBkaXJlY3RseSBpbXBhY3RpbmcgVENQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiAqc3BlY2lmaWNhbGx5KiB3aXRoaW4gdGhlIE5ldGZpbHRlciBuZnRhYmxlcyBTWU5QUk9YWSBsb2dpYy4gQW5kIGl0J3MgZG9pbmcgc28gZm9yIGJvdGggSVB2NCBhbmQgSVB2NiB0cmFmZmljLiBHaXZlbiB0aGF0IFNZTlBST1hZIGlzIGRlc2lnbmVkIHRvIG1pdGlnYXRlIFNZTiBmbG9vZHMsIGFuZCB0aGF0IG5mdGFibGVzIGlzIHdpZGVseSB1c2VkLCB0aGlzIGlzIGEgdmVyeSByZWxldmFudCwgcG90ZW50aWFsbHkgaGlnaC1pbXBhY3QgbW9kaWZpY2F0aW9uLiBJbXBvcnRhbnRseSwgdGhlIHJlYXNvbmluZyBjbGFyaWZpZXMgdGhhdCB0aGlzIGNoYW5nZSBpcyB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGggc3RhbmRhcmQgbmV0d29yayB0b29scy5cblxuQmFzZWQgb24gYWxsIHRoaXMsIEknbSByZWFkeSB0byBtYWtlIHRoZSBmaW5hbCBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuIFRoZSBhbmFseXNpcyBpcyBjb21wbGV0ZSwgYW5kIHRoZSBpbmZvcm1hdGlvbiBpcyByZWFkeSBmb3IgY29uc2lkZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNjgsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjE0LjMyODg2MjE0NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NDczMDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9TWU5QUk9YWVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjZcIixcbiAgICBcIk5GX1RBQkxFU19JUFY0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3N5bnByb3h5X2RvX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsXCIsXG4gICAgXCJuZnRfc3lucHJveHlfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y2XCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFRDUCBjaGVja3N1bSB2ZXJpZmljYXRpb24gaW4gbmZ0YWJsZXMgU1lOUFJPWFkgZXhwcmVzc2lvbiBldmFsdWF0aW9uIChuZnRfc3lucHJveHlfZG9fZXZhbCkgYnkgc3dpdGNoaW5nIGZyb20gbmZfaXBfY2hlY2tzdW0gdG8gZmFtaWx5LWF3YXJlIG5mX2NoZWNrc3VtLCBpbXBhY3RpbmcgSVB2NCBhbmQgSVB2NiB0cmFmZmljIHByb2Nlc3NpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBuZXRsaW5rIGFuZCBuZXR3b3JrIHBhY2tldCBpbmplY3Rpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZUX1NZTlBST1hZXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU19JTkVUXCIsXG4gICAgXCJORl9UQUJMRVNfSVBWNlwiLFxuICAgIFwiTkZfVEFCTEVTX0lQVjRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfc3lucHJveHlfZG9fZXZhbFwiLFxuICAgIFwibmZ0X3N5bnByb3h5X2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9vYmpfZXZhbFwiLFxuICAgIFwibmZ0X3N5bnByb3h5X2V2YWxfdjZcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgVENQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBpbiBuZnRhYmxlcyBTWU5QUk9YWSBleHByZXNzaW9uIGV2YWx1YXRpb24gKG5mdF9zeW5wcm94eV9kb19ldmFsKSBieSBzd2l0Y2hpbmcgZnJvbSBuZl9pcF9jaGVja3N1bSB0byBmYW1pbHktYXdhcmUgbmZfY2hlY2tzdW0sIGltcGFjdGluZyBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgcHJvY2Vzc2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIG5ldGxpbmsgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjE0LjQxNTM0MzkwNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MDk5MTUwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNjoxNC40MTU5MjUyMzZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTYwOTMyNzY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgY2FsbCB0byBuZl9pcF9jaGVja3N1bSgpIHdpdGggbmZfY2hlY2tzdW0oKSBpbiBuZnRfc3lucHJveHlfZG9fZXZhbCgpIHNvIHRoYXQgdGhlIHByb3RvY29sIGZhbWlseSAoSVB2NCBvciBJUHY2KSBpcyBjb3JyZWN0bHkgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIFRDUCBjaGVja3N1bS5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBwYXRocywgaW5mby1sZWFrIHZlY3RvcnMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcGFja2V0IG1lbW9yeSBhY2Nlc3MgYm91bmRhcmllcyBvciBpbnZhbGlkIHNrYiBvcGVyYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODRkMmIwMzgxODk0NDJhODliMTcwMzI1NzA4NGIwZmVhYzY1YTgxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDIwOjM1OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbmluZGV4IDllZDI4OGM5ZDE2ODguLjU1NGE5NmEwMDBmNDAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXG5AQCAtMTE4LDcgKzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChuZl9pcF9jaGVja3N1bShza2IsIG5mdF9ob29rKHBrdCksIHRob2ZmLCBJUFBST1RPX1RDUCkpIHtcbitcdGlmIChuZl9jaGVja3N1bShza2IsIG5mdF9ob29rKHBrdCksIHRob2ZmLCBJUFBST1RPX1RDUCxcbitcdFx0XHRuZnRfcGYocGt0KSkpIHtcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMDozNjoxNC40MTU5Mjg4MDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAzNzc3Mzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6XG5cbioqRGl2aW5nIGludG8gbmZ0X3N5bnByb3h5LmMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gVGhpcyBwYXRjaCBpbiBgbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY2AgbmVlZHMgYSBjbG9zZXIgbG9vay4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgYW5kIHRoZWlyIGNvbnRleHQuIExldCdzIHNlZS4uLiBJJ2xsIHB1bGwgdXAgdGhlIGZpbGUsIHByb2JhYmx5IHVzaW5nIGByZWFkLWZpbGVgIHRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgb3IgaWYgSSB3YW50IHNvbWV0aGluZyBtb3JlIGRpcmVjdCwgSSBjYW4gdXNlIGBncmVwcGVyYCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY3VycmVudCBzb3VyY2UgY29kZS4gVGhlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBleGFjdGx5IHdoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGFuZCBob3cgdGhvc2UgbW9kaWZpY2F0aW9ucyBwbGF5IHdpdGhpbiB0aGUgZXhpc3RpbmcgY29kZS4gTXkgbWFpbiBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjE4LjQ1MzcwNTIwNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbiAxMDE6XFx0XFx0XFx0fVxcbiAxMDI6XFx0XFx0fVxcbiAxMDM6XFx0fVxcbiAxMDQ6XFx0I2VuZGlmIC8qIENPTkZJR19ORl9UQUJMRVNfSVBWNiovXFxuIDEwNTpcXHRcXG4gMTA2OlxcdHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9kb19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiAxMDg6XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbiAxMDk6XFx0e1xcbiAxMTA6XFx0XFx0c3RydWN0IHN5bnByb3h5X29wdGlvbnMgb3B0cyA9IHt9O1xcbiAxMTE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbiAxMTI6XFx0XFx0aW50IHRob2ZmID0gbmZ0X3Rob2ZmKHBrdCk7XFxuIDExMzpcXHRcXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3A7XFxuIDExNDpcXHRcXHRzdHJ1Y3QgdGNwaGRyIF90Y3BoO1xcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRpZiAocGt0LVxcdTAwM2V0cHJvdCAhPSBJUFBST1RPX1RDUCkge1xcbiAxMTc6XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xcbiAxMTg6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMTk6XFx0XFx0fVxcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRpZiAobmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsXFxuIDEyMjpcXHRcXHRcXHRcXHRuZnRfcGYocGt0KSkpIHtcXG4gMTIzOlxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuIDEyNDpcXHRcXHRcXHRyZXR1cm47XFxuIDEyNTpcXHRcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHRjcCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHRob2ZmLFxcbiAxMjg6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgdGNwaGRyKSxcXG4gMTI5OlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2X3RjcGgpO1xcbiAxMzA6XFx0XFx0aWYgKCF0Y3ApIHtcXG4gMTMxOlxcdFxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuIDEzMjpcXHRcXHRcXHRyZXR1cm47XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmICghc3lucHJveHlfcGFyc2Vfb3B0aW9ucyhza2IsIHRob2ZmLCB0Y3AsIFxcdTAwMjZvcHRzKSkge1xcbiAxMzY6XFx0XFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG4gMTM3OlxcdFxcdFxcdHJldHVybjtcXG4gMTM4OlxcdFxcdH1cXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuIDE0MTpcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gMTQyOlxcdFxcdFxcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcXHUwMDI2X3RjcGgsIFxcdTAwMjZvcHRzKTtcXG4gMTQzOlxcdFxcdFxcdHJldHVybjtcXG4gMTQ0OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfSVBWNilcXG4gMTQ1OlxcdFxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuIDE0NjpcXHRcXHRcXHRuZnRfc3lucHJveHlfZXZhbF92Nihwcml2LCByZWdzLCBwa3QsIHRjcCwgXFx1MDAyNl90Y3BoLCBcXHUwMDI2b3B0cyk7XFxuIDE0NzpcXHRcXHRcXHRyZXR1cm47XFxuIDE0ODpcXHQjZW5kaWZcXG4gMTQ5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MTguNDUzNzc4MjE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTI1ODMyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaGVja3N1bSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGZyb20gYG5mX2lwX2NoZWNrc3VtYCB0byBgbmZfY2hlY2tzdW1gIGluIHRoZSBjb250ZXh0IG9mIFRDUCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIGl04oCZcyByZXBsYWNpbmcgYG5mX2lwX2NoZWNrc3VtKHNrYiwgbmZ0X2hvb2socGt0KSwgdGhvZmYsIElQUFJPVE9fVENQKWAgd2l0aCBgbmZfY2hlY2tzdW0oc2tiLCBuZnRfaG9vayhwa3QpLCB0aG9mZiwgSVBQUk9UT19UQ1AsIG5mdF9wZihwa3QpKWAuIFRoaXMgY2xlYXJseSBtZWFucyB0aGVyZSdzIGEgZGlmZmVyZW5jZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZGlmZmVyZW5jZS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGVhY2ggZnVuY3Rpb246IGBuZl9pcF9jaGVja3N1bWAgdmVyc3VzIGBuZl9jaGVja3N1bWAuIFdoYXQncyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZT8gV2hhdCdzIHRoZSBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsIGltcGFjdD8gSXMgaXQgYSByZWZhY3RvcmluZywgYSBidWcgZml4LCBvciBzb21ldGhpbmcgbW9yZT8gSXMgdGhpcyBwb3RlbnRpYWxseSBhIGdlbmVyYWxpemF0aW9uIG9yIG9wdGltaXphdGlvbj8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBib3RoIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlaXIgdXNhZ2UsIGRlcGVuZGVuY2llcywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgcGljdHVyZSBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgcmF0aW9uYWxlIGZvciB0aGUgY2hhbmdlIGFuZCBoZWxwIG1lIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MjAuNzA2MzY0NTQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEwMzI3NjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2lwX2NoZWNrc3VtfG5mX2NoZWNrc3VtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjIwLjg3NzQwNjQ1N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTIxOTc5NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBuYXJyYXRpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEZsb3cgQ2hlY2tzdW1zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogSSBuZWVkIGEgY29uY3JldGUgZGVmaW5pdGlvbi4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gXCJuZl9cIiBpcyB0aGUgbGlrZWx5IHByZWZpeC4gVGhpcyBpbXBsaWVzIHdlJ3JlIGluIHRoZSByZWFsbSBvZiBwYWNrZXQgZmlsdGVyaW5nIG9yIG1hbmlwdWxhdGlvbiBhdCB0aGUgbmV0d29yayBsZXZlbC4gVGhlIFwiY2hlY2tzdW1cIiBwYXJ0IGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eS4gVGhlIHF1ZXN0aW9uIG5vdyBpczogd2hhdCdzIHRoZSBzcGVjaWZpYyBkZWZpbml0aW9uIG9mIGBuZl9pcF9jaGVja3N1bWAgYW5kLCBtb3JlIGJyb2FkbHksIGBuZl9jaGVja3N1bWA/IEkgbmVlZCB0byB1bmRlcnN0YW5kICpwcmVjaXNlbHkqIGhvdyB0aGVzZSB0ZXJtcyBhcmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGZ1bmN0aW9ucywgc3RydWN0dXJlcywgb3IgcGVyaGFwcyBtYWNybyBkZWZpbml0aW9ucz8gQXJlIHRoZXNlIGNoZWNrc3VtcyBjYWxjdWxhdGVkIG9yIHZlcmlmaWVkLCBhbmQgYXQgd2hhdCBwb2ludHMgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lPyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2Ugb3IgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byBwaW5wb2ludCB0aGUgZXhhY3QgbWVhbmluZyBhbmQgdXNhZ2UuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSB3aWxsIGJlIHBhcnQgb2YgdGhlIG1lY2hhbmlzbSB1c2VkIGZvciB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayB0byBoYW5kbGUgSVAgaGVhZGVyIGNoZWNrc3VtcyBmb3IgcGFja2V0cyB0aGF0IGFyZSBiZWluZyBmaWx0ZXJlZCwgbW9kaWZpZWQsIG9yIGZvcndhcmRlZC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBmb3IgYW55IGluLWRlcHRoIG5ldHdvcmsgYW5hbHlzaXMgb3Igc2VjdXJpdHkgd29yayBJJ20gaW52b2x2ZWQgaW4sIHNvIEknbGwgd2FudCB0byBnZXQgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjIzLjc5OTM4OTI5NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2Mjc3MDUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9pcF9jaGVja3N1bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0Lmg9MjE9c3RydWN0IG5mX3F1ZXVlX2VudHJ5O1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oLTIzLSNpZmRlZiBDT05GSUdfSU5FVFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaDoyNDpfX3N1bTE2IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaC0yNS1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0Lmg9MjY9aW50IG5mX2lwX3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaC0yOC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaDoyOTpzdGF0aWMgaW5saW5lIF9fc3VtMTYgbmZfaXBfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oLTMwLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TWU5QUk9YWS5jPTEzPXN5bnByb3h5X3RnNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1NZTlBST1hZLmMtMjAtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TWU5QUk9YWS5jOjIxOlxcdGlmIChuZl9pcF9jaGVja3N1bShza2IsIHh0X2hvb2tudW0ocGFyKSwgcGFyLVxcdTAwM2V0aG9mZiwgSVBQUk9UT19UQ1ApKVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfU1lOUFJPWFkuYy0yMi1cXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jPTEwNT1zdHJ1Y3Qgc2tfYnVmZiAqbmZfcmVqZWN0X3NrYl92NF91bnJlYWNoKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTE0Mi1cXHQgICAgbmZfcmVqZWN0X3ZlcmlmeV9jc3VtKG9sZHNrYiwgZGF0YW9mZiwgcHJvdG8pIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM6MTQzOlxcdCAgICBuZl9pcF9jaGVja3N1bShvbGRza2IsIGhvb2ssIGlwX2hkcmxlbihvbGRza2IpLCBwcm90bykpXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMTQ0LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MTc1PW5mX3JlamVjdF9pcF90Y3BoZHJfZ2V0KHN0cnVjdCBza19idWZmICpvbGRza2IsXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0xOTYtXFx0LyogQ2hlY2sgY2hlY2tzdW0gKi9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzoxOTc6XFx0aWYgKG5mX2lwX2NoZWNrc3VtKG9sZHNrYiwgaG9vaywgaXBfaGRybGVuKG9sZHNrYiksIElQUFJPVE9fVENQKSlcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0xOTgtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0zNDg9dm9pZCBuZl9zZW5kX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IGNvZGUsIGludCBob29rKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzY1LVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjM2NjpcXHRpZiAobmZfaXBfY2hlY2tzdW0oc2tiX2luLCBob29rLCBkYXRhb2ZmLCBwcm90bykgPT0gMClcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zNjctXFx0XFx0aWNtcF9zZW5kKHNrYl9pbiwgSUNNUF9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmM9MTE0PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2FkZF9oZWxwZXIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfb3ZzLmMtMTE4LSAqIGZvciBoaWdoZXItbGF5ZXIgcHJvY2Vzc2luZyB0aGF0IGFzc3VtZXMgc2tiLVxcdTAwM2VsZW4gZXhjbHVkZXMgcGFkZGluZ1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jOjExOTogKiAoc3VjaCBhcyBuZl9pcF9jaGVja3N1bSkuIFRoZSBjYWxsZXIgbmVlZHMgdG8gcHVsbCB0aGUgc2tiIHRvIHRoZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX292cy5jLTEyMC0gKiBuZXR3b3JrIGhlYWRlciwgYW5kIGVuc3VyZSBpcF9oZHIvaXB2Nl9oZHIgcG9pbnRzIHRvIHZhbGlkIGRhdGEuXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmM9MjA0PWludCBuZl9jb25udHJhY2tfaWNtcHY0X2Vycm9yKHN0cnVjdCBuZl9jb25uICp0bXBsLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jLTIyMS1cXHQgICAgc3RhdGUtXFx1MDAzZWhvb2sgPT0gTkZfSU5FVF9QUkVfUk9VVElORyBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYzoyMjI6XFx0ICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgc3RhdGUtXFx1MDAzZWhvb2ssIGRhdGFvZmYsIElQUFJPVE9fSUNNUCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMtMjIzLVxcdFxcdGljbXBfZXJyb3JfbG9nKHNrYiwgc3RhdGUsIFxcXCJiYWQgaHcgaWNtcCBjaGVja3N1bVxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYz00OTc9aW50IG5mX25hdF9pY21wX3JlcGx5X3RyYW5zbGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jLTUxNS1cXHRcXHRyZXR1cm4gMDtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjUxNjpcXHRpZiAobmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBoZHJsZW4sIElQUFJPVE9fSUNNUCkpXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy01MTctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtOS0jaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM6MTA6X19zdW0xNiBuZl9pcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vayxcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTEtXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1OCBwcm90b2NvbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy0zOS19XFxubmV0L25ldGZpbHRlci91dGlscy5jOjQwOkVYUE9SVF9TWU1CT0wobmZfaXBfY2hlY2tzdW0pO1xcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy00MS0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtNDItXFxubmV0L25ldGZpbHRlci91dGlscy5jOjQzOnN0YXRpYyBfX3N1bTE2IG5mX2lwX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxubmV0L25ldGZpbHRlci91dGlscy5jLTQ0LVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jLTUyLVxcdFxcdGlmIChsZW4gPT0gc2tiLVxcdTAwM2VsZW4gLSBkYXRhb2ZmKVxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzo1MzpcXHRcXHRcXHRyZXR1cm4gbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7XFxubmV0L25ldGZpbHRlci91dGlscy5jLTU0LVxcdFxcdGZhbGx0aHJvdWdoO1xcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jPTEyMz1fX3N1bTE2IG5mX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jLTEzMC1cXHRjYXNlIEFGX0lORVQ6XFxubmV0L25ldGZpbHRlci91dGlscy5jOjEzMTpcXHRcXHRjc3VtID0gbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7XFxubmV0L25ldGZpbHRlci91dGlscy5jLTEzMi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYz0xNDI9X19zdW0xNiBuZl9jaGVja3N1bV9wYXJ0aWFsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLFxcbi0tXFxubmV0L25ldGZpbHRlci91dGlscy5jLTE0OS1cXHRjYXNlIEFGX0lORVQ6XFxubmV0L25ldGZpbHRlci91dGlscy5jOjE1MDpcXHRcXHRjc3VtID0gbmZfaXBfY2hlY2tzdW1fcGFydGlhbChza2IsIGhvb2ssIGRhdGFvZmYsIGxlbixcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMTUxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHByb3RvY29sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MjUuNzYyMTY3MDk3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzI2NzY1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG5ldC9uZXRmaWx0ZXIvdXRpbHMuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIGBuZXQvbmV0ZmlsdGVyL3V0aWxzLmNgIHJpZ2h0IG5vdy4gSSBoYXZlIGEgaHVuY2ggYWJvdXQgYSBwb3RlbnRpYWwgaXNzdWUsIGFuZCBJIGJlbGlldmUgdGhlIGFuc3dlciBsaWVzIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMTIzLiBUaGF0IHBhcnRpY3VsYXIgcmVnaW9uIG9mdGVuIGRlYWxzIHdpdGggWyAqaW5zZXJ0IG15IHNwZWNpZmljIGFyZWEgb2YgZXhwZXJ0aXNlIHJlbGF0ZWQgdG8gbmV0ZmlsdGVyIGhlcmUgLSBlLmcuLCBjb25uZWN0aW9uIHRyYWNraW5nLCBOQVQsIGNvbm50cmFjayBtYW5pcHVsYXRpb24sIGV0Yy4qIF0sIGFuZCBJJ20gaG9waW5nIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBjb2RlIGZvciB0aGUgcHJvYmxlbS4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBkb25lIHRoZXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgaXNzdWUgSSdtIGludmVzdGlnYXRpbmcuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgdG8gYSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIwOjM2OjI3LjgzNDg0NzQ3MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci91dGlscy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgcHJvdG9jb2wsXFxuIDExNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY3N1bV9zdWIoMCwgaHN1bSkpKTtcXG4gMTE3OlxcdFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcXG4gMTE4OlxcdFxcdFxcdHJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZV9oZWFkKHNrYiwgZGF0YW9mZiArIGxlbik7XFxuIDExOTpcXHRcXHR9XFxuIDEyMDpcXHRcXHRyZXR1cm4gY3N1bTtcXG4gMTIxOlxcdH07XFxuIDEyMjpcXHRcXG4gMTIzOlxcdF9fc3VtMTYgbmZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxuIDEyNDpcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHU4IHByb3RvY29sLFxcbiAxMjU6XFx0XFx0XFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4gMTI2OlxcdHtcXG4gMTI3OlxcdFxcdF9fc3VtMTYgY3N1bSA9IDA7XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdHN3aXRjaCAoZmFtaWx5KSB7XFxuIDEzMDpcXHRcXHRjYXNlIEFGX0lORVQ6XFxuIDEzMTpcXHRcXHRcXHRjc3VtID0gbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rLCBkYXRhb2ZmLCBwcm90b2NvbCk7XFxuIDEzMjpcXHRcXHRcXHRicmVhaztcXG4gMTMzOlxcdFxcdGNhc2UgQUZfSU5FVDY6XFxuIDEzNDpcXHRcXHRcXHRjc3VtID0gbmZfaXA2X2NoZWNrc3VtKHNrYiwgaG9vaywgZGF0YW9mZiwgcHJvdG9jb2wpO1xcbiAxMzU6XFx0XFx0XFx0YnJlYWs7XFxuIDEzNjpcXHRcXHR9XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdHJldHVybiBjc3VtO1xcbiAxMzk6XFx0fVxcbiAxNDA6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfY2hlY2tzdW0pO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRfX3N1bTE2IG5mX2NoZWNrc3VtX3BhcnRpYWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssXFxuIDE0MzpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBsZW4sXFxuIDE0NDpcXHRcXHRcXHRcXHQgICAgdTggcHJvdG9jb2wsIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4gMTQ1OlxcdHtcXG4gMTQ2OlxcdFxcdF9fc3VtMTYgY3N1bSA9IDA7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdHN3aXRjaCAoZmFtaWx5KSB7XFxuIDE0OTpcXHRcXHRjYXNlIEFGX0lORVQ6XFxuIDE1MDpcXHRcXHRcXHRjc3VtID0gbmZfaXBfY2hlY2tzdW1fcGFydGlhbChza2IsIGhvb2ssIGRhdGFvZmYsIGxlbixcXG4gMTUxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHByb3RvY29sKTtcXG4gMTUyOlxcdFxcdFxcdGJyZWFrO1xcbiAxNTM6XFx0XFx0Y2FzZSBBRl9JTkVUNjpcXG4gMTU0OlxcdFxcdFxcdGNzdW0gPSBuZl9pcDZfY2hlY2tzdW1fcGFydGlhbChza2IsIGhvb2ssIGRhdGFvZmYsIGxlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MjcuODM0OTc5NTIxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxOTAyNTAyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZnRfc3lucHJveHlfZG9fZXZhbGAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYG5mdF9zeW5wcm94eV9kb19ldmFsYCB3YXMgcHJldmlvdXNseSBjYWxsaW5nIGBuZl9pcF9jaGVja3N1bSgpYCB1bmNvbmRpdGlvbmFsbHkuIFRoYXQncyBhIHByb2JsZW0sIGJlY2F1c2Ugd2hpbGUgYG5mdF9zeW5wcm94eV9kb19ldmFsYCAqaGFuZGxlcyogYm90aCBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgKEkgY2FuIHNlZSB0aGF0IGZyb20gdGhlIHByb3RvY29sIHN3aXRjaCBhbmQgdGhlIEV0aGVybmV0IGhlYWRlciBjaGVja3MpLCBgbmZfaXBfY2hlY2tzdW0oKWAgYXNzdW1lcyBJUHY0LiBTbywgd2l0aCBJUHY2LCBpdCB3b3VsZCBlaXRoZXIgZmFpbCBvdXRyaWdodCBvciBnaXZlIGEgYmFkIGNoZWNrc3VtIGNhbGN1bGF0aW9uLlxuXG5UaGUgZml4LCB3aGljaCBpcyBhIGdvb2Qgb25lLCByZXBsYWNlcyB0aGUgaGFyZGNvZGVkIGBuZl9pcF9jaGVja3N1bSgpYCBjYWxsIHdpdGggYSBtb3JlIGdlbmVyaWMgYG5mX2NoZWNrc3VtKClgLiBUaGlzIGNvcnJlY3RseSBjYWxscyBgbmZfaXBfY2hlY2tzdW0oKWAgZm9yIElQdjQgYW5kIGBuZl9pcDZfY2hlY2tzdW0oKWAgZm9yIElQdjYsIGRlcGVuZGluZyBvbiB0aGUgcGFja2V0J3MgYWRkcmVzcyBmYW1pbHksIGRldGVybWluZWQgYnkgYG5mdF9wZihwa3QpYC4gTXVjaCBiZXR0ZXIuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiDigJMgZG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXM/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqTm8gdXNlci1zcGFjZSBjb3B5OioqIEdvb2QuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aGF0IHdheS5cbjIuICAqKk5vIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHM6KiogIEV4Y2VsbGVudC4gIFRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbm9yIGRvZXMgaXQgYWNjZXNzIGFueS4gVGhhdCdzIGEgYmlnIHJlbGllZi5cbjMuICAqKk5vIGJ1ZmZlci9zdHJ1Y3QgY2hhbmdlczoqKiBXZSdyZSBub3QgY2hhbmdpbmcgYW55IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIHNvIHdlIGNhbiBpZ25vcmUgdGhhdCBwYXJ0LlxuNC4gICoqS01TQU4gaW1wbGljYXRpb25zOioqIE9rYXksIGhlcmUncyB3aGVyZSB3ZSByZWFsbHkgbmVlZCB0byBiZSBjYXJlZnVsLiBgbmZfY2hlY2tzdW1gIHVsdGltYXRlbHkgY2FsbHMgYG5mX2lwX2NoZWNrc3VtYCBvciBgbmZfaXA2X2NoZWNrc3VtYCwgYW5kIHRob3NlIGZ1bmN0aW9ucyBhcmUgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgZGF0YSAqaW5zaWRlKiB0aGUgYHNrYmAuIElmIHRoZXJlIGFyZSBhbnkgb3V0LW9mLWJvdW5kcyByZWFkcywgS0FTQU4gKG9yIHRoZSByZWxldmFudCBza2IgaGVscGVycykgd2lsbCBjYXRjaCBpdC4gVGhlIGNoYW5nZSBpc24ndCAqaW50cm9kdWNpbmcqIGFueSBuZXcgbWVtb3J5IHJlZ2lvbnMsIGFuZCB3ZSBhcmUgbm90IGxlYWtpbmcgYW55dGhpbmcgdG8gdXNlciBzcGFjZS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHdlIGFyZSBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnkgaXNzdWVzLCBpdCdzIHNhZmUgdG8gc2F5IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBUaGlzIGlzbid0IGEgc2l0dWF0aW9uIHdoZXJlIGEgZGVkaWNhdGVkIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIHJ1biBpcyB3YXJyYW50ZWQuIEtBU0FOIHdpbGwgaGFuZGxlIGl0LlxuXG5Ob3csIHRvIGRvY3VtZW50IHRoaXMgcmVhc29uaW5nIHByb3Blcmx5LCBsZXQncyBjbGVhcmx5IGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTjpcblxuKiAgICoqS0FTQU46KiogVGhpcyBwYXRjaCBmaXhlcyBhIHByb3RvY29sIGZhbWlseSBoYW5kbGluZyBpc3N1ZSBmb3IgVENQIGNoZWNrc3VtIHZlcmlmaWNhdGlvbi4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nIGNvcnJlY3RseSB3aXRoIHRoZSBza2IncyBwYWNrZXQgcGFyc2luZywgYW5kIGFueSBwYWNrZXQgYm91bmRhcmllcyBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgS0FTQU4uXG4qICAgKipLTVNBTjoqKiAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29weS10by11c2VyIG9wZXJhdGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy9maWVsZHMgYXJlIGludHJvZHVjZWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXG5cblJpZ2h0LCB0aGF0IHNlZW1zIGNvbXByZWhlbnNpdmUuIE5vdywgSSBzaG91bGQgYmUgYWJsZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDQsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjA6MzY6MzQuMDI1MjMyOTQxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhIGhhcmRjb2RlZCBjYWxsIHRvIG5mX2lwX2NoZWNrc3VtKCkgd2l0aCBuZl9jaGVja3N1bSgpIGluIG5mdF9zeW5wcm94eV9kb19ldmFsKCkgc28gdGhhdCB0aGUgcHJvdG9jb2wgZmFtaWx5IChJUHY0IG9yIElQdjYpIGlzIGNvcnJlY3RseSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyB0aGUgVENQIGNoZWNrc3VtLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIHBhdGhzLCBpbmZvLWxlYWsgdmVjdG9ycywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwYWNrZXQgbWVtb3J5IGFjY2VzcyBib3VuZGFyaWVzIG9yIGludmFsaWQgc2tiIG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBhIGhhcmRjb2RlZCBjYWxsIHRvIG5mX2lwX2NoZWNrc3VtKCkgd2l0aCBuZl9jaGVja3N1bSgpIGluIG5mdF9zeW5wcm94eV9kb19ldmFsKCkgc28gdGhhdCB0aGUgcHJvdG9jb2wgZmFtaWx5IChJUHY0IG9yIElQdjYpIGlzIGNvcnJlY3RseSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyB0aGUgVENQIGNoZWNrc3VtLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIHBhdGhzLCBpbmZvLWxlYWsgdmVjdG9ycywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwYWNrZXQgbWVtb3J5IGFjY2VzcyBib3VuZGFyaWVzIG9yIGludmFsaWQgc2tiIG9wZXJhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow9stwp[1] Phase: Succeeded StartedAt: 2026-09-10 20:36:45 +0000 UTC FinishedAt: 2026-09-10 20:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 20:36:45 +0000 UTC FinishedAt: 2026-09-10 20:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2] Phase: Succeeded StartedAt: 2026-09-10 20:36:45 +0000 UTC FinishedAt: 2026-09-11 00:18:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 20:36:45 +0000 UTC FinishedAt: 2026-09-11 00:18:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 20:36:45 +0000 UTC FinishedAt: 2026-09-10 20:36:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 20:36:45 +0000 UTC FinishedAt: 2026-09-10 20:36:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow9stwp/series-workflow9stwp-convert-artifact-1532085036/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 20:36:55 +0000 UTC FinishedAt: 2026-09-10 20:54:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 20:36:55 +0000 UTC FinishedAt: 2026-09-10 20:54:38 +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:*9d34bdf8-ec5c-42ed-acc1-9caa013b73a6,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-workflow9stwp/series-workflow9stwp-convert-artifact-1532085036/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": "e03fb0b4-b444-4cd8-b13b-1011b53bba1b", "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-workflow9stwp/series-workflow9stwp-build-action-622119258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 20:36:55 +0000 UTC FinishedAt: 2026-09-10 20:54:28 +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:*9d34bdf8-ec5c-42ed-acc1-9caa013b73a6,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-workflow9stwp/series-workflow9stwp-convert-artifact-1532085036/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": "e03fb0b4-b444-4cd8-b13b-1011b53bba1b", "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-workflow9stwp/series-workflow9stwp-build-action-622119258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 20:54:38 +0000 UTC FinishedAt: 2026-09-10 20:54:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 20:54:38 +0000 UTC FinishedAt: 2026-09-10 20:54:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 20:54:38 +0000 UTC FinishedAt: 2026-09-10 20:54:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 20:54:38 +0000 UTC FinishedAt: 2026-09-10 20:54:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow9stwp/series-workflow9stwp-convert-artifact-218250731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 20:54:48 +0000 UTC FinishedAt: 2026-09-10 20:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 20:54:48 +0000 UTC FinishedAt: 2026-09-10 20:56:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e03fb0b4-b444-4cd8-b13b-1011b53bba1b,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-workflow9stwp/series-workflow9stwp-build-action-622119258/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-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 20:56:46 +0000 UTC FinishedAt: 2026-09-10 20:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 20:56:46 +0000 UTC FinishedAt: 2026-09-10 20:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 20:56:46 +0000 UTC FinishedAt: 2026-09-10 21:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 20:56:46 +0000 UTC FinishedAt: 2026-09-10 21:14:25 +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:*9d34bdf8-ec5c-42ed-acc1-9caa013b73a6,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-workflow9stwp/series-workflow9stwp-convert-artifact-218250731/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": "5eb87428-571b-44bf-aaff-d3e10a59b665", "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-workflow9stwp/series-workflow9stwp-build-action-1798798095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 20:56:46 +0000 UTC FinishedAt: 2026-09-10 21:14:15 +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:*9d34bdf8-ec5c-42ed-acc1-9caa013b73a6,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-workflow9stwp/series-workflow9stwp-convert-artifact-218250731/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": "5eb87428-571b-44bf-aaff-d3e10a59b665", "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-workflow9stwp/series-workflow9stwp-build-action-1798798095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 21:14:25 +0000 UTC FinishedAt: 2026-09-10 21:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 21:14:25 +0000 UTC FinishedAt: 2026-09-10 21:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 21:14:25 +0000 UTC FinishedAt: 2026-09-10 21:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 21:14:25 +0000 UTC FinishedAt: 2026-09-10 21:16:10 +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:*5eb87428-571b-44bf-aaff-d3e10a59b665,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-workflow9stwp/series-workflow9stwp-build-action-1798798095/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-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 21:16:20 +0000 UTC FinishedAt: 2026-09-11 00:18:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 21:16:20 +0000 UTC FinishedAt: 2026-09-11 00:18:17 +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":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"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:*e03fb0b4-b444-4cd8-b13b-1011b53bba1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5eb87428-571b-44bf-aaff-d3e10a59b665,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-workflow9stwp/series-workflow9stwp-build-action-622119258/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-workflow9stwp/series-workflow9stwp-build-action-1798798095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 21:16:20 +0000 UTC FinishedAt: 2026-09-10 21:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 21:16:20 +0000 UTC FinishedAt: 2026-09-10 21:16:27 +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":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"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-workflow9stwp/series-workflow9stwp-convert-artifact-3830262276/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 21:16:20 +0000 UTC FinishedAt: 2026-09-10 21:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 21:16:20 +0000 UTC FinishedAt: 2026-09-10 21:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 21:16:21 +0000 UTC FinishedAt: 2026-09-10 21:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 21:16:31 +0000 UTC FinishedAt: 2026-09-11 00:18:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_synproxy_do_eval","nft_synproxy_eval","nft_synproxy_obj_eval","nft_synproxy_eval_v6","nft_synproxy_eval_v4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NFT_SYNPROXY","NF_CONNTRACK","NF_TABLES_INET","NF_TABLES_IPV6","NF_TABLES_IPV4"],"series_id":"409df54d-aefb-4c55-9712-bedf6288503e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 21:16:31 +0000 UTC FinishedAt: 2026-09-11 00:18:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e03fb0b4-b444-4cd8-b13b-1011b53bba1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5eb87428-571b-44bf-aaff-d3e10a59b665,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-workflow9stwp/series-workflow9stwp-build-action-622119258/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-workflow9stwp/series-workflow9stwp-build-action-1798798095/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-workflow9stwp/series-workflow9stwp-convert-artifact-3830262276/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,}