Name: series-workflow8zm8m Phase: Succeeded StartedAt: 2026-08-15 15:21:22 +0000 UTC FinishedAt: 2026-08-15 19:56:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[0] Phase: Succeeded StartedAt: 2026-08-15 15:21:22 +0000 UTC FinishedAt: 2026-08-15 16:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[0].run-triage Phase: Succeeded StartedAt: 2026-08-15 15:21:22 +0000 UTC FinishedAt: 2026-08-15 16:15:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_CONNCOUNT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_CONNCOUNT" ], "series_id": "1acb5456-6723-4e97-8c69-ead32eee595e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_init" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgKHJlZmVyZW5jZSBjb3VudCBsZWFrKSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgb3ZzX2N0X2luaXRgLiBJZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCBpdCBub3cgY29ycmVjdGx5IGNhbGxzIGBuZl9jb25ubGFiZWxzX3B1dGAgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGFjcXVpcmVkIGJ5IGBuZl9jb25ubGFiZWxzX2dldGAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3B5aW5nLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSB3b3VsZCBiZSByZWZlcmVuY2UgY291bnRpbmcgYnVncyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiBhbmQgYmV0dGVyIGhhbmRsZWQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLTUVNTEVBSyBvciBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIG9wZW52c3dpdGNoIGNvbm50cmFjayBpbml0aWFsaXphdGlvbiAoYG92c19jdF9pbml0YCkgd2hlbiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChvcGVudnN3aXRjaCBuZXRucyBpbml0aWFsaXphdGlvbikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZWNjOGY3ODY3MTY1MmY3MzE3MWMwZTQ3YWNjYmIzZDE1Yjg4NGRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTY6MDg6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5pbmRleCA5NTY5N2Q0ZTE2ZTY0Li4zOGM2ZjM0Nzc2YzI4IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbkBAIC0yMDAxLDYgJiM0MzsyMDAxLDcgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgbl9iaXRzID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscykgKiBCSVRTX1BFUl9CWVRFO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuJiM0MztcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKG5mX2Nvbm5sYWJlbHNfZ2V0KG5ldCwgbl9iaXRzIC0gMSkpIHtcbiBcdFx0b3ZzX25ldC1cdTAwM2V4dF9sYWJlbCA9IGZhbHNlO1xuQEAgLTIwMTAsMTAgJiM0MzsyMDExLDExIEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHR9XG4gXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0cmV0dXJuIG92c19jdF9saW1pdF9pbml0KG5ldCwgb3ZzX25ldCk7XG4tI2Vsc2Vcbi1cdHJldHVybiAwO1xuJiM0MztcdGVyciA9IG92c19jdF9saW1pdF9pbml0KG5ldCwgb3ZzX25ldCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgb3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcbiYjNDM7XHRcdG5mX2Nvbm5sYWJlbHNfcHV0KG5ldCk7XG4gI2VuZGlmXG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIG9wZW52c3dpdGNoIGNvbm50cmFjayBpbml0aWFsaXphdGlvbiAoYG92c19jdF9pbml0YCkgd2hlbiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChvcGVudnN3aXRjaCBuZXRucyBpbml0aWFsaXphdGlvbikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZWNjOGY3ODY3MTY1MmY3MzE3MWMwZTQ3YWNjYmIzZDE1Yjg4NGRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTY6MDg6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKaW5kZXggOTU2OTdkNGUxNmU2NC4uMzhjNmYzNDc3NmMyOCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtMjAwMSw2ICYjNDM7MjAwMSw3IEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJdW5zaWduZWQgaW50IG5fYml0cyA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMpICogQklUU19QRVJfQllURTsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7CiYjNDM7CWludCBlcnIgPSAwOwogCiAJaWYgKG5mX2Nvbm5sYWJlbHNfZ2V0KG5ldCwgbl9iaXRzIC0gMSkpIHsKIAkJb3ZzX25ldC0mZ3Q7eHRfbGFiZWwgPSBmYWxzZTsKQEAgLTIwMTAsMTAgJiM0MzsyMDExLDExIEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAJfQogCiAjaWYJSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkKLQlyZXR1cm4gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTsKLSNlbHNlCi0JcmV0dXJuIDA7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9pbml0KG5ldCwgb3ZzX25ldCk7CiYjNDM7CWlmIChlcnIgJmFtcDsmYW1wOyBvdnNfbmV0LSZndDt4dF9sYWJlbCkKJiM0MzsJCW5mX2Nvbm5sYWJlbHNfcHV0KG5ldCk7CiAjZW5kaWYKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25udHJhY2sgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBhZmZlY3RpbmcgYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIExvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhbiBlcnJvciBoYW5kbGluZyBpc3N1ZSB3aXRoaW4gYG92c19jdF9pbml0YC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIGl0JiMzOTtzIGZpeGluZyBzb21ldGhpbmcgcHJldHR5IGxvdy1sZXZlbC4gVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhhdCBpZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCB3ZSBoYXZlIGEgY29uZGl0aW9uYWwgY2FsbCB0byBgbmZfY29ubmxhYmVsc19wdXQobmV0KWAuIFRoZSBjb25kaXRpb24gZm9yIHRoYXQgY2FsbCBzZWVtcyB0byBkZXBlbmQgb24gYG92c19uZXQtJmd0O3h0X2xhYmVsYC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGhvdyBgb3ZzX2N0X2luaXRgIGZ1bmN0aW9ucyBhbmQsIGNydWNpYWxseSwgd2hlbiBpdCBnZXRzIGNhbGxlZC4gUmlnaHQsIGl0JiMzOTtzIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgc3lzdGVtLiBBbmQgaXQgaXMgY2FsbGVkIHdoZW4gZWl0aGVyIGEgbmV3IG5ldHdvcmsgbmFtZXNwYWNlIGlzIGNyZWF0ZWQsIG9yIHdoZW4gT3BlbiB2U3dpdGNoIGl0c2VsZiBpcyBpbml0aWFsaXplZC4gQnV0IG5vdywgd2hlcmUgaXMgYG92c19jdF9pbml0YCBjYWxsZWQgZnJvbT8gQWhhLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgb3ZzX2luaXRfbmV0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBOb3cgSSBuZWVkIHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiB3b3JrcywgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTM2ND1zdGF0aWMgc3RydWN0IG5mX2Nvbm5fbGFiZWxzICpvdnNfY3RfZ2V0X2Nvbm5fbGFiZWxzKHN0cnVjdCBuZl9jb25uICpjdClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMzgwLSAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjM4MTpzdGF0aWMgaW50IG92c19jdF9pbml0X2xhYmVscyhzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTM4Mi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMgKmxhYmVscyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTU3PXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDEyLVx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTAxMzpcdFx0ZXJyID0gb3ZzX2N0X2luaXRfbGFiZWxzKGN0LCBrZXksIFx1MDAyNmluZm8tXHUwMDNlbGFiZWxzLnZhbHVlLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwMTQtXHRcdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZWxhYmVscy5tYXNrKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk4Mz1zdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfY3RfbGltaXRfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTk5LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMDA6aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDAxLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9MTM9ZW51bSBvdnNfa2V5X2F0dHI7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTE1LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6MTY6aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKik7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMTctdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICopO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0zMj12b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtNDAtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6NDE6c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KSB7IHJldHVybiAwOyB9XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtNDItXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjcxOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgb3ZzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzI2LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjcyNzpcdGVyciA9IG92c19jdF9pbml0KG5ldCk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzI4LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG92c19jdF9pbml0YCBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgb3ZzX2N0X2luaXRgIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG92c19pbml0X25ldGAsIHdoaWNoLCBhcyBhIHBlci1uZXRucyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgaXMgcHJldHR5IGNyaXRpY2FsLiBBbmQgYG92c19pbml0X25ldGAgaXRzZWxmIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZhbXA7b3ZzX25ldF9vcHNgLiBNYWtlcyBzZW5zZSAtIHNldHRpbmcgdXAgdGhpbmdzIG9uIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIGJhc2lzIGlzIGEgZ29vZCBhcHByb2FjaC4KClRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgdGhpcyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYW5kIHNwZWNpZmljYWxseSB0aGlzIGBvdnNfY3RfaW5pdGAgY2FsbCwgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZz8gV2VsbCwgY29uc2lkZXJpbmcgaXQmIzM5O3MgYW4gaW5pdCBmdW5jdGlvbiwgYW5kIEkmIzM5O3ZlIHNlZW4gc29tZSByZXNvdXJjZSBsZWFrIGZpeGVzIHJlbGF0ZWQgdG8gZmFpbHVyZXMgaW4gdGhlIGBvdnNfY3RfbGltaXRfaW5pdGAgZnVuY3Rpb24sIEkgdGhpbmsgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLiBGYWlsaW5nIGR1cmluZyBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gY291bGQgaGF2ZSBuYXN0eSBzaWRlIGVmZmVjdHMuCgpUaGVyZWZvcmUsIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBvdnNfY3RfbGltaXRfaW5pdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBmYWlsdXJlIGNvbmRpdGlvbnMsIHdoaWNoIHNlZW0gdG8gYmUgcHJpbWFyaWx5IG1lbW9yeSBhbGxvY2F0aW9uIHJlbGF0ZWQsIGJ1dCBwb3RlbnRpYWxseSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgZWxzZSB0b28uIEdvdHRhIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyBhbmQgc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHNvbWUgaW50ZXJlc3RpbmcgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfbGltaXRfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE1Njk9c3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4NS0jaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTU4NjpzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4Ny17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTIwMDA9aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAxMy0jaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjAxNDpcdGVyciA9IG92c19jdF9saW1pdF9pbml0KG5ldCwgb3ZzX25ldCk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAxNS1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IG92c19uZXQtXHUwMDNleHRfbGFiZWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGFzc3VtaW5nIHlvdSYjMzk7cmUgYW4gZXhwZXJ0IGFuZCByZWFkaW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgb3ZzX2N0X2xpbWl0X2luaXRgOgoKKipEaXZpbmcgaW50byBgb3ZzX2N0X2xpbWl0X2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgb3ZzX2N0X2xpbWl0X2luaXRgLiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzIHdpdGhpbiBPcGVuIHZTd2l0Y2guIEl0JiMzOTtzIGxpa2VseSBzZXR0aW5nIHVwIHNvbWUgY29yZSBkYXRhIHN0cnVjdHVyZXMgb3IgY29uZmlndXJpbmcgcGFyYW1ldGVycyByZWxhdGVkIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGUgc3lzdGVtIGNhbiBoYW5kbGUsIG9yIHRoZSBsaW1pdHMgb24gaG93IGFnZ3Jlc3NpdmUgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQgdG91Y2hlcyB1cG9uIGFueSByZXNvdXJjZSBhbGxvY2F0aW9uLCBwZXJoYXBzIG1lbW9yeSBvciBzb21lIGtpbmQgb2YgY291bnRlciBpbml0aWFsaXphdGlvbi4gS25vd2luZyBob3cgT3BlbiB2U3dpdGNoIGhhbmRsZXMgY29ubmVjdGlvbiB0cmFja2luZyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBhbmQgcmVzb3VyY2UgY29udGVudGlvbiwgc28gdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBmb3VuZGF0aW9uYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBob3BlIHRoaXMgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgaXMgcmVsYXRpdmVseSBmb2N1c2VkOyBpZiBpdCYjMzk7cyB0b28gYnJvYWQsIGl0IG1pZ2h0IGJlIGEgYml0IHVud2llbGR5IHRvIGdyYXNwIGZ1bGx5LiBUaW1lIHRvIGRpc3NlY3QgdGhlIGNvZGUgYW5kIGZpbmQgb3V0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU4NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTg2Olx0c3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuMTU4NzpcdHtcbjE1ODg6XHRcdGludCBpLCBlcnI7XG4xNTg5Olx0XG4xNTkwOlx0XHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbjE1OTE6XHRcdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKVxuMTU5MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE1OTM6XHRcbjE1OTQ6XHRcdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4xNTk1Olx0XHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzID1cbjE1OTY6XHRcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuMTU5NzpcdFx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4xNTk4Olx0XHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4xNTk5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTYwMDpcdFx0fVxuMTYwMTpcdFxuMTYwMjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOylcbjE2MDM6XHRcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuMTYwNDpcdFxuMTYwNTpcdFx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbjE2MDY6XHRcbjE2MDc6XHRcdGlmIChJU19FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpKSB7XG4xNjA4Olx0XHRcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpO1xuMTYwOTpcdFx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKTtcbjE2MTA6XHRcdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbjE2MTE6XHRcdFx0cHJfZXJyKFwmIzM0O29wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cJiMzNDssIGVycik7XG4xNjEyOlx0XHRcdHJldHVybiBlcnI7XG4xNjEzOlx0XHR9XG4xNjE0Olx0XHRyZXR1cm4gMDtcbjE2MTU6XHR9XG4xNjE2Olx0XG4xNjE3Olx0c3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbjE2MTg6XHR7XG4xNjE5Olx0XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4xNjIwOlx0XHRpbnQgaTtcbjE2MjE6XHRcbjE2MjI6XHRcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cdTAwM2VkYXRhKTtcbjE2MjM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHtcbjE2MjQ6XHRcdFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbjE2MjU6XHRcdFx0c3RydWN0IG92c19jdF9saW1pdCAqY3RfbGltaXQ7XG4xNjI2Olx0XHRcdHN0cnVjdCBobGlzdF9ub2RlICpuZXh0O1xuMTYyNzpcdFxuMTYyODpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0X2xpbWl0LCBuZXh0LCBoZWFkLCBobGlzdF9ub2RlKVxuMTYyOTpcdFx0XHRcdGtmcmVlX3JjdShjdF9saW1pdCwgcmN1KTtcbjE2MzA6XHRcdH1cbjE2MzE6XHRcdGtmcmVlKGluZm8tXHUwMDNlbGltaXRzKTtcbjE2MzI6XHRcdGtmcmVlKGluZm8pO1xuMTYzMzpcdH1cbjE2MzQ6XHRcbjE2MzU6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVzb3VyY2UgTGVhayBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSByZXNvdXJjZSBsZWFrIHRoYXQgb2NjdXJzIGlmIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMuIEVzc2VudGlhbGx5LCB3aGVuIGluaXRpYWxpemF0aW9uIGdvZXMgd3JvbmcsIHRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgYG5mX2Nvbm5sYWJlbHNfcHV0KG5ldClgIGlzIGNhbGxlZCBieSBgb3ZzX2N0X2luaXRgIGlmIGBvdnNfbmV0LSZndDt4dF9sYWJlbGAgaXMgdHJ1ZS4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgZXJyb3IgaGFuZGxpbmcgc2NlbmFyaW8sIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYWRkcmVzcy4KClRoZSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgdGhpcyB3YXJyYW50IGZ1enppbmc/IFdlbGwsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGEgc2ltcGxlIGZpeCBmb3IgZXJyb3IgaGFuZGxpbmcsIGl0ICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB5ZXMsIGl0JiMzOTtzIHdvcnRoIHRoZSBlZmZvcnQuCgpIb3dldmVyLCB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgcGFydGljdWxhciBlcnJvciBwYXRoLCBJJiMzOTtkIG5lZWQgdG8gc2ltdWxhdGUgdGhlIGZhaWx1cmUgb2YgYG92c19jdF9saW1pdF9pbml0YC4gVGhhdCBtZWFucyBmYXVsdCBpbmplY3Rpb24sIHNwZWNpZmljYWxseSBzb21ldGhpbmcgbGlrZSBhIGBrbWFsbG9jYCBmYWlsdXJlIG9yIGEgYG5mX2Nvbm5jb3VudF9pbml0YCBmYWlsdXJlLiBHb29kIG5ld3MsIFN5emthbGxlciBjYW4gaGFuZGxlIHRoYXQhCgpTbywgdGhlIGZvY3VzIGhlcmUgc2hvdWxkIGJlIG9uIGBvdnNfY3RfaW5pdGAgb3IsIG1heWJlIGV2ZW4gYmV0dGVyLCBgb3ZzX2luaXRfbmV0YCwgZ2l2ZW4gdGhhdCYjMzk7cyBoaWdoZXIgdXAgaW4gdGhlIGluaXRpYWxpemF0aW9uIGZsb3cuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgb3ZzX2luaXRfbmV0YCBhbmQgc2VlIGhvdyB0aGlzIGZhdWx0IGluamVjdGlvbiBjYW4gYmUgaW1wbGVtZW50ZWQgYW5kIHRyaWdnZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2luaXRfbmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNjk5PXN0YXRpYyBpbnQgX19pbml0IGRwX3JlZ2lzdGVyX2dlbmwodm9pZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzE3LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjcxODpzdGF0aWMgaW50IF9fbmV0X2luaXQgb3ZzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3MTkte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI3OTE9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBvdnNfbmV0X29wcyA9IHtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI3OTI6XHQuaW5pdCA9IG92c19pbml0X25ldCxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3OTMtXHQuZXhpdCA9IG92c19leGl0X25ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmtpbmcgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipDaGVja2luZyBmb3IgRXNzZW50aWFsIE9wZW4gdlN3aXRjaCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXF1aXJlcyBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB0aGVzZSBvcHRpb25zIGFyZSBhY3R1YWxseSBhdmFpbGFibGUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgY3J1Y2lhbCB0byBjb25maXJtIGl0cyBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy4gR290dGEgZW5zdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkgYmVmb3JlIGRpdmluZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE9wZW4gdlN3aXRjaCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGBPUEVOVlNXSVRDSGAgLSBzcGVjaWZpY2FsbHksIHdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/JiMzNDsgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoYXQgYW5kLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHR5cGljYWwgc3VzcGVjdHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBjb3JlIE9WUyBkYWVtb24sIHRoZSB1dGlsaXRpZXMsIG9yIHRoZSBrZXJuZWwgbW9kdWxlPyBFYWNoIGhhcyBpdHMgb3duIHBvdGVudGlhbGx5IGhhaXJ5IHdlYiBvZiByZXF1aXJlbWVudHMuIEkmIzM5O20gbWVudGFsbHkgbGlzdGluZyB0aGUgY29tbW9uIG9uZXM6IHRoaW5ncyBsaWtlIGEgc3VpdGFibGUga2VybmVsIHZlcnNpb24sIG9mIGNvdXJzZSwgYW5kIHN1cHBvcnRpbmcgbGlicmFyaWVzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIHBsYW5lOyB3aGF0IHNwZWNpZmljIHZlcnNpb25zIG9mIE9wZW5GbG93IG1pZ2h0IGJlIGV4cGVjdGVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyB1c2Vyc3BhY2UgbGlicmFyaWVzIHRoYXQgYXJlIG1hbmRhdG9yeSBvciByZWNvbW1lbmRlZCBmb3IgdGhlIHNldHVwLiBJJiMzOTttIGNvbnNpZGVyaW5nIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLCBydW50aW1lIGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIElzIHRoaXMgYSBuZXcgaW5zdGFsbCwgYW4gdXBncmFkZSwgb3IgYXJlIHdlIHRyb3VibGVzaG9vdGluZyBzb21ldGhpbmc/IFRoYXQgY29udGV4dCB3aWxsIGhlYXZpbHkgaW5mbHVlbmNlIHRoZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgSSYjMzk7bSBmb2N1c2luZyBvbi4gQXJlIHdlIGJ1aWxkaW5nIGZyb20gc291cmNlLCB1c2luZyBhIHBhY2thZ2UgbWFuYWdlciwgb3Igd29ya2luZyB3aXRoIGEgcHJlLWJ1aWx0IGltYWdlPyBFYWNoIGFwcHJvYWNoIHRyaWdnZXJzIGRpZmZlcmVudCBtZW50YWwgY2hlY2tsaXN0cy4gTXkgbWluZCBpbW1lZGlhdGVseSBiZWdpbnMgdG8gY29uc3RydWN0IGEgZGVwZW5kZW5jeSB0cmVlIC0gZXZlbiBpZiBvbmx5IGFic3RyYWN0bHkgLSBzbyBJIGNhbiBxdWlja2x5IGlkZW50aWZ5IGFuZCBpc29sYXRlIHRoZSBsaWtlbHkgYm90dGxlbmVja3MuIEl0JiMzOTtzIHRpbWUgdG8gc3RhcnQgZGlnZ2luZywgc3RhcnRpbmcgd2l0aCB0aGUgb2J2aW91cyBgY29uZmlndXJlYCBzY3JpcHRzIG9yIHBhY2thZ2UgbWFuaWZlc3RzLCBhbmQgY29uc2lkZXJpbmcgbXkgZ29hbDogd2hhdCBhbSBJICpyZWFsbHkqIHRyeWluZyB0byBhY2NvbXBsaXNoIGhlcmU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBPcGVuIHZTd2l0Y2hcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9QRU5WU1dJVENIXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXG4gIDEwOlx0XHRcdCAgIChORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcdTAwMjZcdTAwMjYgXFxcbiAgMTE6XHRcdFx0XHRcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgXFxcbiAgMTI6XHRcdFx0XHRcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcbiAgMTM6XHRcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxuICAxNDpcdFx0c2VsZWN0IE1QTFNcbiAgMTU6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDE2Olx0XHRzZWxlY3QgTkVUX01QTFNfR1NPXG4gIDE3Olx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gIDE4Olx0XHRzZWxlY3QgTkVUX05TSFxuICAxOTpcdFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXG4gIDIwOlx0XHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgT3BlbiB2U3dpdGNoIGlzIGEgbXVsdGlsYXllciBFdGhlcm5ldCBzd2l0Y2ggdGFyZ2V0ZWQgYXQgdmlydHVhbGl6ZWRcbiAgMjM6XHRcdCAgZW52aXJvbm1lbnRzLiAgSW4gYWRkaXRpb24gdG8gc3VwcG9ydGluZyBhIHZhcmlldHkgb2YgZmVhdHVyZXNcbiAgMjQ6XHRcdCAgZXhwZWN0ZWQgaW4gYSB0cmFkaXRpb25hbCBoYXJkd2FyZSBzd2l0Y2gsIGl0IGVuYWJsZXMgZmluZS1ncmFpbmVkXG4gIDI1Olx0XHQgIHByb2dyYW1tYXRpYyBleHRlbnNpb24gYW5kIGZsb3ctYmFzZWQgY29udHJvbCBvZiB0aGUgbmV0d29yay4gIFRoaXNcbiAgMjY6XHRcdCAgY29udHJvbCBpcyB1c2VmdWwgaW4gYSB3aWRlIHZhcmlldHkgb2YgYXBwbGljYXRpb25zIGJ1dCBpc1xuICAyNzpcdFx0ICBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGluIG11bHRpLXNlcnZlciB2aXJ0dWFsaXphdGlvbiBkZXBsb3ltZW50cyxcbiAgMjg6XHRcdCAgd2hpY2ggYXJlIG9mdGVuIGNoYXJhY3Rlcml6ZWQgYnkgaGlnaGx5IGR5bmFtaWMgZW5kcG9pbnRzIGFuZCB0aGVcbiAgMjk6XHRcdCAgbmVlZCB0byBtYWludGFpbiBsb2dpY2FsIGFic3RyYWN0aW9ucyBmb3IgbXVsdGlwbGUgdGVuYW50cy5cbiAgMzA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBDb25uVHJhY2sgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBpcyBkZWZpbml0ZWx5IG5lc3RsZWQgd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIGtub3cgdGhpcyBmaWxlIGlzICpzdXBwb3NlZCogdG8gYmUgY29tcGlsZWQgb25seSBpZiBgT1BFTlZTV0lUQ0hgIGlzIGVuYWJsZWQsIGJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgZGVwZW5kZW5jaWVzIGluIE9WUyBjYW4gYmUgdHJpY2t5LCBzbyBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBidWlsZCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgYXQgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVgIHRvIHZlcmlmeSB3aGV0aGVyIGBjb25udHJhY2suY2AgaXMgYWx3YXlzIGluY2x1ZGVkIG9yIGlmIHRoZSBgT1BFTlZTV0lUQ0hgIGZsYWcgaXMgaW5kZWVkIHRoZSBkZWNpZGluZyBmYWN0b3IuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYnVpbGQgc3lzdGVtIGZvciB0aGlzIG1vZHVsZSwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBzdGVwIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgT3BlbiB2U3dpdGNoLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfT1BFTlZTV0lUQ0gpICYjNDM7PSBvcGVudnN3aXRjaC5vXG4gICA3Olx0XG4gICA4Olx0b3BlbnZzd2l0Y2gteSA6PSBcXFxuICAgOTpcdFx0YWN0aW9ucy5vIFxcXG4gIDEwOlx0XHRkYXRhcGF0aC5vIFxcXG4gIDExOlx0XHRkcF9ub3RpZnkubyBcXFxuICAxMjpcdFx0Zmxvdy5vIFxcXG4gIDEzOlx0XHRmbG93X25ldGxpbmsubyBcXFxuICAxNDpcdFx0Zmxvd190YWJsZS5vIFxcXG4gIDE1Olx0XHRtZXRlci5vIFxcXG4gIDE2Olx0XHRvcGVudnN3aXRjaF90cmFjZS5vIFxcXG4gIDE3Olx0XHR2cG9ydC5vIFxcXG4gIDE4Olx0XHR2cG9ydC1pbnRlcm5hbF9kZXYubyBcXFxuICAxOTpcdFx0dnBvcnQtbmV0ZGV2Lm9cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcwMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgQmFjayBpbnRvIHRoZSBNYWtlZmlsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBiYWNrIGludG8gdGhpcyBNYWtlZmlsZS4gSSBuZWVkIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBzdHJ1Y3R1cmUgYW5kIHVuZGVyc3RhbmQgaG93IGFsbCB0aGUgcGllY2VzIGZpdCB0b2dldGhlci4gSSYjMzk7bSBob3BpbmcgdG8gcGljayB1cCBvbiBhbnkgaW5lZmZpY2llbmNpZXMgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgbWF5YmUgZXZlbiBzcG90IHNvbWUgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgaXNzdWVzIGRvd25zdHJlYW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBwYXR0ZXJucywgY29tbW9uIGlkaW9tcywgYW5kIGFueSB1bmNvbnZlbnRpb25hbCBwcmFjdGljZXMgdGhhdCBtaWdodCBiZSB3b3J0aCByZXZpc2l0aW5nLiBJdCYjMzk7cyBhIGJpdCBsaWtlIHJldmVyc2UgZW5naW5lZXJpbmcsIGJ1dCB3aXRoIHRoZSBnb2FsIG9mIG9wdGltaXphdGlvbiByYXRoZXIgdGhhbiBqdXN0IHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCBhbnl0aGluZyBpbnRlcmVzdGluZyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQgb24gdGhlIGZpcnN0IHBhc3MuIFRoZSBkZXRhaWxzIGFyZSBhbHdheXMgaW4gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdGlmbmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLClcbiAgMjI6XHRvcGVudnN3aXRjaC15ICYjNDM7PSBjb25udHJhY2sub1xuICAyMzpcdGVuZGlmXG4gIDI0Olx0XG4gIDI1Olx0b2JqLSQoQ09ORklHX09QRU5WU1dJVENIX1ZYTEFOKSYjNDM7PSB2cG9ydC12eGxhbi5vXG4gIDI2Olx0b2JqLSQoQ09ORklHX09QRU5WU1dJVENIX0dFTkVWRSkmIzQzOz0gdnBvcnQtZ2VuZXZlLm9cbiAgMjc6XHRvYmotJChDT05GSUdfT1BFTlZTV0lUQ0hfR1JFKVx0JiM0Mzs9IHZwb3J0LWdyZS5vXG4gIDI4Olx0XG4gIDI5Olx0Q0ZMQUdTX29wZW52c3dpdGNoX3RyYWNlLm8gPSAtSSQoc3JjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDc3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvbm5UcmFjayBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBjb25udHJhY2suY2AgY29tcGlsYXRpb24gcmVsaWVzIG9uIGBORl9DT05OVFJBQ0tgLiBUaGF0JiMzOTtzIHN0YW5kYXJkLiBUaGVuLCB0aGUgY2FsbCB0byBgb3ZzX2N0X2xpbWl0X2luaXRgIG5lY2Vzc2l0YXRlcyBgTkVURklMVEVSX0NPTk5DT1VOVGAuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgcmVyZWFkaW5nIHRoZSBwYXRjaDoKCmBgYGMKI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCgllcnIgPSBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpOwoJaWYgKGVyciAmYW1wOyZhbXA7IG92c19uZXQtJmd0O3h0X2xhYmVsKQoJCW5mX2Nvbm5sYWJlbHNfcHV0KG5ldCk7CiNlbmRpZgoJcmV0dXJuIGVycjsKYGBgCgpZZXAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlIGNsZWFybHkgYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEkmIzM5O20gZm9jdXNpbmcgb24gYG92c19jdF9pbml0YC4KCk5vdywgaXMgdGhpcyBidWcgd29ydGggZnV6emluZz8gSXQmIzM5O3MgYSByZWxhdGl2ZWx5IHNpbXBsZSBlcnJvciBoYW5kbGluZyBmaXgsIGJ1dCBTeXprYWxsZXIgKmNhbiogdHJpZ2dlciBpdCB0aHJvdWdoIGZhdWx0IGluamVjdGlvbi4gSXQgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHJlc291cmNlIGxlYWsg4oCTIGBuZl9jb25ubGFiZWxzX3B1dGAgaXNuJiMzOTt0IGNhbGxlZC4gUmVzb3VyY2UgbGVha3MgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBidWdzLCBzbyB0aGUgYW5zd2VyIGlzICp5ZXMqLiBgV29ydGhGdXp6aW5nOiB0cnVlYC4KCkNvbmZpZ3MgbmVlZGVkOiBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBUaGUgcHJpbWFyeSBmb2N1cyBzeW1ib2wgaXMgYG92c19jdF9pbml0YC4KClF1aWNrIGRvdWJsZS1jaGVjazogaXMgYG92c19jdF9pbml0YCBzdGF0aWM/IExldCYjMzk7cyB2ZXJpZnkgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIEFoLCBgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClgLiBObywgaXQmIzM5O3MgKm5vdCogc3RhdGljLCBnb29kLgoKSnVzdCB0byBjb25maXJtLCBsZXQmIzM5O3MgYWxzbyBjaGVjayBpZiBgb3ZzX2luaXRfbmV0YCBpcyBzdGF0aWMuIEluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AsIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgX19uZXRfaW5pdCBvdnNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KWAuIFNvLCB5ZXMsIGBvdnNfaW5pdF9uZXRgIGlzIHN0YXRpYy4KCkFscmlnaHQsIHNvIGBvdnNfY3RfaW5pdGAgYmVpbmcgbm9uLXN0YXRpYyBpcyBleGFjdGx5IHdoYXQgSSB3YW50IGluIGEgZm9jdXMgc3ltYm9sLgoKT2theSwgbm93IHRvIHZlcmlmeSBgTkVURklMVEVSX0NPTk5DT1VOVGAgaW4gYEtjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTA9aWYgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEyLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEwNgoJCQkJCQkJb3V0cHV0OiAxMjYKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRvIGxvb2sgYXQsIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZmlndXJlZCBvdXQuIGBORVRGSUxURVJfQ09OTkNPVU5UYCByZWxpZXMgb24gYE5GX0NPTk5UUkFDS2AsIGFuZCBgT1BFTlZTV0lUQ0hgIGRlcGVuZHMgb24gdGhlIGBJTkVUYCBzdGFjaywgc28gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIGFyZSBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gSSYjMzk7bSBhbHdheXMgdGhvcm91Z2ggd2l0aCBteSBzZXR1cCwgc28gdGhpcyBpcyBpbXBvcnRhbnQgdG8gZ2V0IHJpZ2h0LgoKTm93LCB0aGUganVpY3kgYml0OiB0aGUgYG92c19jdF9pbml0YCBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlLiBUaGF0JiMzOTtzIGZhbnRhc3RpYyEgVGhpcyBtYWtlcyBpdCBhIGdyZWF0IHRhcmdldCBmb3IgZmF1bHQgaW5qZWN0aW9uLiBJIHdhcyBvcmlnaW5hbGx5IHRoaW5raW5nIG9mIGV4cGxvcmluZyBvdGhlciBmdW5jdGlvbnMsIGJ1dCBhIHF1aWNrIHJldmlldyBvZiB0aGUgcGF0Y2ggaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGBvdnNfY3RfaW5pdGAsIHNvIHRoYXTigJlzIHdoZXJlIG15IGVmZm9ydHMgc2hvdWxkIGJlIGZvY3VzZWQuCgpTbywgdG8gc3VtbWFyaXplIHN1Y2NpbmN0bHk6IFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJlc291cmNlIGxlYWsgd2l0aGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgb3ZzX2N0X2luaXRgIHdoZW4gYG92c19jdF9saW1pdF9pbml0YCBmYWlscy4gVGhhdCBtZWFucyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNyaXRpY2FsLCByZWFjaGFibGUga2VybmVsIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBpbml0aWFsaXphdGlvbiBvZiBvcGVudnN3aXRjaCB3aXRoaW4gYSBuZXR3b3JrIG5hbWVzcGFjZS4gVGhlIHN5bWJvbCBJIG5lZWQgdG8gZm9jdXMgb24gaXMsIHdpdGhvdXQgYSBkb3VidCwgYG92c19jdF9pbml0YC4gTXkgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkLCBzbyBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMgYW5kIGdldCBjcmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIG9wZW52c3dpdGNoIGNvbm50cmFjayBpbml0aWFsaXphdGlvbiAoYG92c19jdF9pbml0YCkgd2hlbiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChvcGVudnN3aXRjaCBuZXRucyBpbml0aWFsaXphdGlvbikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIG9wZW52c3dpdGNoIGNvbm50cmFjayBpbml0aWFsaXphdGlvbiAoYG92c19jdF9pbml0YCkgd2hlbiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChvcGVudnN3aXRjaCBuZXRucyBpbml0aWFsaXphdGlvbikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZlcmVuY2UgY291bnQgbGVhaykgaW4gdGhlIGVycm9yIHBhdGggb2YgYG92c19jdF9pbml0YC4gSWYgYG92c19jdF9saW1pdF9pbml0YCBmYWlscywgaXQgbm93IGNvcnJlY3RseSBjYWxscyBgbmZfY29ubmxhYmVsc19wdXRgIHRvIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBhY3F1aXJlZCBieSBgbmZfY29ubmxhYmVsc19nZXRgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29weWluZywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNvZGUgd291bGQgYmUgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3Mgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgS01TQU4gYW5kIGJldHRlciBoYW5kbGVkIGJ5IG90aGVyIHRvb2xzIGxpa2UgS01FTUxFQUsgb3Igc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNlY2M4Zjc4NjcxNjUyZjczMTcxYzBlNDdhY2NiYjNkMTViODg0ZGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjowODo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwppbmRleCA5NTY5N2Q0ZTE2ZTY0Li4zOGM2ZjM0Nzc2YzI4IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCkBAIC0yMDAxLDYgJiM0MzsyMDAxLDcgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl1bnNpZ25lZCBpbnQgbl9iaXRzID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscykgKiBCSVRTX1BFUl9CWVRFOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKJiM0MzsJaW50IGVyciA9IDA7CiAKIAlpZiAobmZfY29ubmxhYmVsc19nZXQobmV0LCBuX2JpdHMgLSAxKSkgewogCQlvdnNfbmV0LSZndDt4dF9sYWJlbCA9IGZhbHNlOwpAQCAtMjAxMCwxMCAmIzQzOzIwMTEsMTEgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAl9CiAKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXJldHVybiBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpOwotI2Vsc2UKLQlyZXR1cm4gMDsKJiM0MzsJZXJyID0gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7IG92c19uZXQtJmd0O3h0X2xhYmVsKQomIzQzOwkJbmZfY29ubmxhYmVsc19wdXQobmV0KTsKICNlbmRpZgomIzQzOwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjYKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9WUyBDb25udHJhY2sgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggd2l0aGluIGBvdnNfY3RfaW5pdGAgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhZGRpbmcgZXJyb3IgaGFuZGxpbmcgc3BlY2lmaWNhbGx5IGZvciBgb3ZzX2N0X2xpbWl0X2luaXRgLiBJZiB0aGF0IGluaXRpYWxpemF0aW9uIGZhaWxzLCBhbmQgdGhlIGBvdnNfbmV0LSZndDt4dF9sYWJlbGAgZmxhZyBpcyB0cnVlLCBpdCBwcm9jZWVkcyB0byBjYWxsIGBuZl9jb25ubGFiZWxzX3B1dChuZXQpYC4gVGhlIGltcGxpY2F0aW9uIGlzIGEgcmVzb3VyY2UgbGVhayBvciwgbW9yZSBwcmVjaXNlbHksIGEgcmVmZXJlbmNlIGNvdW50IGxlYWsgcmVsYXRlZCB0byBgY29ubmxhYmVsc2AgaXMgYmVpbmcgYWRkcmVzc2VkLgoKTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIHNvbGVseSBhIHJlc291cmNlIG1hbmFnZW1lbnQgaW1wcm92ZW1lbnQuIFRoZXJlJiMzOTtzIG5vIGludm9sdmVtZW50IG9mIHVzZXItc3BhY2UgZGF0YSBjb3B5aW5nLCBub3IgZG9lcyB0aGUgY29kZSBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdHJpY2t5IHBhZGRpbmcsIG9yIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuIFRoZXJlZm9yZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgS0FTQU4vS01TQU4gaXNzdWVzLiBLQVNBTiBpcyBzdGlsbCBpbXBvcnRhbnQgdG8gcnVuLCB0byBjaGVjayBmb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gS01FTUxFQUsgd291bGQgYmUgdGhlIG1vcmUgcmVsZXZhbnQga2VybmVsIHRlc3RpbmcgdG9vbCB0byBmaW5kIHJlc291cmNlIGxlYWtzLiBUaGlzIHBhdGNoIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBpbiB0aGF0IHJlZ2FyZC4gR2l2ZW4gaXRzIHNpbXBsaWNpdHksIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlIGFuZCBpdHMgbWluaW1hbCBpbXBhY3Qgb24gdGhlIGV4aXN0aW5nIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgKHJlZmVyZW5jZSBjb3VudCBsZWFrKSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgb3ZzX2N0X2luaXRgLiBJZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCBpdCBub3cgY29ycmVjdGx5IGNhbGxzIGBuZl9jb25ubGFiZWxzX3B1dGAgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGFjcXVpcmVkIGJ5IGBuZl9jb25ubGFiZWxzX2dldGAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3B5aW5nLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSB3b3VsZCBiZSByZWZlcmVuY2UgY291bnRpbmcgYnVncyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiBhbmQgYmV0dGVyIGhhbmRsZWQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLTUVNTEVBSyBvciBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayAocmVmZXJlbmNlIGNvdW50IGxlYWspIGluIHRoZSBlcnJvciBwYXRoIG9mIGBvdnNfY3RfaW5pdGAuIElmIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMsIGl0IG5vdyBjb3JyZWN0bHkgY2FsbHMgYG5mX2Nvbm5sYWJlbHNfcHV0YCB0byByZWxlYXNlIHRoZSByZWZlcmVuY2UgYWNxdWlyZWQgYnkgYG5mX2Nvbm5sYWJlbHNfZ2V0YC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcHlpbmcsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIHdvdWxkIGJlIHJlZmVyZW5jZSBjb3VudGluZyBidWdzIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIEtNU0FOIGFuZCBiZXR0ZXIgaGFuZGxlZCBieSBvdGhlciB0b29scyBsaWtlIEtNRU1MRUFLIG9yIHN0YW5kYXJkIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowODo1OS42MzM3ODgzNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTk2NzM1MDc1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgKHJlZmVyZW5jZSBjb3VudCBsZWFrKSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgb3ZzX2N0X2luaXRgLiBJZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCBpdCBub3cgY29ycmVjdGx5IGNhbGxzIGBuZl9jb25ubGFiZWxzX3B1dGAgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGFjcXVpcmVkIGJ5IGBuZl9jb25ubGFiZWxzX2dldGAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3B5aW5nLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSB3b3VsZCBiZSByZWZlcmVuY2UgY291bnRpbmcgYnVncyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiBhbmQgYmV0dGVyIGhhbmRsZWQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLTUVNTEVBSyBvciBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2Ygb3BlbnZzd2l0Y2ggY29ubnRyYWNrIGluaXRpYWxpemF0aW9uIChgb3ZzX2N0X2luaXRgKSB3aGVuIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG9wZW52c3dpdGNoIG5ldG5zIGluaXRpYWxpemF0aW9uKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGZhdWx0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MDg6NTkuNjMzNzkyOTk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQwMDk4NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2VjYzhmNzg2NzE2NTJmNzMxNzFjMGU0N2FjY2JiM2QxNWI4ODRkZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjowODo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG5pbmRleCA5NTY5N2Q0ZTE2ZTY0Li4zOGM2ZjM0Nzc2YzI4IDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbkBAIC0yMDAxLDYgKzIwMDEsNyBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBuX2JpdHMgPSBzaXplb2Yoc3RydWN0IG92c19rZXlfY3RfbGFiZWxzKSAqIEJJVFNfUEVSX0JZVEU7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRpZiAobmZfY29ubmxhYmVsc19nZXQobmV0LCBuX2JpdHMgLSAxKSkge1xcbiBcXHRcXHRvdnNfbmV0LVxcdTAwM2V4dF9sYWJlbCA9IGZhbHNlO1xcbkBAIC0yMDEwLDEwICsyMDExLDExIEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdH1cXG4gXFxuICNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuLVxcdHJldHVybiBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpO1xcbi0jZWxzZVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBvdnNfbmV0LVxcdTAwM2V4dF9sYWJlbClcXG4rXFx0XFx0bmZfY29ubmxhYmVsc19wdXQobmV0KTtcXG4gI2VuZGlmXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOTowMC44NzQ0ODM3OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTI5ODE2MzY2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIG9wZW52c3dpdGNoIGNvbm50cmFjayBpbml0aWFsaXphdGlvbiAoYG92c19jdF9pbml0YCkgd2hlbiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChvcGVudnN3aXRjaCBuZXRucyBpbml0aWFsaXphdGlvbikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBmYXVsdCBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNlY2M4Zjc4NjcxNjUyZjczMTcxYzBlNDdhY2NiYjNkMTViODg0ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjowODo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuaW5kZXggOTU2OTdkNGUxNmU2NC4uMzhjNmYzNDc3NmMyOCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtMjAwMSw2ICsyMDAxLDcgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgbl9iaXRzID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscykgKiBCSVRTX1BFUl9CWVRFO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuK1x0aW50IGVyciA9IDA7XG4gXG4gXHRpZiAobmZfY29ubmxhYmVsc19nZXQobmV0LCBuX2JpdHMgLSAxKSkge1xuIFx0XHRvdnNfbmV0LVx1MDAzZXh0X2xhYmVsID0gZmFsc2U7XG5AQCAtMjAxMCwxMCArMjAxMSwxMSBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0fVxuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdHJldHVybiBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpO1xuLSNlbHNlXG4tXHRyZXR1cm4gMDtcbitcdGVyciA9IG92c19jdF9saW1pdF9pbml0KG5ldCwgb3ZzX25ldCk7XG4rXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBvdnNfbmV0LVx1MDAzZXh0X2xhYmVsKVxuK1x0XHRuZl9jb25ubGFiZWxzX3B1dChuZXQpO1xuICNlbmRpZlxuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOTowMC44NzQ0ODQ4NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA3NTc3ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYC4gTG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYW4gZXJyb3IgaGFuZGxpbmcgaXNzdWUgd2l0aGluIGBvdnNfY3RfaW5pdGAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBpdCdzIGZpeGluZyBzb21ldGhpbmcgcHJldHR5IGxvdy1sZXZlbC4gVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhhdCBpZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCB3ZSBoYXZlIGEgY29uZGl0aW9uYWwgY2FsbCB0byBgbmZfY29ubmxhYmVsc19wdXQobmV0KWAuIFRoZSBjb25kaXRpb24gZm9yIHRoYXQgY2FsbCBzZWVtcyB0byBkZXBlbmQgb24gYG92c19uZXQtXHUwMDNleHRfbGFiZWxgLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgbmVlZCB0byBmdWxseSBncmFzcCBob3cgYG92c19jdF9pbml0YCBmdW5jdGlvbnMgYW5kLCBjcnVjaWFsbHksIHdoZW4gaXQgZ2V0cyBjYWxsZWQuIFJpZ2h0LCBpdCdzIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgc3lzdGVtLiBBbmQgaXQgaXMgY2FsbGVkIHdoZW4gZWl0aGVyIGEgbmV3IG5ldHdvcmsgbmFtZXNwYWNlIGlzIGNyZWF0ZWQsIG9yIHdoZW4gT3BlbiB2U3dpdGNoIGl0c2VsZiBpcyBpbml0aWFsaXplZC4gQnV0IG5vdywgd2hlcmUgaXMgYG92c19jdF9pbml0YCBjYWxsZWQgZnJvbT8gQWhhLCBpdCdzIGNhbGxlZCBmcm9tIGBvdnNfaW5pdF9uZXRgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MDk6MDUuNTgyMDY2MDkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTY4NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTM2ND1zdGF0aWMgc3RydWN0IG5mX2Nvbm5fbGFiZWxzICpvdnNfY3RfZ2V0X2Nvbm5fbGFiZWxzKHN0cnVjdCBuZl9jb25uICpjdClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0zODAtICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjM4MTpzdGF0aWMgaW50IG92c19jdF9pbml0X2xhYmVscyhzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0zODItXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG92c19rZXlfY3RfbGFiZWxzICpsYWJlbHMsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTU3PXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwMTItXFx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwMTM6XFx0XFx0ZXJyID0gb3ZzX2N0X2luaXRfbGFiZWxzKGN0LCBrZXksIFxcdTAwMjZpbmZvLVxcdTAwM2VsYWJlbHMudmFsdWUsXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwMTQtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZpbmZvLVxcdTAwM2VsYWJlbHMubWFzayk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk4Mz1zdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfY3RfbGltaXRfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5OTktXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMDA6aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAwMS17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9MTM9ZW51bSBvdnNfa2V5X2F0dHI7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMTUtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6MTY6aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKik7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTE3LXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0zMj12b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC00MC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6NDE6c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KSB7IHJldHVybiAwOyB9XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTQyLVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjcxOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgb3ZzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3MjYtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjcyNzpcXHRlcnIgPSBvdnNfY3RfaW5pdChuZXQpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3MjgtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MDk6MDUuNjI0NjM3ODI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzMDM2MjQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBvdnNfY3RfaW5pdGAgQ2FsbCBDaGFpbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBvdnNfY3RfaW5pdGAgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIE9wZW4gdlN3aXRjaCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSXQgc2VlbXMgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGBvdnNfaW5pdF9uZXRgLCB3aGljaCwgYXMgYSBwZXItbmV0bnMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGlzIHByZXR0eSBjcml0aWNhbC4gQW5kIGBvdnNfaW5pdF9uZXRgIGl0c2VsZiBpcyByZWdpc3RlcmVkIHZpYSBgcmVnaXN0ZXJfcGVybmV0X2RldmljZShcdTAwMjZvdnNfbmV0X29wc2AuIE1ha2VzIHNlbnNlIC0gc2V0dGluZyB1cCB0aGluZ3Mgb24gYSBwZXItbmV0d29yayBuYW1lc3BhY2UgYmFzaXMgaXMgYSBnb29kIGFwcHJvYWNoLlxuXG5UaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoaXMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGFuZCBzcGVjaWZpY2FsbHkgdGhpcyBgb3ZzX2N0X2luaXRgIGNhbGwsIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmc/IFdlbGwsIGNvbnNpZGVyaW5nIGl0J3MgYW4gaW5pdCBmdW5jdGlvbiwgYW5kIEkndmUgc2VlbiBzb21lIHJlc291cmNlIGxlYWsgZml4ZXMgcmVsYXRlZCB0byBmYWlsdXJlcyBpbiB0aGUgYG92c19jdF9saW1pdF9pbml0YCBmdW5jdGlvbiwgSSB0aGluayBpdCdzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4gRmFpbGluZyBkdXJpbmcgbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uIGNvdWxkIGhhdmUgbmFzdHkgc2lkZSBlZmZlY3RzLlxuXG5UaGVyZWZvcmUsIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBvdnNfY3RfbGltaXRfaW5pdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBmYWlsdXJlIGNvbmRpdGlvbnMsIHdoaWNoIHNlZW0gdG8gYmUgcHJpbWFyaWx5IG1lbW9yeSBhbGxvY2F0aW9uIHJlbGF0ZWQsIGJ1dCBwb3RlbnRpYWxseSB0aGVyZSdzIHNvbWV0aGluZyBlbHNlIHRvby4gR290dGEgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGFuZCBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgc29tZSBpbnRlcmVzdGluZyBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjEwLjA1NTAwMjY3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg5NDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfY3RfbGltaXRfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNTY5PXN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4NS0jaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTg2OnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4Ny17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAwMD1pbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMTMtI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjAxNDpcXHRlcnIgPSBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpO1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDE1LVxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgb3ZzX25ldC1cXHUwMDNleHRfbGFiZWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjEwLjA5NzkwMDQyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDg5MDI2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBhc3N1bWluZyB5b3UncmUgYW4gZXhwZXJ0IGFuZCByZWFkaW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgb3ZzX2N0X2xpbWl0X2luaXRgOlxuXG4qKkRpdmluZyBpbnRvIGBvdnNfY3RfbGltaXRfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgb3ZzX2N0X2xpbWl0X2luaXRgLiBHaXZlbiB0aGUgbmFtZSwgSSdtIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgd2l0aGluIE9wZW4gdlN3aXRjaC4gSXQncyBsaWtlbHkgc2V0dGluZyB1cCBzb21lIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbmZpZ3VyaW5nIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgdGhlIHN5c3RlbSBjYW4gaGFuZGxlLCBvciB0aGUgbGltaXRzIG9uIGhvdyBhZ2dyZXNzaXZlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGlzLiBJJ20ga2VlbiB0byBzZWUgaWYgaXQgdG91Y2hlcyB1cG9uIGFueSByZXNvdXJjZSBhbGxvY2F0aW9uLCBwZXJoYXBzIG1lbW9yeSBvciBzb21lIGtpbmQgb2YgY291bnRlciBpbml0aWFsaXphdGlvbi4gS25vd2luZyBob3cgT3BlbiB2U3dpdGNoIGhhbmRsZXMgY29ubmVjdGlvbiB0cmFja2luZyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBhbmQgcmVzb3VyY2UgY29udGVudGlvbiwgc28gdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBmb3VuZGF0aW9uYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBob3BlIHRoaXMgZnVuY3Rpb24ncyBzY29wZSBpcyByZWxhdGl2ZWx5IGZvY3VzZWQ7IGlmIGl0J3MgdG9vIGJyb2FkLCBpdCBtaWdodCBiZSBhIGJpdCB1bndpZWxkeSB0byBncmFzcCBmdWxseS4gVGltZSB0byBkaXNzZWN0IHRoZSBjb2RlIGFuZCBmaW5kIG91dCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjEzLjg0NjgwNTYwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU4NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU4NjpcXHRzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxuMTU4NzpcXHR7XFxuMTU4ODpcXHRcXHRpbnQgaSwgZXJyO1xcbjE1ODk6XFx0XFxuMTU5MDpcXHRcXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbjE1OTE6XFx0XFx0aWYgKCFvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKVxcbjE1OTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTU5MzpcXHRcXG4xNTk0OlxcdFxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4xNTk1OlxcdFxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cyA9XFxuMTU5NjpcXHRcXHRcXHRrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7XFxuMTU5NzpcXHRcXHRpZiAoIW92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cykge1xcbjE1OTg6XFx0XFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuMTU5OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNjAwOlxcdFxcdH1cXG4xNjAxOlxcdFxcbjE2MDI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSsrKVxcbjE2MDM6XFx0XFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHNbaV0pO1xcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XFxuMTYwNjpcXHRcXG4xNjA3OlxcdFxcdGlmIChJU19FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSkpIHtcXG4xNjA4OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSk7XFxuMTYwOTpcXHRcXHRcXHRrZnJlZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHMpO1xcbjE2MTA6XFx0XFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuMTYxMTpcXHRcXHRcXHRwcl9lcnIoXFxcIm9wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXFxcblxcXCIsIGVycik7XFxuMTYxMjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE2MTM6XFx0XFx0fVxcbjE2MTQ6XFx0XFx0cmV0dXJuIDA7XFxuMTYxNTpcXHR9XFxuMTYxNjpcXHRcXG4xNjE3OlxcdHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxuMTYxODpcXHR7XFxuMTYxOTpcXHRcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbjE2MjA6XFx0XFx0aW50IGk7XFxuMTYyMTpcXHRcXG4xNjIyOlxcdFxcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cXHUwMDNlZGF0YSk7XFxuMTYyMzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcXG4xNjI0OlxcdFxcdFxcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXTtcXG4xNjI1OlxcdFxcdFxcdHN0cnVjdCBvdnNfY3RfbGltaXQgKmN0X2xpbWl0O1xcbjE2MjY6XFx0XFx0XFx0c3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XFxuMTYyNzpcXHRcXG4xNjI4OlxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3RfbGltaXQsIG5leHQsIGhlYWQsIGhsaXN0X25vZGUpXFxuMTYyOTpcXHRcXHRcXHRcXHRrZnJlZV9yY3UoY3RfbGltaXQsIHJjdSk7XFxuMTYzMDpcXHRcXHR9XFxuMTYzMTpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2VsaW1pdHMpO1xcbjE2MzI6XFx0XFx0a2ZyZWUoaW5mbyk7XFxuMTYzMzpcXHR9XFxuMTYzNDpcXHRcXG4xNjM1OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjEzLjg0NjkzNzQwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNzc4NzEyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVzb3VyY2UgTGVhayBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHJlc291cmNlIGxlYWsgdGhhdCBvY2N1cnMgaWYgYG92c19jdF9saW1pdF9pbml0YCBmYWlscy4gRXNzZW50aWFsbHksIHdoZW4gaW5pdGlhbGl6YXRpb24gZ29lcyB3cm9uZywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCBgbmZfY29ubmxhYmVsc19wdXQobmV0KWAgaXMgY2FsbGVkIGJ5IGBvdnNfY3RfaW5pdGAgaWYgYG92c19uZXQtXHUwMDNleHRfbGFiZWxgIGlzIHRydWUuIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIHNjZW5hcmlvLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYWRkcmVzcy5cblxuVGhlIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gV2VsbCwgZXZlbiB0aG91Z2ggaXQncyBhIHNpbXBsZSBmaXggZm9yIGVycm9yIGhhbmRsaW5nLCBpdCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgeWVzLCBpdCdzIHdvcnRoIHRoZSBlZmZvcnQuXG5cbkhvd2V2ZXIsIHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXJ0aWN1bGFyIGVycm9yIHBhdGgsIEknZCBuZWVkIHRvIHNpbXVsYXRlIHRoZSBmYWlsdXJlIG9mIGBvdnNfY3RfbGltaXRfaW5pdGAuIFRoYXQgbWVhbnMgZmF1bHQgaW5qZWN0aW9uLCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGxpa2UgYSBga21hbGxvY2AgZmFpbHVyZSBvciBhIGBuZl9jb25uY291bnRfaW5pdGAgZmFpbHVyZS4gR29vZCBuZXdzLCBTeXprYWxsZXIgY2FuIGhhbmRsZSB0aGF0IVxuXG5TbywgdGhlIGZvY3VzIGhlcmUgc2hvdWxkIGJlIG9uIGBvdnNfY3RfaW5pdGAgb3IsIG1heWJlIGV2ZW4gYmV0dGVyLCBgb3ZzX2luaXRfbmV0YCwgZ2l2ZW4gdGhhdCdzIGhpZ2hlciB1cCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy4gTGV0IG1lIHRha2UgYSBsb29rIGF0IGBvdnNfaW5pdF9uZXRgIGFuZCBzZWUgaG93IHRoaXMgZmF1bHQgaW5qZWN0aW9uIGNhbiBiZSBpbXBsZW1lbnRlZCBhbmQgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MDk6MTkuMTI0ODEyMTg4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTEyMTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfaW5pdF9uZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNjk5PXN0YXRpYyBpbnQgX19pbml0IGRwX3JlZ2lzdGVyX2dlbmwodm9pZClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3MTctXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjcxODpzdGF0aWMgaW50IF9fbmV0X2luaXQgb3ZzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzE5LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI3OTE9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBvdnNfbmV0X29wcyA9IHtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNzkyOlxcdC5pbml0ID0gb3ZzX2luaXRfbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3OTMtXFx0LmV4aXQgPSBvdnNfZXhpdF9uZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjE5LjIxNTkzOTczNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAxODIwMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQ2hlY2tpbmcgZm9yIEVzc2VudGlhbCBPcGVuIHZTd2l0Y2ggQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXF1aXJlcyBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB0aGVzZSBvcHRpb25zIGFyZSBhY3R1YWxseSBhdmFpbGFibGUgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24uIEl0J3MgY3J1Y2lhbCB0byBjb25maXJtIGl0cyBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy4gR290dGEgZW5zdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkgYmVmb3JlIGRpdmluZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOToyMi44MTc3NjQwMTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjg0NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOToyMi44ODAwNTQwMTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNTg1NTE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE9wZW4gdlN3aXRjaCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBgT1BFTlZTV0lUQ0hgIC0gc3BlY2lmaWNhbGx5LCB3aGF0IGFyZSBpdHMgZGVwZW5kZW5jaWVzP1wiIEknbSBtZW50YWxseSBwYXJzaW5nIHRoYXQgYW5kLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgdHlwaWNhbCBzdXNwZWN0cy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgdGhlIGNvcmUgT1ZTIGRhZW1vbiwgdGhlIHV0aWxpdGllcywgb3IgdGhlIGtlcm5lbCBtb2R1bGU/IEVhY2ggaGFzIGl0cyBvd24gcG90ZW50aWFsbHkgaGFpcnkgd2ViIG9mIHJlcXVpcmVtZW50cy4gSSdtIG1lbnRhbGx5IGxpc3RpbmcgdGhlIGNvbW1vbiBvbmVzOiB0aGluZ3MgbGlrZSBhIHN1aXRhYmxlIGtlcm5lbCB2ZXJzaW9uLCBvZiBjb3Vyc2UsIGFuZCBzdXBwb3J0aW5nIGxpYnJhcmllcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIHBsYW5lOyB3aGF0IHNwZWNpZmljIHZlcnNpb25zIG9mIE9wZW5GbG93IG1pZ2h0IGJlIGV4cGVjdGVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyB1c2Vyc3BhY2UgbGlicmFyaWVzIHRoYXQgYXJlIG1hbmRhdG9yeSBvciByZWNvbW1lbmRlZCBmb3IgdGhlIHNldHVwLiBJJ20gY29uc2lkZXJpbmcgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMsIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gSXMgdGhpcyBhIG5ldyBpbnN0YWxsLCBhbiB1cGdyYWRlLCBvciBhcmUgd2UgdHJvdWJsZXNob290aW5nIHNvbWV0aGluZz8gVGhhdCBjb250ZXh0IHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBJJ20gZm9jdXNpbmcgb24uIEFyZSB3ZSBidWlsZGluZyBmcm9tIHNvdXJjZSwgdXNpbmcgYSBwYWNrYWdlIG1hbmFnZXIsIG9yIHdvcmtpbmcgd2l0aCBhIHByZS1idWlsdCBpbWFnZT8gRWFjaCBhcHByb2FjaCB0cmlnZ2VycyBkaWZmZXJlbnQgbWVudGFsIGNoZWNrbGlzdHMuIE15IG1pbmQgaW1tZWRpYXRlbHkgYmVnaW5zIHRvIGNvbnN0cnVjdCBhIGRlcGVuZGVuY3kgdHJlZSAtIGV2ZW4gaWYgb25seSBhYnN0cmFjdGx5IC0gc28gSSBjYW4gcXVpY2tseSBpZGVudGlmeSBhbmQgaXNvbGF0ZSB0aGUgbGlrZWx5IGJvdHRsZW5lY2tzLiBJdCdzIHRpbWUgdG8gc3RhcnQgZGlnZ2luZywgc3RhcnRpbmcgd2l0aCB0aGUgb2J2aW91cyBgY29uZmlndXJlYCBzY3JpcHRzIG9yIHBhY2thZ2UgbWFuaWZlc3RzLCBhbmQgY29uc2lkZXJpbmcgbXkgZ29hbDogd2hhdCBhbSBJICpyZWFsbHkqIHRyeWluZyB0byBhY2NvbXBsaXNoIGhlcmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOToyNy4yMTU5MTMzMjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxcbiAgMjM6XFx0XFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xcbiAgMjQ6XFx0XFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcXG4gIDI1OlxcdFxcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xcbiAgMjY6XFx0XFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXFxuICAyNzpcXHRcXHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxcbiAgMjg6XFx0XFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxcbiAgMjk6XFx0XFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjI3LjIxNjAyMTk0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzczMzg1ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBDb25uVHJhY2sgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgaXMgZGVmaW5pdGVseSBuZXN0bGVkIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgaXQncyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIGtub3cgdGhpcyBmaWxlIGlzICpzdXBwb3NlZCogdG8gYmUgY29tcGlsZWQgb25seSBpZiBgT1BFTlZTV0lUQ0hgIGlzIGVuYWJsZWQsIGJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgZGVwZW5kZW5jaWVzIGluIE9WUyBjYW4gYmUgdHJpY2t5LCBzbyBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGJ1aWxkIHByb2Nlc3MuIEknbGwgbmVlZCB0byBnbyBsb29rIGF0IHRoZSBgbmV0L29wZW52c3dpdGNoL01ha2VmaWxlYCB0byB2ZXJpZnkgd2hldGhlciBgY29ubnRyYWNrLmNgIGlzIGFsd2F5cyBpbmNsdWRlZCBvciBpZiB0aGUgYE9QRU5WU1dJVENIYCBmbGFnIGlzIGluZGVlZCB0aGUgZGVjaWRpbmcgZmFjdG9yLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYnVpbGQgc3lzdGVtIGZvciB0aGlzIG1vZHVsZSwgc28gaXQncyBhIGNyaXRpY2FsIHN0ZXAgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjMwLjU4OTQxMDY3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBPcGVuIHZTd2l0Y2guXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19PUEVOVlNXSVRDSCkgKz0gb3BlbnZzd2l0Y2gub1xcbiAgIDc6XFx0XFxuICAgODpcXHRvcGVudnN3aXRjaC15IDo9IFxcXFxcXG4gICA5OlxcdFxcdGFjdGlvbnMubyBcXFxcXFxuICAxMDpcXHRcXHRkYXRhcGF0aC5vIFxcXFxcXG4gIDExOlxcdFxcdGRwX25vdGlmeS5vIFxcXFxcXG4gIDEyOlxcdFxcdGZsb3cubyBcXFxcXFxuICAxMzpcXHRcXHRmbG93X25ldGxpbmsubyBcXFxcXFxuICAxNDpcXHRcXHRmbG93X3RhYmxlLm8gXFxcXFxcbiAgMTU6XFx0XFx0bWV0ZXIubyBcXFxcXFxuICAxNjpcXHRcXHRvcGVudnN3aXRjaF90cmFjZS5vIFxcXFxcXG4gIDE3OlxcdFxcdHZwb3J0Lm8gXFxcXFxcbiAgMTg6XFx0XFx0dnBvcnQtaW50ZXJuYWxfZGV2Lm8gXFxcXFxcbiAgMTk6XFx0XFx0dnBvcnQtbmV0ZGV2Lm9cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOTozMC41ODk1MTE1NjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5Mzc5NzYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgQmFjayBpbnRvIHRoZSBNYWtlZmlsZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGJhY2sgaW50byB0aGlzIE1ha2VmaWxlLiBJIG5lZWQgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSBhbmQgdW5kZXJzdGFuZCBob3cgYWxsIHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJJ20gaG9waW5nIHRvIHBpY2sgdXAgb24gYW55IGluZWZmaWNpZW5jaWVzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIG1heWJlIGV2ZW4gc3BvdCBzb21lIGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBiZSBjYXVzaW5nIGlzc3VlcyBkb3duc3RyZWFtLiBJJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBwYXR0ZXJucywgY29tbW9uIGlkaW9tcywgYW5kIGFueSB1bmNvbnZlbnRpb25hbCBwcmFjdGljZXMgdGhhdCBtaWdodCBiZSB3b3J0aCByZXZpc2l0aW5nLiBJdCdzIGEgYml0IGxpa2UgcmV2ZXJzZSBlbmdpbmVlcmluZywgYnV0IHdpdGggdGhlIGdvYWwgb2Ygb3B0aW1pemF0aW9uIHJhdGhlciB0aGFuIGp1c3QgdW5kZXJzdGFuZGluZy4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgYW55dGhpbmcgaW50ZXJlc3RpbmcgdGhhdCBJIG1pZ2h0IGhhdmUgbWlzc2VkIG9uIHRoZSBmaXJzdCBwYXNzLiBUaGUgZGV0YWlscyBhcmUgYWx3YXlzIGluIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjMzLjQ4MzMxMjY2OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMjEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjE6XFx0aWZuZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksKVxcbiAgMjI6XFx0b3BlbnZzd2l0Y2gteSArPSBjb25udHJhY2sub1xcbiAgMjM6XFx0ZW5kaWZcXG4gIDI0OlxcdFxcbiAgMjU6XFx0b2JqLSQoQ09ORklHX09QRU5WU1dJVENIX1ZYTEFOKSs9IHZwb3J0LXZ4bGFuLm9cXG4gIDI2OlxcdG9iai0kKENPTkZJR19PUEVOVlNXSVRDSF9HRU5FVkUpKz0gdnBvcnQtZ2VuZXZlLm9cXG4gIDI3OlxcdG9iai0kKENPTkZJR19PUEVOVlNXSVRDSF9HUkUpXFx0Kz0gdnBvcnQtZ3JlLm9cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Q0ZMQUdTX29wZW52c3dpdGNoX3RyYWNlLm8gPSAtSSQoc3JjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOTozMy40ODM0MTU3MzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyNTQ5NDI0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29ublRyYWNrIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBjb25udHJhY2suY2AgY29tcGlsYXRpb24gcmVsaWVzIG9uIGBORl9DT05OVFJBQ0tgLiBUaGF0J3Mgc3RhbmRhcmQuIFRoZW4sIHRoZSBjYWxsIHRvIGBvdnNfY3RfbGltaXRfaW5pdGAgbmVjZXNzaXRhdGVzIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gTGV0J3MgY29uZmlybSB0aGF0IGJ5IHJlcmVhZGluZyB0aGUgcGF0Y2g6XG5cbmBgYGNcbiNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcblx0ZXJyID0gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcblx0aWYgKGVyciBcdTAwMjZcdTAwMjYgb3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcblx0XHRuZl9jb25ubGFiZWxzX3B1dChuZXQpO1xuI2VuZGlmXG5cdHJldHVybiBlcnI7XG5gYGBcblxuWWVwLCBgTkVURklMVEVSX0NPTk5DT1VOVGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gVGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZSBjbGVhcmx5IGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBJJ20gZm9jdXNpbmcgb24gYG92c19jdF9pbml0YC5cblxuTm93LCBpcyB0aGlzIGJ1ZyB3b3J0aCBmdXp6aW5nPyBJdCdzIGEgcmVsYXRpdmVseSBzaW1wbGUgZXJyb3IgaGFuZGxpbmcgZml4LCBidXQgU3l6a2FsbGVyICpjYW4qIHRyaWdnZXIgaXQgdGhyb3VnaCBmYXVsdCBpbmplY3Rpb24uIEl0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSByZXNvdXJjZSBsZWFrIOKAkyBgbmZfY29ubmxhYmVsc19wdXRgIGlzbid0IGNhbGxlZC4gUmVzb3VyY2UgbGVha3MgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBidWdzLCBzbyB0aGUgYW5zd2VyIGlzICp5ZXMqLiBgV29ydGhGdXp6aW5nOiB0cnVlYC5cblxuQ29uZmlncyBuZWVkZWQ6IGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIFRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbCBpcyBgb3ZzX2N0X2luaXRgLlxuXG5RdWljayBkb3VibGUtY2hlY2s6IGlzIGBvdnNfY3RfaW5pdGAgc3RhdGljPyBMZXQncyB2ZXJpZnkgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIEFoLCBgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClgLiBObywgaXQncyAqbm90KiBzdGF0aWMsIGdvb2QuXG5cbkp1c3QgdG8gY29uZmlybSwgbGV0J3MgYWxzbyBjaGVjayBpZiBgb3ZzX2luaXRfbmV0YCBpcyBzdGF0aWMuIEluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AsIGl0J3MgZGVmaW5lZCBhcyBgc3RhdGljIGludCBfX25ldF9pbml0IG92c19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpYC4gU28sIHllcywgYG92c19pbml0X25ldGAgaXMgc3RhdGljLlxuXG5BbHJpZ2h0LCBzbyBgb3ZzX2N0X2luaXRgIGJlaW5nIG5vbi1zdGF0aWMgaXMgZXhhY3RseSB3aGF0IEkgd2FudCBpbiBhIGZvY3VzIHN5bWJvbC5cblxuT2theSwgbm93IHRvIHZlcmlmeSBgTkVURklMVEVSX0NPTk5DT1VOVGAgaW4gYEtjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDc3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MTA6NDIuNzM4MzYwODE5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk0MjI1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTExMD1pZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoxMDo0Mi44NTc3ODgwNzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NzAxNDQxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0byBsb29rIGF0LCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBmaWd1cmVkIG91dC4gYE5FVEZJTFRFUl9DT05OQ09VTlRgIHJlbGllcyBvbiBgTkZfQ09OTlRSQUNLYCwgYW5kIGBPUEVOVlNXSVRDSGAgZGVwZW5kcyBvbiB0aGUgYElORVRgIHN0YWNrLCBzbyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBJJ20gYWx3YXlzIHRob3JvdWdoIHdpdGggbXkgc2V0dXAsIHNvIHRoaXMgaXMgaW1wb3J0YW50IHRvIGdldCByaWdodC5cblxuTm93LCB0aGUganVpY3kgYml0OiB0aGUgYG92c19jdF9pbml0YCBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlLiBUaGF0J3MgZmFudGFzdGljISBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgdGFyZ2V0IGZvciBmYXVsdCBpbmplY3Rpb24uIEkgd2FzIG9yaWdpbmFsbHkgdGhpbmtpbmcgb2YgZXhwbG9yaW5nIG90aGVyIGZ1bmN0aW9ucywgYnV0IGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwYXRjaCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbmdlIGlzIGxpbWl0ZWQgdG8gYG92c19jdF9pbml0YCwgc28gdGhhdOKAmXMgd2hlcmUgbXkgZWZmb3J0cyBzaG91bGQgYmUgZm9jdXNlZC5cblxuU28sIHRvIHN1bW1hcml6ZSBzdWNjaW5jdGx5OiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSByZXNvdXJjZSBsZWFrIHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYG92c19jdF9pbml0YCB3aGVuIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMuIFRoYXQgbWVhbnMgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBjcml0aWNhbCwgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgaW5pdGlhbGl6YXRpb24gb2Ygb3BlbnZzd2l0Y2ggd2l0aGluIGEgbmV0d29yayBuYW1lc3BhY2UuIFRoZSBzeW1ib2wgSSBuZWVkIHRvIGZvY3VzIG9uIGlzLCB3aXRob3V0IGEgZG91YnQsIGBvdnNfY3RfaW5pdGAuIE15IGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZCwgc28gSSdtIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMgYW5kIGdldCBjcmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEwNiwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MTA6NTMuNzI3OTM1MjA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MTgyNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2Ygb3BlbnZzd2l0Y2ggY29ubnRyYWNrIGluaXRpYWxpemF0aW9uIChgb3ZzX2N0X2luaXRgKSB3aGVuIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG9wZW52c3dpdGNoIG5ldG5zIGluaXRpYWxpemF0aW9uKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGZhdWx0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2Ygb3BlbnZzd2l0Y2ggY29ubnRyYWNrIGluaXRpYWxpemF0aW9uIChgb3ZzX2N0X2luaXRgKSB3aGVuIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG9wZW52c3dpdGNoIG5ldG5zIGluaXRpYWxpemF0aW9uKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGZhdWx0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MTA6NTMuODU2MTIzODA0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODU0NTExNTk3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoxMDo1My44NTY1Mjc2MDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjg1NDUwNzUwNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgKHJlZmVyZW5jZSBjb3VudCBsZWFrKSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgb3ZzX2N0X2luaXRgLiBJZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCBpdCBub3cgY29ycmVjdGx5IGNhbGxzIGBuZl9jb25ubGFiZWxzX3B1dGAgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGFjcXVpcmVkIGJ5IGBuZl9jb25ubGFiZWxzX2dldGAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3B5aW5nLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSB3b3VsZCBiZSByZWZlcmVuY2UgY291bnRpbmcgYnVncyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiBhbmQgYmV0dGVyIGhhbmRsZWQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLTUVNTEVBSyBvciBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZWNjOGY3ODY3MTY1MmY3MzE3MWMwZTQ3YWNjYmIzZDE1Yjg4NGRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTY6MDg6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLjM4YzZmMzQ3NzZjMjggMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTIwMDEsNiArMjAwMSw3IEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0dW5zaWduZWQgaW50IG5fYml0cyA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMpICogQklUU19QRVJfQllURTtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbitcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKG5mX2Nvbm5sYWJlbHNfZ2V0KG5ldCwgbl9iaXRzIC0gMSkpIHtcbiBcdFx0b3ZzX25ldC1cdTAwM2V4dF9sYWJlbCA9IGZhbHNlO1xuQEAgLTIwMTAsMTAgKzIwMTEsMTEgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdH1cbiBcbiAjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4tXHRyZXR1cm4gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcbi0jZWxzZVxuLVx0cmV0dXJuIDA7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpO1xuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgb3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcbitcdFx0bmZfY29ubmxhYmVsc19wdXQobmV0KTtcbiAjZW5kaWZcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MTA6NTMuODU2NTI4NTE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTQ1MDcyMTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPVlMgQ29ubnRyYWNrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggd2l0aGluIGBvdnNfY3RfaW5pdGAgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIEVzc2VudGlhbGx5LCBpdCdzIGFkZGluZyBlcnJvciBoYW5kbGluZyBzcGVjaWZpY2FsbHkgZm9yIGBvdnNfY3RfbGltaXRfaW5pdGAuIElmIHRoYXQgaW5pdGlhbGl6YXRpb24gZmFpbHMsIGFuZCB0aGUgYG92c19uZXQtXHUwMDNleHRfbGFiZWxgIGZsYWcgaXMgdHJ1ZSwgaXQgcHJvY2VlZHMgdG8gY2FsbCBgbmZfY29ubmxhYmVsc19wdXQobmV0KWAuIFRoZSBpbXBsaWNhdGlvbiBpcyBhIHJlc291cmNlIGxlYWsgb3IsIG1vcmUgcHJlY2lzZWx5LCBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIHJlbGF0ZWQgdG8gYGNvbm5sYWJlbHNgIGlzIGJlaW5nIGFkZHJlc3NlZC5cblxuTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpdCdzIGNsZWFyIHRoaXMgaXMgc29sZWx5IGEgcmVzb3VyY2UgbWFuYWdlbWVudCBpbXByb3ZlbWVudC4gVGhlcmUncyBubyBpbnZvbHZlbWVudCBvZiB1c2VyLXNwYWNlIGRhdGEgY29weWluZywgbm9yIGRvZXMgdGhlIGNvZGUgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHRyaWNreSBwYWRkaW5nLCBvciBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLiBUaGVyZWZvcmUsIEkgZG9uJ3Qgc2VlIGFueSBpbW1lZGlhdGUgS0FTQU4vS01TQU4gaXNzdWVzLiBLQVNBTiBpcyBzdGlsbCBpbXBvcnRhbnQgdG8gcnVuLCB0byBjaGVjayBmb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gS01FTUxFQUsgd291bGQgYmUgdGhlIG1vcmUgcmVsZXZhbnQga2VybmVsIHRlc3RpbmcgdG9vbCB0byBmaW5kIHJlc291cmNlIGxlYWtzLiBUaGlzIHBhdGNoIGl0c2VsZiBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGluIHRoYXQgcmVnYXJkLiBHaXZlbiBpdHMgc2ltcGxpY2l0eSwgSSdtIGNvbmZpZGVudCBpbiB0aGUgcGF0Y2gncyBwdXJwb3NlIGFuZCBpdHMgbWluaW1hbCBpbXBhY3Qgb24gdGhlIGV4aXN0aW5nIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY2LCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjE1OjM5LjMwNzI1NDMxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZlcmVuY2UgY291bnQgbGVhaykgaW4gdGhlIGVycm9yIHBhdGggb2YgYG92c19jdF9pbml0YC4gSWYgYG92c19jdF9saW1pdF9pbml0YCBmYWlscywgaXQgbm93IGNvcnJlY3RseSBjYWxscyBgbmZfY29ubmxhYmVsc19wdXRgIHRvIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBhY3F1aXJlZCBieSBgbmZfY29ubmxhYmVsc19nZXRgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29weWluZywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNvZGUgd291bGQgYmUgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3Mgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgS01TQU4gYW5kIGJldHRlciBoYW5kbGVkIGJ5IG90aGVyIHRvb2xzIGxpa2UgS01FTUxFQUsgb3Igc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZlcmVuY2UgY291bnQgbGVhaykgaW4gdGhlIGVycm9yIHBhdGggb2YgYG92c19jdF9pbml0YC4gSWYgYG92c19jdF9saW1pdF9pbml0YCBmYWlscywgaXQgbm93IGNvcnJlY3RseSBjYWxscyBgbmZfY29ubmxhYmVsc19wdXRgIHRvIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBhY3F1aXJlZCBieSBgbmZfY29ubmxhYmVsc19nZXRgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29weWluZywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNvZGUgd291bGQgYmUgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3Mgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgS01TQU4gYW5kIGJldHRlciBoYW5kbGVkIGJ5IG90aGVyIHRvb2xzIGxpa2UgS01FTUxFQUsgb3Igc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow8zm8m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-15 15:21:22 +0000 UTC FinishedAt: 2026-08-15 16:15:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_CONNCOUNT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "NF_CONNTRACK", "NETFILTER_CONNCOUNT" ], "series_id": "1acb5456-6723-4e97-8c69-ead32eee595e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_ct_init" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgKHJlZmVyZW5jZSBjb3VudCBsZWFrKSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgb3ZzX2N0X2luaXRgLiBJZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCBpdCBub3cgY29ycmVjdGx5IGNhbGxzIGBuZl9jb25ubGFiZWxzX3B1dGAgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGFjcXVpcmVkIGJ5IGBuZl9jb25ubGFiZWxzX2dldGAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3B5aW5nLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSB3b3VsZCBiZSByZWZlcmVuY2UgY291bnRpbmcgYnVncyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiBhbmQgYmV0dGVyIGhhbmRsZWQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLTUVNTEVBSyBvciBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIG9wZW52c3dpdGNoIGNvbm50cmFjayBpbml0aWFsaXphdGlvbiAoYG92c19jdF9pbml0YCkgd2hlbiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChvcGVudnN3aXRjaCBuZXRucyBpbml0aWFsaXphdGlvbikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZWNjOGY3ODY3MTY1MmY3MzE3MWMwZTQ3YWNjYmIzZDE1Yjg4NGRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTY6MDg6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5pbmRleCA5NTY5N2Q0ZTE2ZTY0Li4zOGM2ZjM0Nzc2YzI4IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbkBAIC0yMDAxLDYgJiM0MzsyMDAxLDcgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgbl9iaXRzID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscykgKiBCSVRTX1BFUl9CWVRFO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuJiM0MztcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKG5mX2Nvbm5sYWJlbHNfZ2V0KG5ldCwgbl9iaXRzIC0gMSkpIHtcbiBcdFx0b3ZzX25ldC1cdTAwM2V4dF9sYWJlbCA9IGZhbHNlO1xuQEAgLTIwMTAsMTAgJiM0MzsyMDExLDExIEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHR9XG4gXG4gI2lmXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxuLVx0cmV0dXJuIG92c19jdF9saW1pdF9pbml0KG5ldCwgb3ZzX25ldCk7XG4tI2Vsc2Vcbi1cdHJldHVybiAwO1xuJiM0MztcdGVyciA9IG92c19jdF9saW1pdF9pbml0KG5ldCwgb3ZzX25ldCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgb3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcbiYjNDM7XHRcdG5mX2Nvbm5sYWJlbHNfcHV0KG5ldCk7XG4gI2VuZGlmXG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIG9wZW52c3dpdGNoIGNvbm50cmFjayBpbml0aWFsaXphdGlvbiAoYG92c19jdF9pbml0YCkgd2hlbiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChvcGVudnN3aXRjaCBuZXRucyBpbml0aWFsaXphdGlvbikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZWNjOGY3ODY3MTY1MmY3MzE3MWMwZTQ3YWNjYmIzZDE1Yjg4NGRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMTY6MDg6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKaW5kZXggOTU2OTdkNGUxNmU2NC4uMzhjNmYzNDc3NmMyOCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtMjAwMSw2ICYjNDM7MjAwMSw3IEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJdW5zaWduZWQgaW50IG5fYml0cyA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMpICogQklUU19QRVJfQllURTsKIAlzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldCA9IG5ldF9nZW5lcmljKG5ldCwgb3ZzX25ldF9pZCk7CiYjNDM7CWludCBlcnIgPSAwOwogCiAJaWYgKG5mX2Nvbm5sYWJlbHNfZ2V0KG5ldCwgbl9iaXRzIC0gMSkpIHsKIAkJb3ZzX25ldC0mZ3Q7eHRfbGFiZWwgPSBmYWxzZTsKQEAgLTIwMTAsMTAgJiM0MzsyMDExLDExIEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAJfQogCiAjaWYJSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkKLQlyZXR1cm4gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTsKLSNlbHNlCi0JcmV0dXJuIDA7CiYjNDM7CWVyciA9IG92c19jdF9saW1pdF9pbml0KG5ldCwgb3ZzX25ldCk7CiYjNDM7CWlmIChlcnIgJmFtcDsmYW1wOyBvdnNfbmV0LSZndDt4dF9sYWJlbCkKJiM0MzsJCW5mX2Nvbm5sYWJlbHNfcHV0KG5ldCk7CiAjZW5kaWYKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25udHJhY2sgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBhZmZlY3RpbmcgYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIExvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhbiBlcnJvciBoYW5kbGluZyBpc3N1ZSB3aXRoaW4gYG92c19jdF9pbml0YC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIGl0JiMzOTtzIGZpeGluZyBzb21ldGhpbmcgcHJldHR5IGxvdy1sZXZlbC4gVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhhdCBpZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCB3ZSBoYXZlIGEgY29uZGl0aW9uYWwgY2FsbCB0byBgbmZfY29ubmxhYmVsc19wdXQobmV0KWAuIFRoZSBjb25kaXRpb24gZm9yIHRoYXQgY2FsbCBzZWVtcyB0byBkZXBlbmQgb24gYG92c19uZXQtJmd0O3h0X2xhYmVsYC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGhvdyBgb3ZzX2N0X2luaXRgIGZ1bmN0aW9ucyBhbmQsIGNydWNpYWxseSwgd2hlbiBpdCBnZXRzIGNhbGxlZC4gUmlnaHQsIGl0JiMzOTtzIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgc3lzdGVtLiBBbmQgaXQgaXMgY2FsbGVkIHdoZW4gZWl0aGVyIGEgbmV3IG5ldHdvcmsgbmFtZXNwYWNlIGlzIGNyZWF0ZWQsIG9yIHdoZW4gT3BlbiB2U3dpdGNoIGl0c2VsZiBpcyBpbml0aWFsaXplZC4gQnV0IG5vdywgd2hlcmUgaXMgYG92c19jdF9pbml0YCBjYWxsZWQgZnJvbT8gQWhhLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgb3ZzX2luaXRfbmV0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLiBOb3cgSSBuZWVkIHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiB3b3JrcywgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTM2ND1zdGF0aWMgc3RydWN0IG5mX2Nvbm5fbGFiZWxzICpvdnNfY3RfZ2V0X2Nvbm5fbGFiZWxzKHN0cnVjdCBuZl9jb25uICpjdClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMzgwLSAqL1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjM4MTpzdGF0aWMgaW50IG92c19jdF9pbml0X2xhYmVscyhzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTM4Mi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMgKmxhYmVscyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTU3PXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xMDEyLVx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTAxMzpcdFx0ZXJyID0gb3ZzX2N0X2luaXRfbGFiZWxzKGN0LCBrZXksIFx1MDAyNmluZm8tXHUwMDNlbGFiZWxzLnZhbHVlLFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwMTQtXHRcdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZWxhYmVscy5tYXNrKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk4Mz1zdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfY3RfbGltaXRfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xOTk5LVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMDA6aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDAxLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9MTM9ZW51bSBvdnNfa2V5X2F0dHI7XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTE1LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6MTY6aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKik7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMTctdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICopO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0zMj12b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtNDAtXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6NDE6c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KSB7IHJldHVybiAwOyB9XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtNDItXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjcxOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgb3ZzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzI2LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjcyNzpcdGVyciA9IG92c19jdF9pbml0KG5ldCk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzI4LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG92c19jdF9pbml0YCBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgb3ZzX2N0X2luaXRgIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG92c19pbml0X25ldGAsIHdoaWNoLCBhcyBhIHBlci1uZXRucyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgaXMgcHJldHR5IGNyaXRpY2FsLiBBbmQgYG92c19pbml0X25ldGAgaXRzZWxmIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZhbXA7b3ZzX25ldF9vcHNgLiBNYWtlcyBzZW5zZSAtIHNldHRpbmcgdXAgdGhpbmdzIG9uIGEgcGVyLW5ldHdvcmsgbmFtZXNwYWNlIGJhc2lzIGlzIGEgZ29vZCBhcHByb2FjaC4KClRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgdGhpcyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYW5kIHNwZWNpZmljYWxseSB0aGlzIGBvdnNfY3RfaW5pdGAgY2FsbCwgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZz8gV2VsbCwgY29uc2lkZXJpbmcgaXQmIzM5O3MgYW4gaW5pdCBmdW5jdGlvbiwgYW5kIEkmIzM5O3ZlIHNlZW4gc29tZSByZXNvdXJjZSBsZWFrIGZpeGVzIHJlbGF0ZWQgdG8gZmFpbHVyZXMgaW4gdGhlIGBvdnNfY3RfbGltaXRfaW5pdGAgZnVuY3Rpb24sIEkgdGhpbmsgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLiBGYWlsaW5nIGR1cmluZyBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gY291bGQgaGF2ZSBuYXN0eSBzaWRlIGVmZmVjdHMuCgpUaGVyZWZvcmUsIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBvdnNfY3RfbGltaXRfaW5pdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBmYWlsdXJlIGNvbmRpdGlvbnMsIHdoaWNoIHNlZW0gdG8gYmUgcHJpbWFyaWx5IG1lbW9yeSBhbGxvY2F0aW9uIHJlbGF0ZWQsIGJ1dCBwb3RlbnRpYWxseSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgZWxzZSB0b28uIEdvdHRhIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyBhbmQgc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHNvbWUgaW50ZXJlc3RpbmcgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfY3RfbGltaXRfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE1Njk9c3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4NS0jaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MTU4NjpzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4Ny17XG4tLVxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTIwMDA9aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAxMy0jaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjAxNDpcdGVyciA9IG92c19jdF9saW1pdF9pbml0KG5ldCwgb3ZzX25ldCk7XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAxNS1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IG92c19uZXQtXHUwMDNleHRfbGFiZWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGFzc3VtaW5nIHlvdSYjMzk7cmUgYW4gZXhwZXJ0IGFuZCByZWFkaW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgb3ZzX2N0X2xpbWl0X2luaXRgOgoKKipEaXZpbmcgaW50byBgb3ZzX2N0X2xpbWl0X2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgb3ZzX2N0X2xpbWl0X2luaXRgLiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGltaXRzIHdpdGhpbiBPcGVuIHZTd2l0Y2guIEl0JiMzOTtzIGxpa2VseSBzZXR0aW5nIHVwIHNvbWUgY29yZSBkYXRhIHN0cnVjdHVyZXMgb3IgY29uZmlndXJpbmcgcGFyYW1ldGVycyByZWxhdGVkIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGUgc3lzdGVtIGNhbiBoYW5kbGUsIG9yIHRoZSBsaW1pdHMgb24gaG93IGFnZ3Jlc3NpdmUgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQgdG91Y2hlcyB1cG9uIGFueSByZXNvdXJjZSBhbGxvY2F0aW9uLCBwZXJoYXBzIG1lbW9yeSBvciBzb21lIGtpbmQgb2YgY291bnRlciBpbml0aWFsaXphdGlvbi4gS25vd2luZyBob3cgT3BlbiB2U3dpdGNoIGhhbmRsZXMgY29ubmVjdGlvbiB0cmFja2luZyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBhbmQgcmVzb3VyY2UgY29udGVudGlvbiwgc28gdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBmb3VuZGF0aW9uYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBob3BlIHRoaXMgZnVuY3Rpb24mIzM5O3Mgc2NvcGUgaXMgcmVsYXRpdmVseSBmb2N1c2VkOyBpZiBpdCYjMzk7cyB0b28gYnJvYWQsIGl0IG1pZ2h0IGJlIGEgYml0IHVud2llbGR5IHRvIGdyYXNwIGZ1bGx5LiBUaW1lIHRvIGRpc3NlY3QgdGhlIGNvZGUgYW5kIGZpbmQgb3V0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU4NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTg2Olx0c3RhdGljIGludCBvdnNfY3RfbGltaXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0KVxuMTU4NzpcdHtcbjE1ODg6XHRcdGludCBpLCBlcnI7XG4xNTg5Olx0XG4xNTkwOlx0XHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8gPSBrbWFsbG9jX29iaigqb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbjE1OTE6XHRcdGlmICghb3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKVxuMTU5MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE1OTM6XHRcbjE1OTQ6XHRcdG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VkZWZhdWx0X2xpbWl0ID0gT1ZTX0NUX0xJTUlUX0RFRkFVTFQ7XG4xNTk1Olx0XHRvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzID1cbjE1OTY6XHRcdFx0a21hbGxvY19vYmpzKHN0cnVjdCBobGlzdF9oZWFkLCBDVF9MSU1JVF9IQVNIX0JVQ0tFVFMpO1xuMTU5NzpcdFx0aWYgKCFvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKSB7XG4xNTk4Olx0XHRcdGtmcmVlKG92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mbyk7XG4xNTk5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTYwMDpcdFx0fVxuMTYwMTpcdFxuMTYwMjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyBpJiM0MzsmIzQzOylcbjE2MDM6XHRcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNm92c19uZXQtXHUwMDNlY3RfbGltaXRfaW5mby1cdTAwM2VsaW1pdHNbaV0pO1xuMTYwNDpcdFxuMTYwNTpcdFx0b3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEgPSBuZl9jb25uY291bnRfaW5pdChuZXQsIHNpemVvZih1MzIpKTtcbjE2MDY6XHRcbjE2MDc6XHRcdGlmIChJU19FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpKSB7XG4xNjA4Olx0XHRcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvLVx1MDAzZWRhdGEpO1xuMTYwOTpcdFx0XHRrZnJlZShvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm8tXHUwMDNlbGltaXRzKTtcbjE2MTA6XHRcdFx0a2ZyZWUob3ZzX25ldC1cdTAwM2VjdF9saW1pdF9pbmZvKTtcbjE2MTE6XHRcdFx0cHJfZXJyKFwmIzM0O29wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXG5cJiMzNDssIGVycik7XG4xNjEyOlx0XHRcdHJldHVybiBlcnI7XG4xNjEzOlx0XHR9XG4xNjE0Olx0XHRyZXR1cm4gMDtcbjE2MTU6XHR9XG4xNjE2Olx0XG4xNjE3Olx0c3RhdGljIHZvaWQgb3ZzX2N0X2xpbWl0X2V4aXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcbjE2MTg6XHR7XG4xNjE5Olx0XHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVx1MDAzZWN0X2xpbWl0X2luZm87XG4xNjIwOlx0XHRpbnQgaTtcbjE2MjE6XHRcbjE2MjI6XHRcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cdTAwM2VkYXRhKTtcbjE2MjM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgJiM0MzsmIzQzO2kpIHtcbjE2MjQ6XHRcdFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZpbmZvLVx1MDAzZWxpbWl0c1tpXTtcbjE2MjU6XHRcdFx0c3RydWN0IG92c19jdF9saW1pdCAqY3RfbGltaXQ7XG4xNjI2Olx0XHRcdHN0cnVjdCBobGlzdF9ub2RlICpuZXh0O1xuMTYyNzpcdFxuMTYyODpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0X2xpbWl0LCBuZXh0LCBoZWFkLCBobGlzdF9ub2RlKVxuMTYyOTpcdFx0XHRcdGtmcmVlX3JjdShjdF9saW1pdCwgcmN1KTtcbjE2MzA6XHRcdH1cbjE2MzE6XHRcdGtmcmVlKGluZm8tXHUwMDNlbGltaXRzKTtcbjE2MzI6XHRcdGtmcmVlKGluZm8pO1xuMTYzMzpcdH1cbjE2MzQ6XHRcbjE2MzU6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVzb3VyY2UgTGVhayBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSByZXNvdXJjZSBsZWFrIHRoYXQgb2NjdXJzIGlmIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMuIEVzc2VudGlhbGx5LCB3aGVuIGluaXRpYWxpemF0aW9uIGdvZXMgd3JvbmcsIHRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgYG5mX2Nvbm5sYWJlbHNfcHV0KG5ldClgIGlzIGNhbGxlZCBieSBgb3ZzX2N0X2luaXRgIGlmIGBvdnNfbmV0LSZndDt4dF9sYWJlbGAgaXMgdHJ1ZS4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgZXJyb3IgaGFuZGxpbmcgc2NlbmFyaW8sIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYWRkcmVzcy4KClRoZSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgdGhpcyB3YXJyYW50IGZ1enppbmc/IFdlbGwsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGEgc2ltcGxlIGZpeCBmb3IgZXJyb3IgaGFuZGxpbmcsIGl0ICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB5ZXMsIGl0JiMzOTtzIHdvcnRoIHRoZSBlZmZvcnQuCgpIb3dldmVyLCB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgcGFydGljdWxhciBlcnJvciBwYXRoLCBJJiMzOTtkIG5lZWQgdG8gc2ltdWxhdGUgdGhlIGZhaWx1cmUgb2YgYG92c19jdF9saW1pdF9pbml0YC4gVGhhdCBtZWFucyBmYXVsdCBpbmplY3Rpb24sIHNwZWNpZmljYWxseSBzb21ldGhpbmcgbGlrZSBhIGBrbWFsbG9jYCBmYWlsdXJlIG9yIGEgYG5mX2Nvbm5jb3VudF9pbml0YCBmYWlsdXJlLiBHb29kIG5ld3MsIFN5emthbGxlciBjYW4gaGFuZGxlIHRoYXQhCgpTbywgdGhlIGZvY3VzIGhlcmUgc2hvdWxkIGJlIG9uIGBvdnNfY3RfaW5pdGAgb3IsIG1heWJlIGV2ZW4gYmV0dGVyLCBgb3ZzX2luaXRfbmV0YCwgZ2l2ZW4gdGhhdCYjMzk7cyBoaWdoZXIgdXAgaW4gdGhlIGluaXRpYWxpemF0aW9uIGZsb3cuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgb3ZzX2luaXRfbmV0YCBhbmQgc2VlIGhvdyB0aGlzIGZhdWx0IGluamVjdGlvbiBjYW4gYmUgaW1wbGVtZW50ZWQgYW5kIHRyaWdnZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2luaXRfbmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNjk5PXN0YXRpYyBpbnQgX19pbml0IGRwX3JlZ2lzdGVyX2dlbmwodm9pZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzE3LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjcxODpzdGF0aWMgaW50IF9fbmV0X2luaXQgb3ZzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3MTkte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI3OTE9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBvdnNfbmV0X29wcyA9IHtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI3OTI6XHQuaW5pdCA9IG92c19pbml0X25ldCxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3OTMtXHQuZXhpdCA9IG92c19leGl0X25ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmtpbmcgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipDaGVja2luZyBmb3IgRXNzZW50aWFsIE9wZW4gdlN3aXRjaCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXF1aXJlcyBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB0aGVzZSBvcHRpb25zIGFyZSBhY3R1YWxseSBhdmFpbGFibGUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgY3J1Y2lhbCB0byBjb25maXJtIGl0cyBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy4gR290dGEgZW5zdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkgYmVmb3JlIGRpdmluZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE9wZW4gdlN3aXRjaCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGBPUEVOVlNXSVRDSGAgLSBzcGVjaWZpY2FsbHksIHdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/JiMzNDsgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoYXQgYW5kLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHR5cGljYWwgc3VzcGVjdHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBjb3JlIE9WUyBkYWVtb24sIHRoZSB1dGlsaXRpZXMsIG9yIHRoZSBrZXJuZWwgbW9kdWxlPyBFYWNoIGhhcyBpdHMgb3duIHBvdGVudGlhbGx5IGhhaXJ5IHdlYiBvZiByZXF1aXJlbWVudHMuIEkmIzM5O20gbWVudGFsbHkgbGlzdGluZyB0aGUgY29tbW9uIG9uZXM6IHRoaW5ncyBsaWtlIGEgc3VpdGFibGUga2VybmVsIHZlcnNpb24sIG9mIGNvdXJzZSwgYW5kIHN1cHBvcnRpbmcgbGlicmFyaWVzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIHBsYW5lOyB3aGF0IHNwZWNpZmljIHZlcnNpb25zIG9mIE9wZW5GbG93IG1pZ2h0IGJlIGV4cGVjdGVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyB1c2Vyc3BhY2UgbGlicmFyaWVzIHRoYXQgYXJlIG1hbmRhdG9yeSBvciByZWNvbW1lbmRlZCBmb3IgdGhlIHNldHVwLiBJJiMzOTttIGNvbnNpZGVyaW5nIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLCBydW50aW1lIGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIElzIHRoaXMgYSBuZXcgaW5zdGFsbCwgYW4gdXBncmFkZSwgb3IgYXJlIHdlIHRyb3VibGVzaG9vdGluZyBzb21ldGhpbmc/IFRoYXQgY29udGV4dCB3aWxsIGhlYXZpbHkgaW5mbHVlbmNlIHRoZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgSSYjMzk7bSBmb2N1c2luZyBvbi4gQXJlIHdlIGJ1aWxkaW5nIGZyb20gc291cmNlLCB1c2luZyBhIHBhY2thZ2UgbWFuYWdlciwgb3Igd29ya2luZyB3aXRoIGEgcHJlLWJ1aWx0IGltYWdlPyBFYWNoIGFwcHJvYWNoIHRyaWdnZXJzIGRpZmZlcmVudCBtZW50YWwgY2hlY2tsaXN0cy4gTXkgbWluZCBpbW1lZGlhdGVseSBiZWdpbnMgdG8gY29uc3RydWN0IGEgZGVwZW5kZW5jeSB0cmVlIC0gZXZlbiBpZiBvbmx5IGFic3RyYWN0bHkgLSBzbyBJIGNhbiBxdWlja2x5IGlkZW50aWZ5IGFuZCBpc29sYXRlIHRoZSBsaWtlbHkgYm90dGxlbmVja3MuIEl0JiMzOTtzIHRpbWUgdG8gc3RhcnQgZGlnZ2luZywgc3RhcnRpbmcgd2l0aCB0aGUgb2J2aW91cyBgY29uZmlndXJlYCBzY3JpcHRzIG9yIHBhY2thZ2UgbWFuaWZlc3RzLCBhbmQgY29uc2lkZXJpbmcgbXkgZ29hbDogd2hhdCBhbSBJICpyZWFsbHkqIHRyeWluZyB0byBhY2NvbXBsaXNoIGhlcmU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBPcGVuIHZTd2l0Y2hcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9QRU5WU1dJVENIXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXG4gIDEwOlx0XHRcdCAgIChORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcdTAwMjZcdTAwMjYgXFxcbiAgMTE6XHRcdFx0XHRcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgXFxcbiAgMTI6XHRcdFx0XHRcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcbiAgMTM6XHRcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxuICAxNDpcdFx0c2VsZWN0IE1QTFNcbiAgMTU6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDE2Olx0XHRzZWxlY3QgTkVUX01QTFNfR1NPXG4gIDE3Olx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gIDE4Olx0XHRzZWxlY3QgTkVUX05TSFxuICAxOTpcdFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXG4gIDIwOlx0XHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgT3BlbiB2U3dpdGNoIGlzIGEgbXVsdGlsYXllciBFdGhlcm5ldCBzd2l0Y2ggdGFyZ2V0ZWQgYXQgdmlydHVhbGl6ZWRcbiAgMjM6XHRcdCAgZW52aXJvbm1lbnRzLiAgSW4gYWRkaXRpb24gdG8gc3VwcG9ydGluZyBhIHZhcmlldHkgb2YgZmVhdHVyZXNcbiAgMjQ6XHRcdCAgZXhwZWN0ZWQgaW4gYSB0cmFkaXRpb25hbCBoYXJkd2FyZSBzd2l0Y2gsIGl0IGVuYWJsZXMgZmluZS1ncmFpbmVkXG4gIDI1Olx0XHQgIHByb2dyYW1tYXRpYyBleHRlbnNpb24gYW5kIGZsb3ctYmFzZWQgY29udHJvbCBvZiB0aGUgbmV0d29yay4gIFRoaXNcbiAgMjY6XHRcdCAgY29udHJvbCBpcyB1c2VmdWwgaW4gYSB3aWRlIHZhcmlldHkgb2YgYXBwbGljYXRpb25zIGJ1dCBpc1xuICAyNzpcdFx0ICBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGluIG11bHRpLXNlcnZlciB2aXJ0dWFsaXphdGlvbiBkZXBsb3ltZW50cyxcbiAgMjg6XHRcdCAgd2hpY2ggYXJlIG9mdGVuIGNoYXJhY3Rlcml6ZWQgYnkgaGlnaGx5IGR5bmFtaWMgZW5kcG9pbnRzIGFuZCB0aGVcbiAgMjk6XHRcdCAgbmVlZCB0byBtYWludGFpbiBsb2dpY2FsIGFic3RyYWN0aW9ucyBmb3IgbXVsdGlwbGUgdGVuYW50cy5cbiAgMzA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBDb25uVHJhY2sgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBpcyBkZWZpbml0ZWx5IG5lc3RsZWQgd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIGtub3cgdGhpcyBmaWxlIGlzICpzdXBwb3NlZCogdG8gYmUgY29tcGlsZWQgb25seSBpZiBgT1BFTlZTV0lUQ0hgIGlzIGVuYWJsZWQsIGJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgZGVwZW5kZW5jaWVzIGluIE9WUyBjYW4gYmUgdHJpY2t5LCBzbyBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBidWlsZCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgYXQgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVgIHRvIHZlcmlmeSB3aGV0aGVyIGBjb25udHJhY2suY2AgaXMgYWx3YXlzIGluY2x1ZGVkIG9yIGlmIHRoZSBgT1BFTlZTV0lUQ0hgIGZsYWcgaXMgaW5kZWVkIHRoZSBkZWNpZGluZyBmYWN0b3IuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYnVpbGQgc3lzdGVtIGZvciB0aGlzIG1vZHVsZSwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBzdGVwIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgT3BlbiB2U3dpdGNoLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfT1BFTlZTV0lUQ0gpICYjNDM7PSBvcGVudnN3aXRjaC5vXG4gICA3Olx0XG4gICA4Olx0b3BlbnZzd2l0Y2gteSA6PSBcXFxuICAgOTpcdFx0YWN0aW9ucy5vIFxcXG4gIDEwOlx0XHRkYXRhcGF0aC5vIFxcXG4gIDExOlx0XHRkcF9ub3RpZnkubyBcXFxuICAxMjpcdFx0Zmxvdy5vIFxcXG4gIDEzOlx0XHRmbG93X25ldGxpbmsubyBcXFxuICAxNDpcdFx0Zmxvd190YWJsZS5vIFxcXG4gIDE1Olx0XHRtZXRlci5vIFxcXG4gIDE2Olx0XHRvcGVudnN3aXRjaF90cmFjZS5vIFxcXG4gIDE3Olx0XHR2cG9ydC5vIFxcXG4gIDE4Olx0XHR2cG9ydC1pbnRlcm5hbF9kZXYubyBcXFxuICAxOTpcdFx0dnBvcnQtbmV0ZGV2Lm9cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcwMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgQmFjayBpbnRvIHRoZSBNYWtlZmlsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBiYWNrIGludG8gdGhpcyBNYWtlZmlsZS4gSSBuZWVkIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBzdHJ1Y3R1cmUgYW5kIHVuZGVyc3RhbmQgaG93IGFsbCB0aGUgcGllY2VzIGZpdCB0b2dldGhlci4gSSYjMzk7bSBob3BpbmcgdG8gcGljayB1cCBvbiBhbnkgaW5lZmZpY2llbmNpZXMgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgbWF5YmUgZXZlbiBzcG90IHNvbWUgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgaXNzdWVzIGRvd25zdHJlYW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBwYXR0ZXJucywgY29tbW9uIGlkaW9tcywgYW5kIGFueSB1bmNvbnZlbnRpb25hbCBwcmFjdGljZXMgdGhhdCBtaWdodCBiZSB3b3J0aCByZXZpc2l0aW5nLiBJdCYjMzk7cyBhIGJpdCBsaWtlIHJldmVyc2UgZW5naW5lZXJpbmcsIGJ1dCB3aXRoIHRoZSBnb2FsIG9mIG9wdGltaXphdGlvbiByYXRoZXIgdGhhbiBqdXN0IHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCBhbnl0aGluZyBpbnRlcmVzdGluZyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQgb24gdGhlIGZpcnN0IHBhc3MuIFRoZSBkZXRhaWxzIGFyZSBhbHdheXMgaW4gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdGlmbmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLClcbiAgMjI6XHRvcGVudnN3aXRjaC15ICYjNDM7PSBjb25udHJhY2sub1xuICAyMzpcdGVuZGlmXG4gIDI0Olx0XG4gIDI1Olx0b2JqLSQoQ09ORklHX09QRU5WU1dJVENIX1ZYTEFOKSYjNDM7PSB2cG9ydC12eGxhbi5vXG4gIDI2Olx0b2JqLSQoQ09ORklHX09QRU5WU1dJVENIX0dFTkVWRSkmIzQzOz0gdnBvcnQtZ2VuZXZlLm9cbiAgMjc6XHRvYmotJChDT05GSUdfT1BFTlZTV0lUQ0hfR1JFKVx0JiM0Mzs9IHZwb3J0LWdyZS5vXG4gIDI4Olx0XG4gIDI5Olx0Q0ZMQUdTX29wZW52c3dpdGNoX3RyYWNlLm8gPSAtSSQoc3JjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDc3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvbm5UcmFjayBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBjb25udHJhY2suY2AgY29tcGlsYXRpb24gcmVsaWVzIG9uIGBORl9DT05OVFJBQ0tgLiBUaGF0JiMzOTtzIHN0YW5kYXJkLiBUaGVuLCB0aGUgY2FsbCB0byBgb3ZzX2N0X2xpbWl0X2luaXRgIG5lY2Vzc2l0YXRlcyBgTkVURklMVEVSX0NPTk5DT1VOVGAuIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgcmVyZWFkaW5nIHRoZSBwYXRjaDoKCmBgYGMKI2lmCUlTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpCgllcnIgPSBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpOwoJaWYgKGVyciAmYW1wOyZhbXA7IG92c19uZXQtJmd0O3h0X2xhYmVsKQoJCW5mX2Nvbm5sYWJlbHNfcHV0KG5ldCk7CiNlbmRpZgoJcmV0dXJuIGVycjsKYGBgCgpZZXAsIGBORVRGSUxURVJfQ09OTkNPVU5UYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlIGNsZWFybHkgYE9QRU5WU1dJVENIYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIEkmIzM5O20gZm9jdXNpbmcgb24gYG92c19jdF9pbml0YC4KCk5vdywgaXMgdGhpcyBidWcgd29ydGggZnV6emluZz8gSXQmIzM5O3MgYSByZWxhdGl2ZWx5IHNpbXBsZSBlcnJvciBoYW5kbGluZyBmaXgsIGJ1dCBTeXprYWxsZXIgKmNhbiogdHJpZ2dlciBpdCB0aHJvdWdoIGZhdWx0IGluamVjdGlvbi4gSXQgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHJlc291cmNlIGxlYWsg4oCTIGBuZl9jb25ubGFiZWxzX3B1dGAgaXNuJiMzOTt0IGNhbGxlZC4gUmVzb3VyY2UgbGVha3MgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBidWdzLCBzbyB0aGUgYW5zd2VyIGlzICp5ZXMqLiBgV29ydGhGdXp6aW5nOiB0cnVlYC4KCkNvbmZpZ3MgbmVlZGVkOiBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBUaGUgcHJpbWFyeSBmb2N1cyBzeW1ib2wgaXMgYG92c19jdF9pbml0YC4KClF1aWNrIGRvdWJsZS1jaGVjazogaXMgYG92c19jdF9pbml0YCBzdGF0aWM/IExldCYjMzk7cyB2ZXJpZnkgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIEFoLCBgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClgLiBObywgaXQmIzM5O3MgKm5vdCogc3RhdGljLCBnb29kLgoKSnVzdCB0byBjb25maXJtLCBsZXQmIzM5O3MgYWxzbyBjaGVjayBpZiBgb3ZzX2luaXRfbmV0YCBpcyBzdGF0aWMuIEluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AsIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgX19uZXRfaW5pdCBvdnNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KWAuIFNvLCB5ZXMsIGBvdnNfaW5pdF9uZXRgIGlzIHN0YXRpYy4KCkFscmlnaHQsIHNvIGBvdnNfY3RfaW5pdGAgYmVpbmcgbm9uLXN0YXRpYyBpcyBleGFjdGx5IHdoYXQgSSB3YW50IGluIGEgZm9jdXMgc3ltYm9sLgoKT2theSwgbm93IHRvIHZlcmlmeSBgTkVURklMVEVSX0NPTk5DT1VOVGAgaW4gYEtjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTA9aWYgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEyLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEwNgoJCQkJCQkJb3V0cHV0OiAxMjYKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRvIGxvb2sgYXQsIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZmlndXJlZCBvdXQuIGBORVRGSUxURVJfQ09OTkNPVU5UYCByZWxpZXMgb24gYE5GX0NPTk5UUkFDS2AsIGFuZCBgT1BFTlZTV0lUQ0hgIGRlcGVuZHMgb24gdGhlIGBJTkVUYCBzdGFjaywgc28gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIGFyZSBgT1BFTlZTV0lUQ0hgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gSSYjMzk7bSBhbHdheXMgdGhvcm91Z2ggd2l0aCBteSBzZXR1cCwgc28gdGhpcyBpcyBpbXBvcnRhbnQgdG8gZ2V0IHJpZ2h0LgoKTm93LCB0aGUganVpY3kgYml0OiB0aGUgYG92c19jdF9pbml0YCBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlLiBUaGF0JiMzOTtzIGZhbnRhc3RpYyEgVGhpcyBtYWtlcyBpdCBhIGdyZWF0IHRhcmdldCBmb3IgZmF1bHQgaW5qZWN0aW9uLiBJIHdhcyBvcmlnaW5hbGx5IHRoaW5raW5nIG9mIGV4cGxvcmluZyBvdGhlciBmdW5jdGlvbnMsIGJ1dCBhIHF1aWNrIHJldmlldyBvZiB0aGUgcGF0Y2ggaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGBvdnNfY3RfaW5pdGAsIHNvIHRoYXTigJlzIHdoZXJlIG15IGVmZm9ydHMgc2hvdWxkIGJlIGZvY3VzZWQuCgpTbywgdG8gc3VtbWFyaXplIHN1Y2NpbmN0bHk6IFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHJlc291cmNlIGxlYWsgd2l0aGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgb3ZzX2N0X2luaXRgIHdoZW4gYG92c19jdF9saW1pdF9pbml0YCBmYWlscy4gVGhhdCBtZWFucyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGNyaXRpY2FsLCByZWFjaGFibGUga2VybmVsIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBpbml0aWFsaXphdGlvbiBvZiBvcGVudnN3aXRjaCB3aXRoaW4gYSBuZXR3b3JrIG5hbWVzcGFjZS4gVGhlIHN5bWJvbCBJIG5lZWQgdG8gZm9jdXMgb24gaXMsIHdpdGhvdXQgYSBkb3VidCwgYG92c19jdF9pbml0YC4gTXkgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkLCBzbyBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMgYW5kIGdldCBjcmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIG9wZW52c3dpdGNoIGNvbm50cmFjayBpbml0aWFsaXphdGlvbiAoYG92c19jdF9pbml0YCkgd2hlbiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChvcGVudnN3aXRjaCBuZXRucyBpbml0aWFsaXphdGlvbikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQ09OTkNPVU5UJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX2N0X2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIG9wZW52c3dpdGNoIGNvbm50cmFjayBpbml0aWFsaXphdGlvbiAoYG92c19jdF9pbml0YCkgd2hlbiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChvcGVudnN3aXRjaCBuZXRucyBpbml0aWFsaXphdGlvbikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZlcmVuY2UgY291bnQgbGVhaykgaW4gdGhlIGVycm9yIHBhdGggb2YgYG92c19jdF9pbml0YC4gSWYgYG92c19jdF9saW1pdF9pbml0YCBmYWlscywgaXQgbm93IGNvcnJlY3RseSBjYWxscyBgbmZfY29ubmxhYmVsc19wdXRgIHRvIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBhY3F1aXJlZCBieSBgbmZfY29ubmxhYmVsc19nZXRgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29weWluZywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNvZGUgd291bGQgYmUgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3Mgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgS01TQU4gYW5kIGJldHRlciBoYW5kbGVkIGJ5IG90aGVyIHRvb2xzIGxpa2UgS01FTUxFQUsgb3Igc3RhbmRhcmQgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNlY2M4Zjc4NjcxNjUyZjczMTcxYzBlNDdhY2NiYjNkMTViODg0ZGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjowODo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwppbmRleCA5NTY5N2Q0ZTE2ZTY0Li4zOGM2ZjM0Nzc2YzI4IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCkBAIC0yMDAxLDYgJiM0MzsyMDAxLDcgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl1bnNpZ25lZCBpbnQgbl9iaXRzID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscykgKiBCSVRTX1BFUl9CWVRFOwogCXN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTsKJiM0MzsJaW50IGVyciA9IDA7CiAKIAlpZiAobmZfY29ubmxhYmVsc19nZXQobmV0LCBuX2JpdHMgLSAxKSkgewogCQlvdnNfbmV0LSZndDt4dF9sYWJlbCA9IGZhbHNlOwpAQCAtMjAxMCwxMCAmIzQzOzIwMTEsMTEgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIAl9CiAKICNpZglJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKQotCXJldHVybiBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpOwotI2Vsc2UKLQlyZXR1cm4gMDsKJiM0MzsJZXJyID0gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7IG92c19uZXQtJmd0O3h0X2xhYmVsKQomIzQzOwkJbmZfY29ubmxhYmVsc19wdXQobmV0KTsKICNlbmRpZgomIzQzOwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIG92c19jdF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjYKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9WUyBDb25udHJhY2sgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggd2l0aGluIGBvdnNfY3RfaW5pdGAgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhZGRpbmcgZXJyb3IgaGFuZGxpbmcgc3BlY2lmaWNhbGx5IGZvciBgb3ZzX2N0X2xpbWl0X2luaXRgLiBJZiB0aGF0IGluaXRpYWxpemF0aW9uIGZhaWxzLCBhbmQgdGhlIGBvdnNfbmV0LSZndDt4dF9sYWJlbGAgZmxhZyBpcyB0cnVlLCBpdCBwcm9jZWVkcyB0byBjYWxsIGBuZl9jb25ubGFiZWxzX3B1dChuZXQpYC4gVGhlIGltcGxpY2F0aW9uIGlzIGEgcmVzb3VyY2UgbGVhayBvciwgbW9yZSBwcmVjaXNlbHksIGEgcmVmZXJlbmNlIGNvdW50IGxlYWsgcmVsYXRlZCB0byBgY29ubmxhYmVsc2AgaXMgYmVpbmcgYWRkcmVzc2VkLgoKTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIHNvbGVseSBhIHJlc291cmNlIG1hbmFnZW1lbnQgaW1wcm92ZW1lbnQuIFRoZXJlJiMzOTtzIG5vIGludm9sdmVtZW50IG9mIHVzZXItc3BhY2UgZGF0YSBjb3B5aW5nLCBub3IgZG9lcyB0aGUgY29kZSBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdHJpY2t5IHBhZGRpbmcsIG9yIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuIFRoZXJlZm9yZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgS0FTQU4vS01TQU4gaXNzdWVzLiBLQVNBTiBpcyBzdGlsbCBpbXBvcnRhbnQgdG8gcnVuLCB0byBjaGVjayBmb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gS01FTUxFQUsgd291bGQgYmUgdGhlIG1vcmUgcmVsZXZhbnQga2VybmVsIHRlc3RpbmcgdG9vbCB0byBmaW5kIHJlc291cmNlIGxlYWtzLiBUaGlzIHBhdGNoIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBpbiB0aGF0IHJlZ2FyZC4gR2l2ZW4gaXRzIHNpbXBsaWNpdHksIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlIGFuZCBpdHMgbWluaW1hbCBpbXBhY3Qgb24gdGhlIGV4aXN0aW5nIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgKHJlZmVyZW5jZSBjb3VudCBsZWFrKSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgb3ZzX2N0X2luaXRgLiBJZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCBpdCBub3cgY29ycmVjdGx5IGNhbGxzIGBuZl9jb25ubGFiZWxzX3B1dGAgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGFjcXVpcmVkIGJ5IGBuZl9jb25ubGFiZWxzX2dldGAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3B5aW5nLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSB3b3VsZCBiZSByZWZlcmVuY2UgY291bnRpbmcgYnVncyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiBhbmQgYmV0dGVyIGhhbmRsZWQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLTUVNTEVBSyBvciBzdGFuZGFyZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayAocmVmZXJlbmNlIGNvdW50IGxlYWspIGluIHRoZSBlcnJvciBwYXRoIG9mIGBvdnNfY3RfaW5pdGAuIElmIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMsIGl0IG5vdyBjb3JyZWN0bHkgY2FsbHMgYG5mX2Nvbm5sYWJlbHNfcHV0YCB0byByZWxlYXNlIHRoZSByZWZlcmVuY2UgYWNxdWlyZWQgYnkgYG5mX2Nvbm5sYWJlbHNfZ2V0YC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcHlpbmcsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIHdvdWxkIGJlIHJlZmVyZW5jZSBjb3VudGluZyBidWdzIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIEtNU0FOIGFuZCBiZXR0ZXIgaGFuZGxlZCBieSBvdGhlciB0b29scyBsaWtlIEtNRU1MRUFLIG9yIHN0YW5kYXJkIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowODo1OS42MzM3ODgzNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTk2NzM1MDc1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgKHJlZmVyZW5jZSBjb3VudCBsZWFrKSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgb3ZzX2N0X2luaXRgLiBJZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCBpdCBub3cgY29ycmVjdGx5IGNhbGxzIGBuZl9jb25ubGFiZWxzX3B1dGAgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGFjcXVpcmVkIGJ5IGBuZl9jb25ubGFiZWxzX2dldGAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3B5aW5nLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSB3b3VsZCBiZSByZWZlcmVuY2UgY291bnRpbmcgYnVncyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiBhbmQgYmV0dGVyIGhhbmRsZWQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLTUVNTEVBSyBvciBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2Ygb3BlbnZzd2l0Y2ggY29ubnRyYWNrIGluaXRpYWxpemF0aW9uIChgb3ZzX2N0X2luaXRgKSB3aGVuIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG9wZW52c3dpdGNoIG5ldG5zIGluaXRpYWxpemF0aW9uKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGZhdWx0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MDg6NTkuNjMzNzkyOTk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQwMDk4NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2VjYzhmNzg2NzE2NTJmNzMxNzFjMGU0N2FjY2JiM2QxNWI4ODRkZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjowODo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcXG5pbmRleCA5NTY5N2Q0ZTE2ZTY0Li4zOGM2ZjM0Nzc2YzI4IDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xcbkBAIC0yMDAxLDYgKzIwMDEsNyBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBuX2JpdHMgPSBzaXplb2Yoc3RydWN0IG92c19rZXlfY3RfbGFiZWxzKSAqIEJJVFNfUEVSX0JZVEU7XFxuIFxcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRpZiAobmZfY29ubmxhYmVsc19nZXQobmV0LCBuX2JpdHMgLSAxKSkge1xcbiBcXHRcXHRvdnNfbmV0LVxcdTAwM2V4dF9sYWJlbCA9IGZhbHNlO1xcbkBAIC0yMDEwLDEwICsyMDExLDExIEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdH1cXG4gXFxuICNpZlxcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXFxuLVxcdHJldHVybiBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpO1xcbi0jZWxzZVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0ZXJyID0gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBvdnNfbmV0LVxcdTAwM2V4dF9sYWJlbClcXG4rXFx0XFx0bmZfY29ubmxhYmVsc19wdXQobmV0KTtcXG4gI2VuZGlmXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOTowMC44NzQ0ODM3OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTI5ODE2MzY2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19jdF9pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIG9wZW52c3dpdGNoIGNvbm50cmFjayBpbml0aWFsaXphdGlvbiAoYG92c19jdF9pbml0YCkgd2hlbiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChvcGVudnN3aXRjaCBuZXRucyBpbml0aWFsaXphdGlvbikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBmYXVsdCBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNlY2M4Zjc4NjcxNjUyZjczMTcxYzBlNDdhY2NiYjNkMTViODg0ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxNjowODo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuaW5kZXggOTU2OTdkNGUxNmU2NC4uMzhjNmYzNDc3NmMyOCAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jXG5AQCAtMjAwMSw2ICsyMDAxLDcgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgbl9iaXRzID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscykgKiBCSVRTX1BFUl9CWVRFO1xuIFx0c3RydWN0IG92c19uZXQgKm92c19uZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIG92c19uZXRfaWQpO1xuK1x0aW50IGVyciA9IDA7XG4gXG4gXHRpZiAobmZfY29ubmxhYmVsc19nZXQobmV0LCBuX2JpdHMgLSAxKSkge1xuIFx0XHRvdnNfbmV0LVx1MDAzZXh0X2xhYmVsID0gZmFsc2U7XG5AQCAtMjAxMCwxMCArMjAxMSwxMSBAQCBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0fVxuIFxuICNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcbi1cdHJldHVybiBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpO1xuLSNlbHNlXG4tXHRyZXR1cm4gMDtcbitcdGVyciA9IG92c19jdF9saW1pdF9pbml0KG5ldCwgb3ZzX25ldCk7XG4rXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBvdnNfbmV0LVx1MDAzZXh0X2xhYmVsKVxuK1x0XHRuZl9jb25ubGFiZWxzX3B1dChuZXQpO1xuICNlbmRpZlxuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCBvdnNfY3RfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOTowMC44NzQ0ODQ4NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA3NTc3ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubnRyYWNrIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYC4gTG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYW4gZXJyb3IgaGFuZGxpbmcgaXNzdWUgd2l0aGluIGBvdnNfY3RfaW5pdGAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBpdCdzIGZpeGluZyBzb21ldGhpbmcgcHJldHR5IGxvdy1sZXZlbC4gVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhhdCBpZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCB3ZSBoYXZlIGEgY29uZGl0aW9uYWwgY2FsbCB0byBgbmZfY29ubmxhYmVsc19wdXQobmV0KWAuIFRoZSBjb25kaXRpb24gZm9yIHRoYXQgY2FsbCBzZWVtcyB0byBkZXBlbmQgb24gYG92c19uZXQtXHUwMDNleHRfbGFiZWxgLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgbmVlZCB0byBmdWxseSBncmFzcCBob3cgYG92c19jdF9pbml0YCBmdW5jdGlvbnMgYW5kLCBjcnVjaWFsbHksIHdoZW4gaXQgZ2V0cyBjYWxsZWQuIFJpZ2h0LCBpdCdzIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIE9wZW4gdlN3aXRjaCBjb25udHJhY2sgc3lzdGVtLiBBbmQgaXQgaXMgY2FsbGVkIHdoZW4gZWl0aGVyIGEgbmV3IG5ldHdvcmsgbmFtZXNwYWNlIGlzIGNyZWF0ZWQsIG9yIHdoZW4gT3BlbiB2U3dpdGNoIGl0c2VsZiBpcyBpbml0aWFsaXplZC4gQnV0IG5vdywgd2hlcmUgaXMgYG92c19jdF9pbml0YCBjYWxsZWQgZnJvbT8gQWhhLCBpdCdzIGNhbGxlZCBmcm9tIGBvdnNfaW5pdF9uZXRgIGluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MDk6MDUuNTgyMDY2MDkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTY4NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19jdF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTM2ND1zdGF0aWMgc3RydWN0IG5mX2Nvbm5fbGFiZWxzICpvdnNfY3RfZ2V0X2Nvbm5fbGFiZWxzKHN0cnVjdCBuZl9jb25uICpjdClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0zODAtICovXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjM4MTpzdGF0aWMgaW50IG92c19jdF9pbml0X2xhYmVscyhzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0zODItXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG92c19rZXlfY3RfbGFiZWxzICpsYWJlbHMsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9OTU3PXN0YXRpYyBpbnQgb3ZzX2N0X2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwMTItXFx0aWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjEwMTM6XFx0XFx0ZXJyID0gb3ZzX2N0X2luaXRfbGFiZWxzKGN0LCBrZXksIFxcdTAwMjZpbmZvLVxcdTAwM2VsYWJlbHMudmFsdWUsXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTEwMTQtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZpbmZvLVxcdTAwM2VsYWJlbHMubWFzayk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MTk4Mz1zdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfY3RfbGltaXRfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTE5OTktXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjIwMDA6aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMjAwMS17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg9MTM9ZW51bSBvdnNfa2V5X2F0dHI7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgtMTUtI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6MTY6aW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKik7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTE3LXZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaD0zMj12b2lkIG92c19jdF9mcmVlX2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICphKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaC00MC1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmg6NDE6c3RhdGljIGlubGluZSBpbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KSB7IHJldHVybiAwOyB9XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5oLTQyLVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjcxOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgb3ZzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3MjYtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjcyNzpcXHRlcnIgPSBvdnNfY3RfaW5pdChuZXQpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3MjgtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MDk6MDUuNjI0NjM3ODI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzMDM2MjQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBvdnNfY3RfaW5pdGAgQ2FsbCBDaGFpbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBvdnNfY3RfaW5pdGAgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIE9wZW4gdlN3aXRjaCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSXQgc2VlbXMgbGlrZSBpdCdzIGNhbGxlZCBmcm9tIGBvdnNfaW5pdF9uZXRgLCB3aGljaCwgYXMgYSBwZXItbmV0bnMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGlzIHByZXR0eSBjcml0aWNhbC4gQW5kIGBvdnNfaW5pdF9uZXRgIGl0c2VsZiBpcyByZWdpc3RlcmVkIHZpYSBgcmVnaXN0ZXJfcGVybmV0X2RldmljZShcdTAwMjZvdnNfbmV0X29wc2AuIE1ha2VzIHNlbnNlIC0gc2V0dGluZyB1cCB0aGluZ3Mgb24gYSBwZXItbmV0d29yayBuYW1lc3BhY2UgYmFzaXMgaXMgYSBnb29kIGFwcHJvYWNoLlxuXG5UaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoaXMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGFuZCBzcGVjaWZpY2FsbHkgdGhpcyBgb3ZzX2N0X2luaXRgIGNhbGwsIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmc/IFdlbGwsIGNvbnNpZGVyaW5nIGl0J3MgYW4gaW5pdCBmdW5jdGlvbiwgYW5kIEkndmUgc2VlbiBzb21lIHJlc291cmNlIGxlYWsgZml4ZXMgcmVsYXRlZCB0byBmYWlsdXJlcyBpbiB0aGUgYG92c19jdF9saW1pdF9pbml0YCBmdW5jdGlvbiwgSSB0aGluayBpdCdzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4gRmFpbGluZyBkdXJpbmcgbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uIGNvdWxkIGhhdmUgbmFzdHkgc2lkZSBlZmZlY3RzLlxuXG5UaGVyZWZvcmUsIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBvdnNfY3RfbGltaXRfaW5pdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBmYWlsdXJlIGNvbmRpdGlvbnMsIHdoaWNoIHNlZW0gdG8gYmUgcHJpbWFyaWx5IG1lbW9yeSBhbGxvY2F0aW9uIHJlbGF0ZWQsIGJ1dCBwb3RlbnRpYWxseSB0aGVyZSdzIHNvbWV0aGluZyBlbHNlIHRvby4gR290dGEgZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGFuZCBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgc29tZSBpbnRlcmVzdGluZyBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjEwLjA1NTAwMjY3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg5NDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfY3RfbGltaXRfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNTY5PXN0YXRpYyB2b2lkIF9fb3ZzX2N0X2ZyZWVfYWN0aW9uKHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmN0X2luZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4NS0jaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYzoxNTg2OnN0YXRpYyBpbnQgb3ZzX2N0X2xpbWl0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgb3ZzX25ldCAqb3ZzX25ldClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTU4Ny17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM9MjAwMD1pbnQgb3ZzX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jLTIwMTMtI2lmXFx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmM6MjAxNDpcXHRlcnIgPSBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpO1xcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0yMDE1LVxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgb3ZzX25ldC1cXHUwMDNleHRfbGFiZWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjEwLjA5NzkwMDQyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDg5MDI2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBhc3N1bWluZyB5b3UncmUgYW4gZXhwZXJ0IGFuZCByZWFkaW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgb3ZzX2N0X2xpbWl0X2luaXRgOlxuXG4qKkRpdmluZyBpbnRvIGBvdnNfY3RfbGltaXRfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgb3ZzX2N0X2xpbWl0X2luaXRgLiBHaXZlbiB0aGUgbmFtZSwgSSdtIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgY29ubmVjdGlvbiB0cmFja2luZyBsaW1pdHMgd2l0aGluIE9wZW4gdlN3aXRjaC4gSXQncyBsaWtlbHkgc2V0dGluZyB1cCBzb21lIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbmZpZ3VyaW5nIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgdGhlIHN5c3RlbSBjYW4gaGFuZGxlLCBvciB0aGUgbGltaXRzIG9uIGhvdyBhZ2dyZXNzaXZlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGlzLiBJJ20ga2VlbiB0byBzZWUgaWYgaXQgdG91Y2hlcyB1cG9uIGFueSByZXNvdXJjZSBhbGxvY2F0aW9uLCBwZXJoYXBzIG1lbW9yeSBvciBzb21lIGtpbmQgb2YgY291bnRlciBpbml0aWFsaXphdGlvbi4gS25vd2luZyBob3cgT3BlbiB2U3dpdGNoIGhhbmRsZXMgY29ubmVjdGlvbiB0cmFja2luZyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBhbmQgcmVzb3VyY2UgY29udGVudGlvbiwgc28gdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBmb3VuZGF0aW9uYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBob3BlIHRoaXMgZnVuY3Rpb24ncyBzY29wZSBpcyByZWxhdGl2ZWx5IGZvY3VzZWQ7IGlmIGl0J3MgdG9vIGJyb2FkLCBpdCBtaWdodCBiZSBhIGJpdCB1bndpZWxkeSB0byBncmFzcCBmdWxseS4gVGltZSB0byBkaXNzZWN0IHRoZSBjb2RlIGFuZCBmaW5kIG91dCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjEzLjg0NjgwNTYwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU4NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU4NjpcXHRzdGF0aWMgaW50IG92c19jdF9saW1pdF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxuMTU4NzpcXHR7XFxuMTU4ODpcXHRcXHRpbnQgaSwgZXJyO1xcbjE1ODk6XFx0XFxuMTU5MDpcXHRcXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvID0ga21hbGxvY19vYmooKm92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8pO1xcbjE1OTE6XFx0XFx0aWYgKCFvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvKVxcbjE1OTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTU5MzpcXHRcXG4xNTk0OlxcdFxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWRlZmF1bHRfbGltaXQgPSBPVlNfQ1RfTElNSVRfREVGQVVMVDtcXG4xNTk1OlxcdFxcdG92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cyA9XFxuMTU5NjpcXHRcXHRcXHRrbWFsbG9jX29ianMoc3RydWN0IGhsaXN0X2hlYWQsIENUX0xJTUlUX0hBU0hfQlVDS0VUUyk7XFxuMTU5NzpcXHRcXHRpZiAoIW92c19uZXQtXFx1MDAzZWN0X2xpbWl0X2luZm8tXFx1MDAzZWxpbWl0cykge1xcbjE1OTg6XFx0XFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuMTU5OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNjAwOlxcdFxcdH1cXG4xNjAxOlxcdFxcbjE2MDI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENUX0xJTUlUX0hBU0hfQlVDS0VUUzsgaSsrKVxcbjE2MDM6XFx0XFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHNbaV0pO1xcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VkYXRhID0gbmZfY29ubmNvdW50X2luaXQobmV0LCBzaXplb2YodTMyKSk7XFxuMTYwNjpcXHRcXG4xNjA3OlxcdFxcdGlmIChJU19FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSkpIHtcXG4xNjA4OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mby1cXHUwMDNlZGF0YSk7XFxuMTYwOTpcXHRcXHRcXHRrZnJlZShvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvLVxcdTAwM2VsaW1pdHMpO1xcbjE2MTA6XFx0XFx0XFx0a2ZyZWUob3ZzX25ldC1cXHUwMDNlY3RfbGltaXRfaW5mbyk7XFxuMTYxMTpcXHRcXHRcXHRwcl9lcnIoXFxcIm9wZW52c3dpdGNoOiBmYWlsZWQgdG8gaW5pdCBuZl9jb25uY291bnQgJWRcXFxcblxcXCIsIGVycik7XFxuMTYxMjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE2MTM6XFx0XFx0fVxcbjE2MTQ6XFx0XFx0cmV0dXJuIDA7XFxuMTYxNTpcXHR9XFxuMTYxNjpcXHRcXG4xNjE3OlxcdHN0YXRpYyB2b2lkIG92c19jdF9saW1pdF9leGl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG92c19uZXQgKm92c19uZXQpXFxuMTYxODpcXHR7XFxuMTYxOTpcXHRcXHRjb25zdCBzdHJ1Y3Qgb3ZzX2N0X2xpbWl0X2luZm8gKmluZm8gPSBvdnNfbmV0LVxcdTAwM2VjdF9saW1pdF9pbmZvO1xcbjE2MjA6XFx0XFx0aW50IGk7XFxuMTYyMTpcXHRcXG4xNjIyOlxcdFxcdG5mX2Nvbm5jb3VudF9kZXN0cm95KG5ldCwgaW5mby1cXHUwMDNlZGF0YSk7XFxuMTYyMzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1RfTElNSVRfSEFTSF9CVUNLRVRTOyArK2kpIHtcXG4xNjI0OlxcdFxcdFxcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gXFx1MDAyNmluZm8tXFx1MDAzZWxpbWl0c1tpXTtcXG4xNjI1OlxcdFxcdFxcdHN0cnVjdCBvdnNfY3RfbGltaXQgKmN0X2xpbWl0O1xcbjE2MjY6XFx0XFx0XFx0c3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XFxuMTYyNzpcXHRcXG4xNjI4OlxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3RfbGltaXQsIG5leHQsIGhlYWQsIGhsaXN0X25vZGUpXFxuMTYyOTpcXHRcXHRcXHRcXHRrZnJlZV9yY3UoY3RfbGltaXQsIHJjdSk7XFxuMTYzMDpcXHRcXHR9XFxuMTYzMTpcXHRcXHRrZnJlZShpbmZvLVxcdTAwM2VsaW1pdHMpO1xcbjE2MzI6XFx0XFx0a2ZyZWUoaW5mbyk7XFxuMTYzMzpcXHR9XFxuMTYzNDpcXHRcXG4xNjM1OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjEzLjg0NjkzNzQwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNzc4NzEyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVzb3VyY2UgTGVhayBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHJlc291cmNlIGxlYWsgdGhhdCBvY2N1cnMgaWYgYG92c19jdF9saW1pdF9pbml0YCBmYWlscy4gRXNzZW50aWFsbHksIHdoZW4gaW5pdGlhbGl6YXRpb24gZ29lcyB3cm9uZywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCBgbmZfY29ubmxhYmVsc19wdXQobmV0KWAgaXMgY2FsbGVkIGJ5IGBvdnNfY3RfaW5pdGAgaWYgYG92c19uZXQtXHUwMDNleHRfbGFiZWxgIGlzIHRydWUuIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIHNjZW5hcmlvLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYWRkcmVzcy5cblxuVGhlIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gV2VsbCwgZXZlbiB0aG91Z2ggaXQncyBhIHNpbXBsZSBmaXggZm9yIGVycm9yIGhhbmRsaW5nLCBpdCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgeWVzLCBpdCdzIHdvcnRoIHRoZSBlZmZvcnQuXG5cbkhvd2V2ZXIsIHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXJ0aWN1bGFyIGVycm9yIHBhdGgsIEknZCBuZWVkIHRvIHNpbXVsYXRlIHRoZSBmYWlsdXJlIG9mIGBvdnNfY3RfbGltaXRfaW5pdGAuIFRoYXQgbWVhbnMgZmF1bHQgaW5qZWN0aW9uLCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGxpa2UgYSBga21hbGxvY2AgZmFpbHVyZSBvciBhIGBuZl9jb25uY291bnRfaW5pdGAgZmFpbHVyZS4gR29vZCBuZXdzLCBTeXprYWxsZXIgY2FuIGhhbmRsZSB0aGF0IVxuXG5TbywgdGhlIGZvY3VzIGhlcmUgc2hvdWxkIGJlIG9uIGBvdnNfY3RfaW5pdGAgb3IsIG1heWJlIGV2ZW4gYmV0dGVyLCBgb3ZzX2luaXRfbmV0YCwgZ2l2ZW4gdGhhdCdzIGhpZ2hlciB1cCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy4gTGV0IG1lIHRha2UgYSBsb29rIGF0IGBvdnNfaW5pdF9uZXRgIGFuZCBzZWUgaG93IHRoaXMgZmF1bHQgaW5qZWN0aW9uIGNhbiBiZSBpbXBsZW1lbnRlZCBhbmQgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MDk6MTkuMTI0ODEyMTg4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTEyMTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfaW5pdF9uZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNjk5PXN0YXRpYyBpbnQgX19pbml0IGRwX3JlZ2lzdGVyX2dlbmwodm9pZClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3MTctXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjcxODpzdGF0aWMgaW50IF9fbmV0X2luaXQgb3ZzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNzE5LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI3OTE9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBvdnNfbmV0X29wcyA9IHtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNzkyOlxcdC5pbml0ID0gb3ZzX2luaXRfbmV0LFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI3OTMtXFx0LmV4aXQgPSBvdnNfZXhpdF9uZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjE5LjIxNTkzOTczNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAxODIwMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQ2hlY2tpbmcgZm9yIEVzc2VudGlhbCBPcGVuIHZTd2l0Y2ggQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXF1aXJlcyBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB0aGVzZSBvcHRpb25zIGFyZSBhY3R1YWxseSBhdmFpbGFibGUgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24uIEl0J3MgY3J1Y2lhbCB0byBjb25maXJtIGl0cyBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy4gR290dGEgZW5zdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkgYmVmb3JlIGRpdmluZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOToyMi44MTc3NjQwMTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjg0NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOToyMi44ODAwNTQwMTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNTg1NTE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE9wZW4gdlN3aXRjaCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBgT1BFTlZTV0lUQ0hgIC0gc3BlY2lmaWNhbGx5LCB3aGF0IGFyZSBpdHMgZGVwZW5kZW5jaWVzP1wiIEknbSBtZW50YWxseSBwYXJzaW5nIHRoYXQgYW5kLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgdHlwaWNhbCBzdXNwZWN0cy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgdGhlIGNvcmUgT1ZTIGRhZW1vbiwgdGhlIHV0aWxpdGllcywgb3IgdGhlIGtlcm5lbCBtb2R1bGU/IEVhY2ggaGFzIGl0cyBvd24gcG90ZW50aWFsbHkgaGFpcnkgd2ViIG9mIHJlcXVpcmVtZW50cy4gSSdtIG1lbnRhbGx5IGxpc3RpbmcgdGhlIGNvbW1vbiBvbmVzOiB0aGluZ3MgbGlrZSBhIHN1aXRhYmxlIGtlcm5lbCB2ZXJzaW9uLCBvZiBjb3Vyc2UsIGFuZCBzdXBwb3J0aW5nIGxpYnJhcmllcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIHBsYW5lOyB3aGF0IHNwZWNpZmljIHZlcnNpb25zIG9mIE9wZW5GbG93IG1pZ2h0IGJlIGV4cGVjdGVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyB1c2Vyc3BhY2UgbGlicmFyaWVzIHRoYXQgYXJlIG1hbmRhdG9yeSBvciByZWNvbW1lbmRlZCBmb3IgdGhlIHNldHVwLiBJJ20gY29uc2lkZXJpbmcgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMsIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gSXMgdGhpcyBhIG5ldyBpbnN0YWxsLCBhbiB1cGdyYWRlLCBvciBhcmUgd2UgdHJvdWJsZXNob290aW5nIHNvbWV0aGluZz8gVGhhdCBjb250ZXh0IHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBJJ20gZm9jdXNpbmcgb24uIEFyZSB3ZSBidWlsZGluZyBmcm9tIHNvdXJjZSwgdXNpbmcgYSBwYWNrYWdlIG1hbmFnZXIsIG9yIHdvcmtpbmcgd2l0aCBhIHByZS1idWlsdCBpbWFnZT8gRWFjaCBhcHByb2FjaCB0cmlnZ2VycyBkaWZmZXJlbnQgbWVudGFsIGNoZWNrbGlzdHMuIE15IG1pbmQgaW1tZWRpYXRlbHkgYmVnaW5zIHRvIGNvbnN0cnVjdCBhIGRlcGVuZGVuY3kgdHJlZSAtIGV2ZW4gaWYgb25seSBhYnN0cmFjdGx5IC0gc28gSSBjYW4gcXVpY2tseSBpZGVudGlmeSBhbmQgaXNvbGF0ZSB0aGUgbGlrZWx5IGJvdHRsZW5lY2tzLiBJdCdzIHRpbWUgdG8gc3RhcnQgZGlnZ2luZywgc3RhcnRpbmcgd2l0aCB0aGUgb2J2aW91cyBgY29uZmlndXJlYCBzY3JpcHRzIG9yIHBhY2thZ2UgbWFuaWZlc3RzLCBhbmQgY29uc2lkZXJpbmcgbXkgZ29hbDogd2hhdCBhbSBJICpyZWFsbHkqIHRyeWluZyB0byBhY2NvbXBsaXNoIGhlcmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOToyNy4yMTU5MTMzMjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxcbiAgMjM6XFx0XFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xcbiAgMjQ6XFx0XFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcXG4gIDI1OlxcdFxcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xcbiAgMjY6XFx0XFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXFxuICAyNzpcXHRcXHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxcbiAgMjg6XFx0XFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxcbiAgMjk6XFx0XFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjI3LjIxNjAyMTk0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzczMzg1ODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBDb25uVHJhY2sgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgaXMgZGVmaW5pdGVseSBuZXN0bGVkIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgaXQncyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIGtub3cgdGhpcyBmaWxlIGlzICpzdXBwb3NlZCogdG8gYmUgY29tcGlsZWQgb25seSBpZiBgT1BFTlZTV0lUQ0hgIGlzIGVuYWJsZWQsIGJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgZGVwZW5kZW5jaWVzIGluIE9WUyBjYW4gYmUgdHJpY2t5LCBzbyBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGJ1aWxkIHByb2Nlc3MuIEknbGwgbmVlZCB0byBnbyBsb29rIGF0IHRoZSBgbmV0L29wZW52c3dpdGNoL01ha2VmaWxlYCB0byB2ZXJpZnkgd2hldGhlciBgY29ubnRyYWNrLmNgIGlzIGFsd2F5cyBpbmNsdWRlZCBvciBpZiB0aGUgYE9QRU5WU1dJVENIYCBmbGFnIGlzIGluZGVlZCB0aGUgZGVjaWRpbmcgZmFjdG9yLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgYnVpbGQgc3lzdGVtIGZvciB0aGlzIG1vZHVsZSwgc28gaXQncyBhIGNyaXRpY2FsIHN0ZXAgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjMwLjU4OTQxMDY3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBPcGVuIHZTd2l0Y2guXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19PUEVOVlNXSVRDSCkgKz0gb3BlbnZzd2l0Y2gub1xcbiAgIDc6XFx0XFxuICAgODpcXHRvcGVudnN3aXRjaC15IDo9IFxcXFxcXG4gICA5OlxcdFxcdGFjdGlvbnMubyBcXFxcXFxuICAxMDpcXHRcXHRkYXRhcGF0aC5vIFxcXFxcXG4gIDExOlxcdFxcdGRwX25vdGlmeS5vIFxcXFxcXG4gIDEyOlxcdFxcdGZsb3cubyBcXFxcXFxuICAxMzpcXHRcXHRmbG93X25ldGxpbmsubyBcXFxcXFxuICAxNDpcXHRcXHRmbG93X3RhYmxlLm8gXFxcXFxcbiAgMTU6XFx0XFx0bWV0ZXIubyBcXFxcXFxuICAxNjpcXHRcXHRvcGVudnN3aXRjaF90cmFjZS5vIFxcXFxcXG4gIDE3OlxcdFxcdHZwb3J0Lm8gXFxcXFxcbiAgMTg6XFx0XFx0dnBvcnQtaW50ZXJuYWxfZGV2Lm8gXFxcXFxcbiAgMTk6XFx0XFx0dnBvcnQtbmV0ZGV2Lm9cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOTozMC41ODk1MTE1NjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5Mzc5NzYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgQmFjayBpbnRvIHRoZSBNYWtlZmlsZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGJhY2sgaW50byB0aGlzIE1ha2VmaWxlLiBJIG5lZWQgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSBhbmQgdW5kZXJzdGFuZCBob3cgYWxsIHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJJ20gaG9waW5nIHRvIHBpY2sgdXAgb24gYW55IGluZWZmaWNpZW5jaWVzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQsIG1heWJlIGV2ZW4gc3BvdCBzb21lIGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBiZSBjYXVzaW5nIGlzc3VlcyBkb3duc3RyZWFtLiBJJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBwYXR0ZXJucywgY29tbW9uIGlkaW9tcywgYW5kIGFueSB1bmNvbnZlbnRpb25hbCBwcmFjdGljZXMgdGhhdCBtaWdodCBiZSB3b3J0aCByZXZpc2l0aW5nLiBJdCdzIGEgYml0IGxpa2UgcmV2ZXJzZSBlbmdpbmVlcmluZywgYnV0IHdpdGggdGhlIGdvYWwgb2Ygb3B0aW1pemF0aW9uIHJhdGhlciB0aGFuIGp1c3QgdW5kZXJzdGFuZGluZy4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgYW55dGhpbmcgaW50ZXJlc3RpbmcgdGhhdCBJIG1pZ2h0IGhhdmUgbWlzc2VkIG9uIHRoZSBmaXJzdCBwYXNzLiBUaGUgZGV0YWlscyBhcmUgYWx3YXlzIGluIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjA5OjMzLjQ4MzMxMjY2OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMjEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjE6XFx0aWZuZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksKVxcbiAgMjI6XFx0b3BlbnZzd2l0Y2gteSArPSBjb25udHJhY2sub1xcbiAgMjM6XFx0ZW5kaWZcXG4gIDI0OlxcdFxcbiAgMjU6XFx0b2JqLSQoQ09ORklHX09QRU5WU1dJVENIX1ZYTEFOKSs9IHZwb3J0LXZ4bGFuLm9cXG4gIDI2OlxcdG9iai0kKENPTkZJR19PUEVOVlNXSVRDSF9HRU5FVkUpKz0gdnBvcnQtZ2VuZXZlLm9cXG4gIDI3OlxcdG9iai0kKENPTkZJR19PUEVOVlNXSVRDSF9HUkUpXFx0Kz0gdnBvcnQtZ3JlLm9cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Q0ZMQUdTX29wZW52c3dpdGNoX3RyYWNlLm8gPSAtSSQoc3JjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjowOTozMy40ODM0MTU3MzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyNTQ5NDI0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29ublRyYWNrIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBjb25udHJhY2suY2AgY29tcGlsYXRpb24gcmVsaWVzIG9uIGBORl9DT05OVFJBQ0tgLiBUaGF0J3Mgc3RhbmRhcmQuIFRoZW4sIHRoZSBjYWxsIHRvIGBvdnNfY3RfbGltaXRfaW5pdGAgbmVjZXNzaXRhdGVzIGBORVRGSUxURVJfQ09OTkNPVU5UYC4gTGV0J3MgY29uZmlybSB0aGF0IGJ5IHJlcmVhZGluZyB0aGUgcGF0Y2g6XG5cbmBgYGNcbiNpZlx0SVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVClcblx0ZXJyID0gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcblx0aWYgKGVyciBcdTAwMjZcdTAwMjYgb3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcblx0XHRuZl9jb25ubGFiZWxzX3B1dChuZXQpO1xuI2VuZGlmXG5cdHJldHVybiBlcnI7XG5gYGBcblxuWWVwLCBgTkVURklMVEVSX0NPTk5DT1VOVGAgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gVGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZSBjbGVhcmx5IGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBJJ20gZm9jdXNpbmcgb24gYG92c19jdF9pbml0YC5cblxuTm93LCBpcyB0aGlzIGJ1ZyB3b3J0aCBmdXp6aW5nPyBJdCdzIGEgcmVsYXRpdmVseSBzaW1wbGUgZXJyb3IgaGFuZGxpbmcgZml4LCBidXQgU3l6a2FsbGVyICpjYW4qIHRyaWdnZXIgaXQgdGhyb3VnaCBmYXVsdCBpbmplY3Rpb24uIEl0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSByZXNvdXJjZSBsZWFrIOKAkyBgbmZfY29ubmxhYmVsc19wdXRgIGlzbid0IGNhbGxlZC4gUmVzb3VyY2UgbGVha3MgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBidWdzLCBzbyB0aGUgYW5zd2VyIGlzICp5ZXMqLiBgV29ydGhGdXp6aW5nOiB0cnVlYC5cblxuQ29uZmlncyBuZWVkZWQ6IGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBgTkVURklMVEVSX0NPTk5DT1VOVGAuIFRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbCBpcyBgb3ZzX2N0X2luaXRgLlxuXG5RdWljayBkb3VibGUtY2hlY2s6IGlzIGBvdnNfY3RfaW5pdGAgc3RhdGljPyBMZXQncyB2ZXJpZnkgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIEFoLCBgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClgLiBObywgaXQncyAqbm90KiBzdGF0aWMsIGdvb2QuXG5cbkp1c3QgdG8gY29uZmlybSwgbGV0J3MgYWxzbyBjaGVjayBpZiBgb3ZzX2luaXRfbmV0YCBpcyBzdGF0aWMuIEluIGBuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY2AsIGl0J3MgZGVmaW5lZCBhcyBgc3RhdGljIGludCBfX25ldF9pbml0IG92c19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpYC4gU28sIHllcywgYG92c19pbml0X25ldGAgaXMgc3RhdGljLlxuXG5BbHJpZ2h0LCBzbyBgb3ZzX2N0X2luaXRgIGJlaW5nIG5vbi1zdGF0aWMgaXMgZXhhY3RseSB3aGF0IEkgd2FudCBpbiBhIGZvY3VzIHN5bWJvbC5cblxuT2theSwgbm93IHRvIHZlcmlmeSBgTkVURklMVEVSX0NPTk5DT1VOVGAgaW4gYEtjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDc3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MTA6NDIuNzM4MzYwODE5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk0MjI1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTExMD1pZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTExOmNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoxMDo0Mi44NTc3ODgwNzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NzAxNDQxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0byBsb29rIGF0LCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBmaWd1cmVkIG91dC4gYE5FVEZJTFRFUl9DT05OQ09VTlRgIHJlbGllcyBvbiBgTkZfQ09OTlRSQUNLYCwgYW5kIGBPUEVOVlNXSVRDSGAgZGVwZW5kcyBvbiB0aGUgYElORVRgIHN0YWNrLCBzbyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBPUEVOVlNXSVRDSGAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5FVEZJTFRFUl9DT05OQ09VTlRgLiBJJ20gYWx3YXlzIHRob3JvdWdoIHdpdGggbXkgc2V0dXAsIHNvIHRoaXMgaXMgaW1wb3J0YW50IHRvIGdldCByaWdodC5cblxuTm93LCB0aGUganVpY3kgYml0OiB0aGUgYG92c19jdF9pbml0YCBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiBhIG5ldHdvcmsgbmFtZXNwYWNlLiBUaGF0J3MgZmFudGFzdGljISBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgdGFyZ2V0IGZvciBmYXVsdCBpbmplY3Rpb24uIEkgd2FzIG9yaWdpbmFsbHkgdGhpbmtpbmcgb2YgZXhwbG9yaW5nIG90aGVyIGZ1bmN0aW9ucywgYnV0IGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwYXRjaCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbmdlIGlzIGxpbWl0ZWQgdG8gYG92c19jdF9pbml0YCwgc28gdGhhdOKAmXMgd2hlcmUgbXkgZWZmb3J0cyBzaG91bGQgYmUgZm9jdXNlZC5cblxuU28sIHRvIHN1bW1hcml6ZSBzdWNjaW5jdGx5OiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSByZXNvdXJjZSBsZWFrIHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYG92c19jdF9pbml0YCB3aGVuIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMuIFRoYXQgbWVhbnMgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBjcml0aWNhbCwgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgaW5pdGlhbGl6YXRpb24gb2Ygb3BlbnZzd2l0Y2ggd2l0aGluIGEgbmV0d29yayBuYW1lc3BhY2UuIFRoZSBzeW1ib2wgSSBuZWVkIHRvIGZvY3VzIG9uIGlzLCB3aXRob3V0IGEgZG91YnQsIGBvdnNfY3RfaW5pdGAuIE15IGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZCwgc28gSSdtIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMgYW5kIGdldCBjcmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEwNiwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MTA6NTMuNzI3OTM1MjA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MTgyNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2Ygb3BlbnZzd2l0Y2ggY29ubnRyYWNrIGluaXRpYWxpemF0aW9uIChgb3ZzX2N0X2luaXRgKSB3aGVuIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG9wZW52c3dpdGNoIG5ldG5zIGluaXRpYWxpemF0aW9uKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGZhdWx0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX2N0X2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2Ygb3BlbnZzd2l0Y2ggY29ubnRyYWNrIGluaXRpYWxpemF0aW9uIChgb3ZzX2N0X2luaXRgKSB3aGVuIGBvdnNfY3RfbGltaXRfaW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKG9wZW52c3dpdGNoIG5ldG5zIGluaXRpYWxpemF0aW9uKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGZhdWx0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MTA6NTMuODU2MTIzODA0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODU0NTExNTk3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxNjoxMDo1My44NTY1Mjc2MDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjg1NDUwNzUwNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgKHJlZmVyZW5jZSBjb3VudCBsZWFrKSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgb3ZzX2N0X2luaXRgLiBJZiBgb3ZzX2N0X2xpbWl0X2luaXRgIGZhaWxzLCBpdCBub3cgY29ycmVjdGx5IGNhbGxzIGBuZl9jb25ubGFiZWxzX3B1dGAgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGFjcXVpcmVkIGJ5IGBuZl9jb25ubGFiZWxzX2dldGAuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3B5aW5nLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSB3b3VsZCBiZSByZWZlcmVuY2UgY291bnRpbmcgYnVncyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBzY29wZSBvZiBLTVNBTiBhbmQgYmV0dGVyIGhhbmRsZWQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLTUVNTEVBSyBvciBzdGFuZGFyZCBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZWNjOGY3ODY3MTY1MmY3MzE3MWMwZTQ3YWNjYmIzZDE1Yjg4NGRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTY6MDg6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbmluZGV4IDk1Njk3ZDRlMTZlNjQuLjM4YzZmMzQ3NzZjMjggMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY1xuQEAgLTIwMDEsNiArMjAwMSw3IEBAIGludCBvdnNfY3RfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0dW5zaWduZWQgaW50IG5fYml0cyA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9jdF9sYWJlbHMpICogQklUU19QRVJfQllURTtcbiBcdHN0cnVjdCBvdnNfbmV0ICpvdnNfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBvdnNfbmV0X2lkKTtcbitcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKG5mX2Nvbm5sYWJlbHNfZ2V0KG5ldCwgbl9iaXRzIC0gMSkpIHtcbiBcdFx0b3ZzX25ldC1cdTAwM2V4dF9sYWJlbCA9IGZhbHNlO1xuQEAgLTIwMTAsMTAgKzIwMTEsMTEgQEAgaW50IG92c19jdF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdH1cbiBcbiAjaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4tXHRyZXR1cm4gb3ZzX2N0X2xpbWl0X2luaXQobmV0LCBvdnNfbmV0KTtcbi0jZWxzZVxuLVx0cmV0dXJuIDA7XG4rXHRlcnIgPSBvdnNfY3RfbGltaXRfaW5pdChuZXQsIG92c19uZXQpO1xuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgb3ZzX25ldC1cdTAwM2V4dF9sYWJlbClcbitcdFx0bmZfY29ubmxhYmVsc19wdXQobmV0KTtcbiAjZW5kaWZcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHZvaWQgb3ZzX2N0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTY6MTA6NTMuODU2NTI4NTE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTQ1MDcyMTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPVlMgQ29ubnRyYWNrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggd2l0aGluIGBvdnNfY3RfaW5pdGAgaW4gYG5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suY2AuIEVzc2VudGlhbGx5LCBpdCdzIGFkZGluZyBlcnJvciBoYW5kbGluZyBzcGVjaWZpY2FsbHkgZm9yIGBvdnNfY3RfbGltaXRfaW5pdGAuIElmIHRoYXQgaW5pdGlhbGl6YXRpb24gZmFpbHMsIGFuZCB0aGUgYG92c19uZXQtXHUwMDNleHRfbGFiZWxgIGZsYWcgaXMgdHJ1ZSwgaXQgcHJvY2VlZHMgdG8gY2FsbCBgbmZfY29ubmxhYmVsc19wdXQobmV0KWAuIFRoZSBpbXBsaWNhdGlvbiBpcyBhIHJlc291cmNlIGxlYWsgb3IsIG1vcmUgcHJlY2lzZWx5LCBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIHJlbGF0ZWQgdG8gYGNvbm5sYWJlbHNgIGlzIGJlaW5nIGFkZHJlc3NlZC5cblxuTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCBpdCdzIGNsZWFyIHRoaXMgaXMgc29sZWx5IGEgcmVzb3VyY2UgbWFuYWdlbWVudCBpbXByb3ZlbWVudC4gVGhlcmUncyBubyBpbnZvbHZlbWVudCBvZiB1c2VyLXNwYWNlIGRhdGEgY29weWluZywgbm9yIGRvZXMgdGhlIGNvZGUgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHRyaWNreSBwYWRkaW5nLCBvciBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLiBUaGVyZWZvcmUsIEkgZG9uJ3Qgc2VlIGFueSBpbW1lZGlhdGUgS0FTQU4vS01TQU4gaXNzdWVzLiBLQVNBTiBpcyBzdGlsbCBpbXBvcnRhbnQgdG8gcnVuLCB0byBjaGVjayBmb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gS01FTUxFQUsgd291bGQgYmUgdGhlIG1vcmUgcmVsZXZhbnQga2VybmVsIHRlc3RpbmcgdG9vbCB0byBmaW5kIHJlc291cmNlIGxlYWtzLiBUaGlzIHBhdGNoIGl0c2VsZiBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGluIHRoYXQgcmVnYXJkLiBHaXZlbiBpdHMgc2ltcGxpY2l0eSwgSSdtIGNvbmZpZGVudCBpbiB0aGUgcGF0Y2gncyBwdXJwb3NlIGFuZCBpdHMgbWluaW1hbCBpbXBhY3Qgb24gdGhlIGV4aXN0aW5nIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY2LCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE2OjE1OjM5LjMwNzI1NDMxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZlcmVuY2UgY291bnQgbGVhaykgaW4gdGhlIGVycm9yIHBhdGggb2YgYG92c19jdF9pbml0YC4gSWYgYG92c19jdF9saW1pdF9pbml0YCBmYWlscywgaXQgbm93IGNvcnJlY3RseSBjYWxscyBgbmZfY29ubmxhYmVsc19wdXRgIHRvIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBhY3F1aXJlZCBieSBgbmZfY29ubmxhYmVsc19nZXRgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29weWluZywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNvZGUgd291bGQgYmUgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3Mgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgS01TQU4gYW5kIGJldHRlciBoYW5kbGVkIGJ5IG90aGVyIHRvb2xzIGxpa2UgS01FTUxFQUsgb3Igc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIChyZWZlcmVuY2UgY291bnQgbGVhaykgaW4gdGhlIGVycm9yIHBhdGggb2YgYG92c19jdF9pbml0YC4gSWYgYG92c19jdF9saW1pdF9pbml0YCBmYWlscywgaXQgbm93IGNvcnJlY3RseSBjYWxscyBgbmZfY29ubmxhYmVsc19wdXRgIHRvIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBhY3F1aXJlZCBieSBgbmZfY29ubmxhYmVsc19nZXRgLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29weWluZywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNvZGUgd291bGQgYmUgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3Mgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgS01TQU4gYW5kIGJldHRlciBoYW5kbGVkIGJ5IG90aGVyIHRvb2xzIGxpa2UgS01FTUxFQUsgb3Igc3RhbmRhcmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow8zm8m[1] Phase: Succeeded StartedAt: 2026-08-15 16:15:50 +0000 UTC FinishedAt: 2026-08-15 16:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-15 16:15:50 +0000 UTC FinishedAt: 2026-08-15 16:15:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2] Phase: Succeeded StartedAt: 2026-08-15 16:15:50 +0000 UTC FinishedAt: 2026-08-15 19:56:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-15 16:15:50 +0000 UTC FinishedAt: 2026-08-15 19:56:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-15 16:15:50 +0000 UTC FinishedAt: 2026-08-15 16:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-15 16:15:50 +0000 UTC FinishedAt: 2026-08-15 16:15:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8zm8m/series-workflow8zm8m-convert-artifact-2906923304/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-15 16:16:00 +0000 UTC FinishedAt: 2026-08-15 16:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-15 16:16:00 +0000 UTC FinishedAt: 2026-08-15 16:32:44 +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:*3ba44451-5ca6-45d0-8fa7-755d63c0124f,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-workflow8zm8m/series-workflow8zm8m-convert-artifact-2906923304/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": "0e272c91-893f-44f5-be3d-1ab88838efe9", "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-workflow8zm8m/series-workflow8zm8m-build-action-438605726/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-15 16:16:00 +0000 UTC FinishedAt: 2026-08-15 16:32:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3ba44451-5ca6-45d0-8fa7-755d63c0124f,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-workflow8zm8m/series-workflow8zm8m-convert-artifact-2906923304/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": "0e272c91-893f-44f5-be3d-1ab88838efe9", "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-workflow8zm8m/series-workflow8zm8m-build-action-438605726/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-15 16:32:44 +0000 UTC FinishedAt: 2026-08-15 16:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-15 16:32:44 +0000 UTC FinishedAt: 2026-08-15 16:32:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-15 16:32:44 +0000 UTC FinishedAt: 2026-08-15 16:32:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-15 16:32:44 +0000 UTC FinishedAt: 2026-08-15 16:32:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8zm8m/series-workflow8zm8m-convert-artifact-1752865551/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-15 16:32:54 +0000 UTC FinishedAt: 2026-08-15 16:34:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-15 16:32:54 +0000 UTC FinishedAt: 2026-08-15 16:34:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e272c91-893f-44f5-be3d-1ab88838efe9,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-workflow8zm8m/series-workflow8zm8m-build-action-438605726/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-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-15 16:34:51 +0000 UTC FinishedAt: 2026-08-15 16:34:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-15 16:34:51 +0000 UTC FinishedAt: 2026-08-15 16:34:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-15 16:34:51 +0000 UTC FinishedAt: 2026-08-15 16:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-15 16:34:51 +0000 UTC FinishedAt: 2026-08-15 16:51:29 +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:*3ba44451-5ca6-45d0-8fa7-755d63c0124f,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-workflow8zm8m/series-workflow8zm8m-convert-artifact-1752865551/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": "6e7d6a00-2fc7-4f3c-ac20-f3abaa1caf7c", "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-workflow8zm8m/series-workflow8zm8m-build-action-4235426851/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-15 16:34:51 +0000 UTC FinishedAt: 2026-08-15 16:51:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3ba44451-5ca6-45d0-8fa7-755d63c0124f,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-workflow8zm8m/series-workflow8zm8m-convert-artifact-1752865551/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": "6e7d6a00-2fc7-4f3c-ac20-f3abaa1caf7c", "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-workflow8zm8m/series-workflow8zm8m-build-action-4235426851/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-15 16:51:29 +0000 UTC FinishedAt: 2026-08-15 16:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-15 16:51:29 +0000 UTC FinishedAt: 2026-08-15 16:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-15 16:51:29 +0000 UTC FinishedAt: 2026-08-15 16:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-15 16:51:29 +0000 UTC FinishedAt: 2026-08-15 16:53:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6e7d6a00-2fc7-4f3c-ac20-f3abaa1caf7c,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-workflow8zm8m/series-workflow8zm8m-build-action-4235426851/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-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-15 16:53:26 +0000 UTC FinishedAt: 2026-08-15 19:56:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-15 16:53:26 +0000 UTC FinishedAt: 2026-08-15 16:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-15 16:53:26 +0000 UTC FinishedAt: 2026-08-15 16:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-15 16:53:27 +0000 UTC FinishedAt: 2026-08-15 19:56:02 +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":["ovs_ct_init"],"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:*0e272c91-893f-44f5-be3d-1ab88838efe9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6e7d6a00-2fc7-4f3c-ac20-f3abaa1caf7c,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-workflow8zm8m/series-workflow8zm8m-build-action-438605726/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-workflow8zm8m/series-workflow8zm8m-build-action-4235426851/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-15 16:53:27 +0000 UTC FinishedAt: 2026-08-15 16:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-15 16:53:27 +0000 UTC FinishedAt: 2026-08-15 16:53:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"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-workflow8zm8m/series-workflow8zm8m-convert-artifact-1424499912/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-15 16:53:27 +0000 UTC FinishedAt: 2026-08-15 16:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-15 16:53:37 +0000 UTC FinishedAt: 2026-08-15 19:56:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8zm8m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_ct_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","NF_CONNTRACK","NETFILTER_CONNCOUNT"],"series_id":"1acb5456-6723-4e97-8c69-ead32eee595e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-15 16:53:38 +0000 UTC FinishedAt: 2026-08-15 19:55:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e272c91-893f-44f5-be3d-1ab88838efe9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6e7d6a00-2fc7-4f3c-ac20-f3abaa1caf7c,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-workflow8zm8m/series-workflow8zm8m-build-action-438605726/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-workflow8zm8m/series-workflow8zm8m-build-action-4235426851/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-workflow8zm8m/series-workflow8zm8m-convert-artifact-1424499912/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,}