Name: series-workflowzrs2s Phase: Succeeded StartedAt: 2026-07-23 09:17:40 +0000 UTC FinishedAt: 2026-07-23 13:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[0] Phase: Succeeded StartedAt: 2026-07-23 09:17:40 +0000 UTC FinishedAt: 2026-07-23 09:56:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 09:17:40 +0000 UTC FinishedAt: 2026-07-23 09:56:33 +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": "f43ee0c0730d6191629b5ee1ceae27b1ebfdc047", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f43ee0c0730d6191629b5ee1ceae27b1ebfdc047", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER" ], "series_id": "8b056e90-5e9b-4050-bd83-e66b0f1ad997" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zerocopy_fill_skb_from_devmem", "__zerocopy_sg_from_iter", "skb_zerocopy_iter_stream" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSYjMzQ7LAogICAgJiMzNDtfX3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YThhZDA1MzJmMDUyYTg2M2EzMWZjZWYyMDcyNWIwNzc2MDZjM2RjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDk6NTQ6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbmluZGV4IGMyODVjNjQ2NTkyM2U0Li4zNWZlYmMxYzI1ZmEzMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbkBAIC03MTIsNiAmIzQzOzcxMiw5IEBAIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbiBcdHNpemVfdCB2aXJ0X2FkZHIsIHNpemUsIG9mZjtcbiBcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xuIFxuJiM0MztcdGlmIChpIFx1MDAyNlx1MDAyNiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcbiBcdC8qIERldm1lbSBmaWxsaW5nIHdvcmtzIGJ5IHRha2luZyBhbiBJT1ZFQyBmcm9tIHRoZSB1c2VyIHdoZXJlIHRoZVxuIFx0ICogaW92X2FkZHJzIGFyZSBpbnRlcnByZXRlZCBhcyBhbiBvZmZzZXQgaW4gYnl0ZXMgaW50byB0aGUgZG1hLWJ1ZiB0b1xuIFx0ICogc2VuZCBmcm9tLiBXZSBkbyBub3Qgc3VwcG9ydCBvdGhlciBpdGVyIHR5cGVzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfREVWTUVNJiMzNDssCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0mIzM0OywKICAgICYjMzQ7X196ZXJvY29weV9zZ19mcm9tX2l0ZXImIzM0OywKICAgICYjMzQ7c2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIHRvIHByZXZlbnQgYXBwZW5kaW5nIGRldm1lbSBmcmFnbWVudHMgdG8gYW4gc2tiIHRoYXQgYWxyZWFkeSBjb250YWlucyByZWFkYWJsZSBmcmFnbWVudHMsIHJldHVybmluZyBgLUVFWElTVGAuIFRoaXMgYWZmZWN0cyB0aGUgVENQIHplcm9jb3B5IHBhdGggd2hlbiB1c2luZyBkZXZpY2UgbWVtb3J5IChkZXZtZW0pLiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGlzIG5ldyBlcnJvciBwYXRoIGlzIGhhbmRsZWQgY29ycmVjdGx5IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YThhZDA1MzJmMDUyYTg2M2EzMWZjZWYyMDcyNWIwNzc2MDZjM2RjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMDk6NTQ6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwppbmRleCBjMjg1YzY0NjU5MjNlNC4uMzVmZWJjMWMyNWZhMzEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtNzEyLDYgJiM0Mzs3MTIsOSBAQCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sCiAJc2l6ZV90IHZpcnRfYWRkciwgc2l6ZSwgb2ZmOwogCXN0cnVjdCBuZXRfaW92ICpuaW92OwogCiYjNDM7CWlmIChpICZhbXA7JmFtcDsgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpCiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsKIAkvKiBEZXZtZW0gZmlsbGluZyB3b3JrcyBieSB0YWtpbmcgYW4gSU9WRUMgZnJvbSB0aGUgdXNlciB3aGVyZSB0aGUKIAkgKiBpb3ZfYWRkcnMgYXJlIGludGVycHJldGVkIGFzIGFuIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBkbWEtYnVmIHRvCiAJICogc2VuZCBmcm9tLiBXZSBkbyBub3Qgc3VwcG9ydCBvdGhlciBpdGVyIHR5cGVzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBOZXQvQ29yZSBEYXRhZ3JhbSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgc2VlIHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gSW1tZWRpYXRlbHksIG15IGF0dGVudGlvbiB6ZXJvZXMgaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkOiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gemVyby1jb3B5IGRhdGEgdHJhbnNmZXIsIGxpa2VseSBpbnZvbHZpbmcgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgZnJvbSBhIGRldmljZSYjMzk7cyBtZW1vcnkgaW50byBhbiBTS0IgKFNvY2tldCBCdWZmZXIpLiBUaGlzIGlzIHBvdGVudGlhbGx5IGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYSwgc28gbGV0JiMzOTtzIGdldCBhIGdvb2QgbG9vayBhdCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGl0c2VsZiB3aXRoaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGltcGxpY2F0aW9ucyBmb3IgZGlmZmVyZW50IG5ldHdvcmsgaW50ZXJmYWNlcywgcG90ZW50aWFsbHkgYW55IHNlY3VyaXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gYWNjZXNzaW5nIGRldmljZSBtZW1vcnksIGFuZCBvZiBjb3Vyc2UsIHRoZSBpbXBhY3Qgb24gb3ZlcmFsbCBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGF0YWdyYW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kYXRhZ3JhbS5jPTcwNj1zdGF0aWMgaW50XG5uZXQvY29yZS9kYXRhZ3JhbS5jOjcwNzp6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTcwOC1cdFx0XHQgICAgICBpbnQgbGVuZ3RoLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2MC1cdGVsc2UgaWYgKGJpbmRpbmcpXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc2MTpcdFx0cmV0ID0gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc2tiLCBmcm9tLCBsZW5ndGgsIGJpbmRpbmcpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NjItXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlIGNoYW5nZSwgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFplcm8tQ29weSBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2VlbWluZ2x5IHNpbXBsZSBjaGVjayB3aXRoaW4gdGhlIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoYXQgdGhleSYjMzk7dmUgYWRkZWQ6CgpgYGBjCglpZiAoaSAmYW1wOyZhbXA7IHNrYl9mcmFnc19yZWFkYWJsZShza2IpKQoJCXJldHVybiAtRUVYSVNUOwpgYGAKClJpZ2h0IGF3YXksIG15IG1pbmQgc3RhcnRzIHJhY2luZy4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGludGVudGlvbiBoZXJlIGlzIGxpa2VseSByZWxhdGVkIHRvIHByZXZlbnRpbmcgYW4gdW5kZXNpcmFibGUgY29uZGl0aW9uIGR1cmluZyB6ZXJvLWNvcHkgZGF0YSB0cmFuc2Zlci4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGJlIGEgc2FmZWd1YXJkIGFnYWluc3QgYSBzY2VuYXJpbyB3aGVyZSB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHVzZSBkZXZpY2UgbWVtb3J5IHRvIHBvcHVsYXRlIGFuIGBza2JgIChzb2NrZXQgYnVmZmVyKSB0aGF0IGFscmVhZHkgaGFzIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhlIGBpYCB2YXJpYWJsZSBwcm9iYWJseSBzaWduaWZpZXMgYW4gaW5kZXggb3Igc29tZSBvdGhlciBjb250ZXh0IHdpdGhpbiB0aGUgZnVuY3Rpb24uCgpNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gYXZvaWQgYSBjb25mbGljdCwgcGVyaGFwcyBwcmV2ZW50aW5nIGEgZG91YmxlIGNvcHkgb3IgY29ycnVwdGlvbi4gSWYgYSBzb2NrZXQgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gcGFydGlhbGx5IHBvcHVsYXRlZCBvciBpcyBtYXJrZWQgd2l0aCBmcmFnbWVudHMgdGhhdCAqY291bGQqIGJlIHJlYWQsIHRyeWluZyB0byBpbmplY3QgbW9yZSBkYXRhIHZpYSBhIHplcm8tY29weSBtZWNoYW5pc20gbWlnaHQgY3JlYXRlIGlzc3VlcyBvciBsZWFkIHRvIGRhdGEgaW5jb25zaXN0ZW5jaWVzLiBUaGUgYC1FRVhJU1RgIGVycm9yIGNvZGUgaXMgYSBzZW5zaWJsZSBjaG9pY2UsIHNpZ25hbGluZyB0aGF0IHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSBvZiBhbiBleGlzdGluZyBjb25kaXRpb24uCgpUbyBjb25maXJtIHRoaXMgaHlwb3RoZXNpcywgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGlgIGlzIHVzZWQsIGFuZCB3aGF0IGBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKWAgYWN0dWFsbHkgY2hlY2tzLiBUaGVuLCBJIGNhbiBkZWR1Y2UgcHJlY2lzZWx5IHdoeSB0aGlzIGd1YXJkIGlzIG5lY2Vzc2FyeSwgYW5kIHdoZXRoZXIgaXQmIzM5O3MgY29ycmVjdGx5IGltcGxlbWVudGVkIHRvIHByb3RlY3QgYWdhaW5zdCB0aGUgaW1wbGllZCBkYXRhIGNvcnJ1cHRpb24gb3IgaW5jb3JyZWN0IHJlYWQgc2NlbmFyaW9zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBjb25maWRlbnRseSBhc3Nlc3MgdGhlIHBhdGNoJiMzOTtzIG1lcml0LiBJcyB0aGlzIGEgY29tbW9uIGlzc3VlIHdpdGggYSBjZXJ0YWluIGRyaXZlciwgYSBnZW5lcmljIHByb2JsZW0sIG9yIHNvbWV0aGluZyBzcGVjaWZpYz8gTm93LCBsZXQmIzM5O3MgZ28gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGF0YWdyYW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzA2Olx0c3RhdGljIGludFxuIDcwNzpcdHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbiA3MDg6XHRcdFx0XHQgICAgICBpbnQgbGVuZ3RoLFxuIDcwOTpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuIDcxMDpcdHtcbiA3MTE6XHRcdGludCBpID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzO1xuIDcxMjpcdFx0c2l6ZV90IHZpcnRfYWRkciwgc2l6ZSwgb2ZmO1xuIDcxMzpcdFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG4gNzE0Olx0XG4gNzE1Olx0XHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG4gNzE2Olx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDcxNzpcdFxuIDcxODpcdFx0LyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlXG4gNzE5Olx0XHQgKiBpb3ZfYWRkcnMgYXJlIGludGVycHJldGVkIGFzIGFuIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBkbWEtYnVmIHRvXG4gNzIwOlx0XHQgKiBzZW5kIGZyb20uIFdlIGRvIG5vdCBzdXBwb3J0IG90aGVyIGl0ZXIgdHlwZXMuXG4gNzIxOlx0XHQgKi9cbiA3MjI6XHRcdGlmIChpb3ZfaXRlcl90eXBlKGZyb20pICE9IElURVJfSU9WRUMgXHUwMDI2XHUwMDI2XG4gNzIzOlx0XHQgICAgaW92X2l0ZXJfdHlwZShmcm9tKSAhPSBJVEVSX1VCVUYpXG4gNzI0Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDcyNTpcdFxuIDcyNjpcdFx0d2hpbGUgKGxlbmd0aCBcdTAwMjZcdTAwMjYgaW92X2l0ZXJfY291bnQoZnJvbSkpIHtcbiA3Mjc6XHRcdFx0aWYgKGkgPT0gTUFYX1NLQl9GUkFHUylcbiA3Mjg6XHRcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDcyOTpcdFxuIDczMDpcdFx0XHR2aXJ0X2FkZHIgPSAoc2l6ZV90KWl0ZXJfaW92X2FkZHIoZnJvbSk7XG4gNzMxOlx0XHRcdG5pb3YgPSBuZXRfZGV2bWVtX2dldF9uaW92X2F0KGJpbmRpbmcsIHZpcnRfYWRkciwgXHUwMDI2b2ZmLCBcdTAwMjZzaXplKTtcbiA3MzI6XHRcdFx0aWYgKCFuaW92KVxuIDczMzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDczNDpcdFxuIDczNTpcdFx0XHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBsZW5ndGgpO1xuIDczNjpcdFx0XHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBpdGVyX2lvdl9sZW4oZnJvbSkpO1xuIDczNzpcdFxuIDczODpcdFx0XHRnZXRfbmV0bWVtKG5ldF9pb3ZfdG9fbmV0bWVtKG5pb3YpKTtcbiA3Mzk6XHRcdFx0c2tiX2FkZF9yeF9mcmFnX25ldG1lbShza2IsIGksIG5ldF9pb3ZfdG9fbmV0bWVtKG5pb3YpLCBvZmYsXG4gNzQwOlx0XHRcdFx0XHQgICAgICAgc2l6ZSwgUEFHRV9TSVpFKTtcbiA3NDE6XHRcdFx0aW92X2l0ZXJfYWR2YW5jZShmcm9tLCBzaXplKTtcbiA3NDI6XHRcdFx0bGVuZ3RoIC09IHNpemU7XG4gNzQzOlx0XHRcdGkmIzQzOyYjNDM7O1xuIDc0NDpcdFx0fVxuIDc0NTpcdFxuIDc0NjpcdFx0cmV0dXJuIDA7XG4gNzQ3Olx0fVxuIDc0ODpcdFxuIDc0OTpcdGludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbiA3NTA6XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIDc1MTpcdFx0XHRcdCAgICBzaXplX3QgbGVuZ3RoLFxuIDc1MjpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiA3NTM6XHR7XG4gNzU0Olx0XHR1bnNpZ25lZCBsb25nIG9yaWdfc2l6ZSA9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbiA3NTU6XHRcdHVuc2lnbmVkIGxvbmcgdHJ1ZXNpemU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZ1bmN0aW9uYWwgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90aGluZyB0b28gZHJhc3RpYyBhdCBmaXJzdCBnbGFuY2UuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBjZW50ZXJzIGFyb3VuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIEkga25vdyB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAuIE5vdyB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IHdpZGVzcHJlYWQgaXMgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZT8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjYWxsIHNpdGVzIG9mIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgdG8gdW5kZXJzdGFuZCB0aGUgYnJlYWR0aCBvZiBwb3RlbnRpYWwgY29uc2VxdWVuY2Ugb2YgdGhlc2UgY2hhbmdlcy4gVGltZSB0byB0cmFjZSB0aG9zZSBjYWxscyBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhlIGNhbGxncmFwaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cdFx0XHRcdCAgICAgICBOVUxMKTtcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDgtXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc0OTppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc1MC1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc0LX1cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzc1OkVYUE9SVF9TWU1CT0woX196ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NzYtXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03ODc9aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTQtXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5NTpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihOVUxMLCBOVUxMLCBza2IsIGZyb20sIH4wVSwgTlVMTCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5Ni19XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkwNj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI3LVxubmV0L2NvcmUvc2tidWZmLmM6MTkyODpcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI5LVx0XHRcdFx0ICAgICAgYmluZGluZyk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cdGlmICh6Y29weSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcdFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXHQvKiBJZiAmIzM5O3ZzayYjMzk7ICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcdCAqIHdpbGwgbmV2ZXIgY2FsbCAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyBiZWxvdyB3aXRob3V0XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJiMzOTtza2Jfc2V0X293bmVyX3coKSYjMzk7LiBUaGUgb25seSBjYXNlXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyB1c2VzXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICYjMzk7c2tfd21lbV9hbGxvYyYjMzk7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqQW5hbHl6aW5nIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgVXNhZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjZW50ZXJlZCBhcm91bmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYC4gVGhlIGNyaXRpY2FsIGNsdWUgaGVyZSBpcyB0aGF0IGl0IGdldHMgY2FsbGVkIGZyb20gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYnV0IG9ubHkgd2hlbiB0aGUgYGJpbmRpbmdgIHBhcmFtZXRlciBpc24mIzM5O3QgTlVMTC4gVGhhdCYjMzk7cyB0aGUga2V5IGNvbmRpdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyB3aGVyZSBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzICphY3R1YWxseSogY2FsbGVkIHdpdGggYGJpbmRpbmdgIHNldC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoLiBBIHF1aWNrIHNlYXJjaCByZXZlYWxzIHRoYXQgdGhlIHJlbGV2YW50IGNhbGwgc2l0ZSBpcyBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gTm93IEkga25vdyB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAgdXNlcyBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHdoZW4gdGhlIGBiaW5kaW5nYCBpcyBub24tTlVMTC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MTc3MT1zdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3ODppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xOTA0PUVYUE9SVF9TWU1CT0xfR1BMKG1zZ196ZXJvY29weV91YnVmX29wcyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTA1LVxubmV0L2NvcmUvc2tidWZmLmM6MTkwNjppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MDctXHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTk0My19XG5uZXQvY29yZS9za2J1ZmYuYzoxOTQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbSk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTQ1LVxuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTMzOC1cbm5ldC9pcHY0L3RjcC5jOjEzMzk6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHNrLCBza2IsIG1zZywgY29weSwgdWFyZyxcbm5ldC9pcHY0L3RjcC5jLTEzNDAtXHRcdFx0XHRcdFx0ICAgICAgIGJpbmRpbmcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVsdmluZyBpbnRvIHRoZSBUQ1AgU2VuZCBQYXRoKioKCkFscmlnaHQsIHNvIEkgc2VlIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gIGJlaW5nIGludm9rZWQgZnJvbSBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgcm9sZSBpbiB6ZXJvLWNvcHkgdHJhbnNtaXNzaW9uIHdpdGhpbiB0aGUgVENQIHNlbmRpbmcgcGF0aC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY2FsbGluZyBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCB3aGljaCByZXNpZGVzIGluIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCBkZXRlcm1pbmUgaG93IGl0IGludGVyYWN0cyB3aXRoIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLiBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGhvdyBkYXRhIGlzIHByZXBhcmVkLCBoYW5kbGVkLCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemVkIHVzaW5nIHplcm8tY29weSB0ZWNobmlxdWVzIHdpdGhpbiB0aGUgVENQIHNlbmRpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgdGltZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBwb3NzaWJsZSBib3R0bGVuZWNrcyBvciBvcHBvcnR1bml0aWVzIGZvciBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudCB3aXRoaW4gdGhpcyBzZWdtZW50IG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMjA6XHRcdFx0XHR9IGVsc2Uge1xuMTMyMTpcdFx0XHRcdFx0c2tiX2ZpbGxfcGFnZV9kZXNjKHNrYiwgaSwgcGZyYWctXHUwMDNlcGFnZSxcbjEzMjI6XHRcdFx0XHRcdFx0XHQgICBwZnJhZy1cdTAwM2VvZmZzZXQsIGNvcHkpO1xuMTMyMzpcdFx0XHRcdFx0cGFnZV9yZWZfaW5jKHBmcmFnLVx1MDAzZXBhZ2UpO1xuMTMyNDpcdFx0XHRcdH1cbjEzMjU6XHRcdFx0XHRwZnJhZy1cdTAwM2VvZmZzZXQgJiM0Mzs9IGNvcHk7XG4xMzI2Olx0XHRcdH0gZWxzZSBpZiAoemMgPT0gTVNHX1pFUk9DT1BZKSAge1xuMTMyNzpcdFx0XHRcdC8qIEZpcnN0IGFwcGVuZCB0byBhIGZyYWdsZXNzIHNrYiBidWlsZHMgaW5pdGlhbFxuMTMyODpcdFx0XHRcdCAqIHB1cmUgemVyb2NvcHkgc2tiXG4xMzI5Olx0XHRcdFx0ICovXG4xMzMwOlx0XHRcdFx0aWYgKCFza2ItXHUwMDNlbGVuKVxuMTMzMTpcdFx0XHRcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZsYWdzIHw9IFNLQkZMX1BVUkVfWkVST0NPUFk7XG4xMzMyOlx0XG4xMzMzOlx0XHRcdFx0aWYgKCFza2JfemNvcHlfcHVyZShza2IpKSB7XG4xMzM0Olx0XHRcdFx0XHRjb3B5ID0gdGNwX3dtZW1fc2NoZWR1bGUoc2ssIGNvcHkpO1xuMTMzNTpcdFx0XHRcdFx0aWYgKCFjb3B5KVxuMTMzNjpcdFx0XHRcdFx0XHRnb3RvIHdhaXRfZm9yX3NwYWNlO1xuMTMzNzpcdFx0XHRcdH1cbjEzMzg6XHRcbjEzMzk6XHRcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc2ssIHNrYiwgbXNnLCBjb3B5LCB1YXJnLFxuMTM0MDpcdFx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbjEzNDE6XHRcdFx0XHRpZiAoZXJyID09IC1FTVNHU0laRSB8fCBlcnIgPT0gLUVFWElTVCkge1xuMTM0MjpcdFx0XHRcdFx0dGNwX21hcmtfcHVzaCh0cCwgc2tiKTtcbjEzNDM6XHRcdFx0XHRcdGdvdG8gbmV3X3NlZ21lbnQ7XG4xMzQ0Olx0XHRcdFx0fVxuMTM0NTpcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMzQ2Olx0XHRcdFx0XHRnb3RvIGRvX2Vycm9yO1xuMTM0NzpcdFx0XHRcdGNvcHkgPSBlcnI7XG4xMzQ4Olx0XHRcdH0gZWxzZSBpZiAoemMgPT0gTVNHX1NQTElDRV9QQUdFUykge1xuMTM0OTpcdFx0XHRcdC8qIFNwbGljZSBpbiBkYXRhIGlmIHdlIGNhbjsgY29weSBpZiB3ZSBjYW4mIzM5O3QuICovXG4xMzUwOlx0XHRcdFx0aWYgKHRjcF9kb3duZ3JhZGVfemNvcHlfcHVyZShzaywgc2tiKSlcbjEzNTE6XHRcdFx0XHRcdGdvdG8gd2FpdF9mb3Jfc3BhY2U7XG4xMzUyOlx0XHRcdFx0Y29weSA9IHRjcF93bWVtX3NjaGVkdWxlKHNrLCBjb3B5KTtcbjEzNTM6XHRcdFx0XHRpZiAoIWNvcHkpXG4xMzU0Olx0XHRcdFx0XHRnb3RvIHdhaXRfZm9yX3NwYWNlO1xuMTM1NTpcdFxuMTM1NjpcdFx0XHRcdGVyciA9IHNrYl9zcGxpY2VfZnJvbV9pdGVyKHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBjb3B5KTtcbjEzNTc6XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4xMzU4Olx0XHRcdFx0XHRpZiAoZXJyID09IC1FTVNHU0laRSkge1xuMTM1OTpcdFx0XHRcdFx0XHR0Y3BfbWFya19wdXNoKHRwLCBza2IpO1xuMTM2MDpcdFx0XHRcdFx0XHRnb3RvIG5ld19zZWdtZW50O1xuMTM2MTpcdFx0XHRcdFx0fVxuMTM2MjpcdFx0XHRcdFx0Z290byBkb19lcnJvcjtcbjEzNjM6XHRcdFx0XHR9XG4xMzY0Olx0XHRcdFx0Y29weSA9IGVycjtcbjEzNjU6XHRcbjEzNjY6XHRcdFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX05PX1NIQVJFRF9GUkFHUykpXG4xMzY3Olx0XHRcdFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7XG4xMzY4Olx0XG4xMzY5Olx0XHRcdFx0c2tfd21lbV9xdWV1ZWRfYWRkKHNrLCBjb3B5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFplcm8tQ29weSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHplcm8tY29weSBmdW5jdGlvbmFsaXR5IGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGlzIGNydWNpYWwgY2hlY2sgd2l0aGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWA6IGBpZiAoaSAmYW1wOyZhbXA7IHNrYl9mcmFnc19yZWFkYWJsZShza2IpKSByZXR1cm4gLUVFWElTVDtgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNvbmZsaWN0IHdoZW4gYXR0ZW1wdGluZyB0byB6ZXJvLWNvcHkgZGF0YSBpbnRvIGFuIFNLQiB0aGF0IGFscmVhZHkgaGFzIGZyYWdlbWVudHMgdGhhdCBjYW4gYmUgcmVhZC4KCk5vdywgbGV0JiMzOTtzIGNvbm5lY3QgdGhlIGRvdHMuIFRoZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgaGFuZGxlcyB0aGUgYC1FRVhJU1RgIGVycm9yIHRoYXQgdGhpcyBuZXcgY2hlY2sgaW50cm9kdWNlcy4gVGhlIGNvZGUgc25pcHBldCBzaG93czoKCmBgYGMKCQkJZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHNrLCBza2IsIG1zZywgY29weSwgdWFyZywKCQkJCQkJICAgICAgIGJpbmRpbmcpOwoJCQlpZiAoZXJyID09IC1FTVNHU0laRSB8fCBlcnIgPT0gLUVFWElTVCkgewoJCQkJdGNwX21hcmtfcHVzaCh0cCwgc2tiKTsKCQkJCWdvdG8gbmV3X3NlZ21lbnQ7CgkJCX0KYGBgCgpTbywgd2hlbiBgLUVFWElTVGAgaXMgcmV0dXJuZWQgYnkgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZ3JhY2VmdWxseSBoYW5kbGVzIGl0IGJ5IHRyaWdnZXJpbmcgYG5ld19zZWdtZW50YCwgd2hpY2ggbWVhbnMgaXQgd2lsbCBjcmVhdGUgYSBuZXcgc2VnbWVudC4gVGhpcyBpbmRpY2F0ZXMgdGhlIGV4aXN0aW5nIFNLQiBpcyB1bnN1aXRhYmxlIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiwgcHJvYmFibHkgYmVjYXVzZSBpdCBjb250YWlucyB1bnJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBvY2N1cnMgd2hlbiBgemMgPT0gTVNHX1pFUk9DT1BZYCBhbmQgYGJpbmRpbmdgIGlzbiYjMzk7dCBudWxsLiBUaGUgYGJpbmRpbmdgIHBhcmFtZXRlciBpcyBzb3VyY2VkIGZyb20gYHNvY2tjLm5ldG1lbV9iaW5kaW5nYC4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSByb2xlIG9mIGBuZXRtZW1fYmluZGluZ2AgaXMgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBsb2dpYy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgaG93IGFuZCB3aGVuIGBiaW5kaW5nYCAoYW5kIHRoZXJlZm9yZSBgc29ja2MubmV0bWVtX2JpbmRpbmdgKSBpcyBzZXQgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGlzIHVuZGVyc3RhbmRpbmcgaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgaXRzIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlIGluIHRoZXNlIHplcm8tY29weSBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja2MubmV0bWVtX2JpbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGZvciBCaW5kaW5nKioKCkFscmlnaHQsIHRoZSBjb3JlIHF1ZXN0aW9uIGlzIGFib3V0IGhvdyBiaW5kaW5nIHJlbGF0ZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93IHdpdGhpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHVuZGVyc3RhbmQgaWYgYW5kIHdoZXJlIHRoZSBiaW5kaW5nIGNvbnRleHQgaXMgcmVsZXZhbnQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIEl0JiMzOTtzIGNydWNpYWwgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgcG9ydCwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc29ja2V0JiMzOTtzIGJpbmRpbmcsIGFyZSB1dGlsaXplZC4gSXMgYmluZGluZyBjaGVja2VkIGRpcmVjdGx5PyBPciBkb2VzIHRoZSBmdW5jdGlvbiByZWx5IG9uIHByZWNlZGluZyBzZXR1cCB0aGF0ICphc3N1bWVzKiB0aGUgc29ja2V0IGlzIGJvdW5kPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGNoZWNrcywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIGRhdGEgc3RydWN0dXJlIGFjY2Vzc2VzIHRoYXQgd291bGQgaGludCBhdCBhIGJpbmRpbmctYXdhcmUgb3BlcmF0aW9uLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgYW55IGNvZGUgdGhhdCB3b3VsZCB0cmVhdCBib3VuZCBhbmQgdW5ib3VuZCBzb2NrZXRzIGRpZmZlcmVudGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBzZW5kaW5nIGRhdGEuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciBjb25maXJtIGEgZGlyZWN0IGRlcGVuZGVuY3ksIG9yIGlkZW50aWZ5IGhvdyBiaW5kaW5nIGludGVyYWN0cyB3aXRoIHRoZSBzZW5kIHByb2Nlc3MsIGlmIGF0IGFsbC4gVGhpcyBtZWFucyBkaWdnaW5nIGludG8gdGhlIGNvZGUgYW5kIGZvbGxvd2luZyBleGVjdXRpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JpbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2lwdjQvdGNwLmMtMTExNy17XG5uZXQvaXB2NC90Y3AuYzoxMTE4Olx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcgPSBOVUxMO1xubmV0L2lwdjQvdGNwLmMtMTExOS1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTExNTgtXHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xubmV0L2lwdjQvdGNwLmM6MTE1OTpcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xubmV0L2lwdjQvdGNwLmM6MTE2MDpcdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcbm5ldC9pcHY0L3RjcC5jOjExNjE6XHRcdFx0XHRcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XG5uZXQvaXB2NC90Y3AuYzoxMTYyOlx0XHRcdFx0XHRiaW5kaW5nID0gTlVMTDtcbm5ldC9pcHY0L3RjcC5jLTExNjMtXHRcdFx0XHRcdGdvdG8gb3V0X2Vycjtcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMzM5LVx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbm5ldC9pcHY0L3RjcC5jLTEzNDEtXHRcdFx0aWYgKGVyciA9PSAtRU1TR1NJWkUgfHwgZXJyID09IC1FRVhJU1QpIHtcbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDE5LVx0XHRuZXRfemNvcHlfcHV0KHVhcmcpO1xubmV0L2lwdjQvdGNwLmM6MTQyMDpcdGlmIChiaW5kaW5nKVxubmV0L2lwdjQvdGNwLmM6MTQyMTpcdFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19wdXQoYmluZGluZyk7XG5uZXQvaXB2NC90Y3AuYy0xNDIyLVx0cmV0dXJuIGNvcGllZCAmIzQzOyBjb3BpZWRfc3luO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTE0MzgtXHR9XG5uZXQvaXB2NC90Y3AuYzoxNDM5Olx0aWYgKGJpbmRpbmcpXG5uZXQvaXB2NC90Y3AuYzoxNDQwOlx0XHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3B1dChiaW5kaW5nKTtcbm5ldC9pcHY0L3RjcC5jLTE0NDEtXG4tLVxubmV0L2lwdjQvdGNwLmM9MjQ5OT1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwLmMtMjU5OC1cdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW4gPSB0Y3BfeGFfcG9vbC50b2tlbnNbdGNwX3hhX3Bvb2wuaWR4XTtcbm5ldC9pcHY0L3RjcC5jOjI1OTk6XHRcdFx0XHRkbWFidWZfY21zZy5kbWFidWZfaWQgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKG5pb3YpO1xubmV0L2lwdjQvdGNwLmMtMjYwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkRlbHZpbmcgaW50byBEZXZpY2UgTWVtb3J5IFRDUCBCaW5kaW5nKioKCkFscmlnaHQsIHNvIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYGJpbmRpbmdgIGhlcmUsIGFuZCBpdCYjMzk7cyBiZWluZyBhY3F1aXJlZCB1c2luZyBgbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlIGBuZXRfZGV2bWVtYCBmZWF0dXJlIOKAkyB0aGUgZGV2aWNlIG1lbW9yeSBUQ1AgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgYG5ldF9kZXZtZW1gIHNvIEkga25vdyB3aGF0IHRoZSBwcmVjb25kaXRpb25zIGFyZSBmb3IgdGhpcyBjYWxsIHRvIGV2ZW4gc3VjY2VlZC4gVW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB3b3VsZCBwcm92aWRlIGltcG9ydGFudCBjb250ZXh0IGFib3V0IHRoZSByZXN0IG9mIHRoZSBjb2RlIGludm9sdmVkIGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB3aGVyZSB0aGlzIHBpZWNlIG9mIGNvZGUgd291bGQgYmUgcmVsZXZhbnQuIExldCBtZSBxdWlja2x5IHRyYWNrIGRvd24gdGhhdCBjb25maWd1cmF0aW9uIGl0ZW0uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz0zNzI9dm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTM3Ni1cbm5ldC9jb3JlL2Rldm1lbS5jOjM3NzpzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9kZXZtZW0uYy0zNzgtXHRcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xNTE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MTUyOm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKTtcbm5ldC9jb3JlL2Rldm1lbS5oLTE1My1zdHJ1Y3QgbmV0X2lvdiAqXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MjIzPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MjI0Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxubmV0L2NvcmUvZGV2bWVtLmgtMjI1LXtcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTExNTgtXHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xubmV0L2lwdjQvdGNwLmM6MTE1OTpcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xubmV0L2lwdjQvdGNwLmMtMTE2MC1cdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgdGhpbmtlcjoKCioqQ2hlY2tpbmcgdGhlIFJlY2lwZSBmb3IgdGhlIE1lbW9yeSBBY2Nlc3MgVG9vbCoqCgpSaWdodCwgdGltZSB0byB0cmFjayBkb3duIHRoaXMgYGRldm1lbS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LiBUaGUgbmV0d29yayBjb3JlIGlzIGEgcHJldHR5IGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgbG93LWxldmVsIG1lbW9yeSBhY2Nlc3MgdG9vbHMuIEFuZCB3aXRoaW4gdGhhdCBkaXJlY3RvcnksIHRoZSBsaWtlbHkgY3VscHJpdCBmb3IgYnVpbGQgY29uZmlndXJhdGlvbiBpcyBgTWFrZWZpbGVgLiBJJiMzOTtsbCBvcGVuIHRoYXQgdXAgYW5kIHNlYXJjaCBmb3IgYGRldm1lbS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnVpbGQgcmVjaXBlIG9yIGF0IGxlYXN0IGEgY2x1ZSBhYm91dCB0aGUgZmluYWwgbG9jYXRpb24gb2YgdGhlIHJlbGV2YW50IG9iamVjdCBmaWxlIGFuZCB3aGVyZSBpdCBlbmRzIHVwIGluIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgdXRpbGl0eSBpcyBjb25zdHJ1Y3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bWVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDg9b2JqLSQoQ09ORklHX05FVF9URVNUKSAmIzQzOz0gbmV0X3Rlc3Qub1xubmV0L2NvcmUvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ub1xubmV0L2NvcmUvTWFrZWZpbGUtNTAtb2JqLSQoQ09ORklHX0RFQlVHX05FVCkgJiM0Mzs9IGxvY2tfZGVidWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERldm1lbSBaZXJvLUNvcHkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXQmIzM5O3MgYWJvdXQgYENPTkZJR19ORVRfREVWTUVNYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbmV0L2NvcmUvZGF0YWdyYW0uY2AsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24mIzM5O3MgdXBzdHJlYW0gaXMgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBhbmQgdWx0aW1hdGVseSBieSBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gSXQgYXBwZWFycyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGAtRUVYSVNUYCByZXR1cm4gaWYgdGhlcmUgYXJlIGFscmVhZHkgcmVhZGFibGUgZnJhZ21lbnRzIGluIHRoZSBTS0Igd2hlbiB1c2luZyBkZXZpY2UgbWVtb3J5LgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgcHJldmVudGluZyB0aGUgbWl4aW5nIG9mIHJlZ3VsYXIgbWVtb3J5IChyZWFkYWJsZSBmcmFncykgd2l0aCBkZXZpY2UgbWVtb3J5ICh1bnJlYWRhYmxlKSB3aXRoaW4gdGhlIHNhbWUgU0tCLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYmVoYXZpb3VyIHNoaWZ0LCBhbmQgdGhhdCBpbW1lZGlhdGVseSBzaWduYWxzICYjMzQ7ZnV6emluZyBjYW5kaWRhdGUmIzM0OyB0byBtZS4gSSBuZWVkIHRvIGdldCB0aGlzIHRlc3RlZCB1bmRlciBkaWZmZXJlbnQgY29uZGl0aW9ucy4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sczogYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCwgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAsIGFuZCBvZiBjb3Vyc2UgYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEhvd2V2ZXIsIHRoZSBmdW5jdGlvbiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIHNlZW1zIG1vcmUgc3BlY2lmaWMsIGEgYmV0dGVyIHRvdWNocG9pbnQuCgpOZXh0IHN0ZXA6IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGFsc28gY2FsbGluZyBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLCBqdXN0IHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIGFueXRoaW5nIG1vcmUgdGhhbiBvcmlnaW5hbGx5IHRob3VnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2RhdGFncmFtLmM9NzA2PXN0YXRpYyBpbnRcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzA3Onplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzA4LVx0XHRcdCAgICAgIGludCBsZW5ndGgsXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYwLVx0ZWxzZSBpZiAoYmluZGluZylcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYxOlx0XHRyZXQgPSB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShza2IsIGZyb20sIGxlbmd0aCwgYmluZGluZyk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIEZ1bmN0aW9uIENhbGxzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgdGhlIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGJ5IGEgbGltaXRlZCBzZXQgb2YgZnVuY3Rpb25zLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gLCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAsIGFuZCBgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYmAuIFRoaXMgbmFycm93aW5nIGlzIGhlbHBmdWw7IGl0IGdpdmVzIG1lIGEgY29uY2lzZSBjYWxsIGdyYXBoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGFyZ3VtZW50IGJpbmRpbmcsIGluIHBhcnRpY3VsYXIgdGhlIGFyZ3VtZW50IHBhc3NlZCBmcm9tIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLiBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB0aGUgYGJpbmRpbmdgIGFyZ3VtZW50LiBSaWdodCwgaXQgbG9va3MgbGlrZSBvbmx5IGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gIHBhc3NlcyBhIGBiaW5kaW5nYCBhcmd1bWVudCB0byBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgcGF0aCBmb3IgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAgaXMgYmVoYXZpbmcgYXMgSSBleHBlY3QgaXQgdG8uICBCdXQgYmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgb3RoZXIgY29kZSBwYXRocywgc28gbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSBoYXZlIGFsbCB0aGUgcGllY2VzIGFuZCBoYXZlIG5vdCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weV9pdGVyX2RncmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcwLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXHRcdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTk0OT1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjUtXHRcdH0gZWxzZSB7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjY2Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY3LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE0NDk9c3RhdGljIGludCBfX2lwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzEtXHRcdH0gZWxzZSB7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTgzMjpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzMtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgYW5kIFplcm9jb3B5IFNHcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYCBhbmQgaW1tZWRpYXRlbHkgdGhlIGZhY3QgdGhhdCBpdCBwYXNzZXMgYSBgTlVMTGAgZm9yIGBiaW5kaW5nYCBncmFicyBteSBhdHRlbnRpb24uIFRoYXQmIzM5O3MgdW51c3VhbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBpcyB0aGUgY2FzZS4gU2luY2UgYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYCBpcyBsaWtlbHkgaGFuZGxpbmcgZGF0YWdyYW0gc29ja2V0cyB1c2luZyB6ZXJvLWNvcHkgbWVjaGFuaXNtcywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpZyBpbnRvIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgaW4gdGhpcyBzY2VuYXJpbyBhbmQgdW5kZXJzdGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIG9mIHRoYXQgYE5VTExgIHZhbHVlIGZvciBiaW5kaW5nLiBJcyB0aGlzIGNvcnJlY3Q/IElzIHRoaXMgaW50ZW5kZWQsIGFuZCBpZiBzbywgd2hhdCBhcmUgdGhlIGFyY2hpdGVjdHVyYWwgcmVhc29ucz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIHJhY2UgY29uZGl0aW9ucyBhcmlzaW5nIGZyb20gdGhpcyBkZXNpZ24gY2hvaWNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlIGFic2VuY2Ugb2YgYSBiaW5kaW5nIGFmZmVjdHMgdGhlIGhhbmRsaW5nIG9mIHRoZSBzY2F0dGVyZWQvZ2F0aGVyZWQgZGF0YS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHplcm8tY29weSBhbmQgc2NhdHRlci1nYXRoZXIgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCB3aXRoIGRhdGFncmFtIHNvY2tldHMgYW5kIHdoYXQgY29udGV4dCBpcyByZXF1aXJlZC4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIHRyYWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6ZXJvY29weV9zZ19mcm9tX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGFwLmM9NTcyPXN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcbi0tXG5kcml2ZXJzL25ldC90YXAuYy02MjctXHRpZiAoemVyb2NvcHkpXG5kcml2ZXJzL25ldC90YXAuYzo2Mjg6XHRcdGVyciA9IHplcm9jb3B5X3NnX2Zyb21faXRlcihza2IsIGZyb20pO1xuZHJpdmVycy9uZXQvdGFwLmMtNjI5LVx0ZWxzZVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTE3MjY9c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTgxOS1cdFx0XHQgKiBJZiB6ZXJvY29weSBpcyBlbmFibGVkLCB0aGVuIHRoaXMgbGF5b3V0IHdpbGwgYmVcbmRyaXZlcnMvbmV0L3R1bi5jOjE4MjA6XHRcdFx0ICogb3ZlcndyaXR0ZW4gYnkgemVyb2NvcHlfc2dfZnJvbV9pdGVyKCkuXG5kcml2ZXJzL25ldC90dW4uYy0xODIxLVx0XHRcdCAqL1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE4MzUtXHRcdGlmICh6ZXJvY29weSlcbmRyaXZlcnMvbmV0L3R1bi5jOjE4MzY6XHRcdFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XG5kcml2ZXJzL25ldC90dW4uYy0xODM3LVx0XHRlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYxPXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzYyLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzYzOmludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2NC1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc3MT1zdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3My17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzQ6XHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBza2ItXHUwMDNlc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzUtXHRcdFx0XHQgICAgICAgTlVMTCk7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjUyPWludCBza2JfY29weV9kYXRhZ3JhbV9mcm9tX2l0ZXJfZnVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjUzLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGludCBsZW4pO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0MjU0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm0pO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjU1LXZvaWQgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaD0xMzg9ZW51bSBza2JfZHJvcF9yZWFzb24ge1xuLS1cbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxMi1cdCAqIEBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUOiBmYWlsZWQgdG8gY29weSBkYXRhIGZyb20gdXNlciBzcGFjZSxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oOjQxMzpcdCAqIGUuZy4sIHZpYSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKSBvciBza2Jfb3JwaGFuX2ZyYWdzX3J4KClcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxNC1cdCAqL1xuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9NzA3PXplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc0OC1cbm5ldC9jb3JlL2RhdGFncmFtLmM6NzQ5OmludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzUwLVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtfVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzU6RVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc3LS8qKlxubmV0L2NvcmUvZGF0YWdyYW0uYzo3Nzg6ICpcdHplcm9jb3B5X3NnX2Zyb21faXRlciAtIEJ1aWxkIGEgemVyb2NvcHkgZGF0YWdyYW0gZnJvbSBhbiBpb3ZfaXRlclxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzktICpcdEBza2I6IGJ1ZmZlciB0byBjb3B5XG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODYtICovXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc4NzppbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzg4LXtcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5NC1cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk1Olx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKE5VTEwsIE5VTEwsIHNrYiwgZnJvbSwgfjBVLCBOVUxMKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk2LX1cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk3OkVYUE9SVF9TWU1CT0woemVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk4LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MDY9aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTkyNy1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5Mjg6XHRlcnIgPSBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrLCBza2IsIFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgbGVuLFxubmV0L2NvcmUvc2tidWZmLmMtMTkyOS1cdFx0XHRcdCAgICAgIGJpbmRpbmcpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz04MD1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfZmlsbF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODctXHRpZiAoemNvcHkpXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6ODg6XHRcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIE5VTEwsIHNrYixcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04OS1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgbGVuLCBOVUxMKTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MjEyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmlydGlvX3RyYW5zcG9ydF9hbGxvY19za2Ioc3RydWN0IHZpcnRpb192c29ja19wa3RfaW5mbyAqaW5mbyxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjM5LVx0LyogSWYgJiMzOTt2c2smIzM5OyAhPSBOVUxMIHRoZW4gcGF5bG9hZCBpcyBhbHdheXMgcHJlc2VudCwgc28gd2Vcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDA6XHQgKiB3aWxsIG5ldmVyIGNhbGwgJiMzOTtfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJiMzOTsgYmVsb3cgd2l0aG91dFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0MS1cdCAqIHNldHRpbmcgc2tiIG93bmVyIGluICYjMzk7c2tiX3NldF9vd25lcl93KCkmIzM5Oy4gVGhlIG9ubHkgY2FzZVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDYtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQ3Olx0LyogU2V0IG93bmVyIGhlcmUsIGJlY2F1c2UgJiMzOTtfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJiMzOTsgdXNlc1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0OC1cdCAqIG93bmVyIG9mIHNrYiB3aXRob3V0IGNoZWNrIHRvIHVwZGF0ZSAmIzM5O3NrX3dtZW1fYWxsb2MmIzM5Oy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgQmluZGluZyBQYXJhbWV0ZXIgaW4gWmVyb2NvcHkgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGBiaW5kaW5nYCBwYXJhbWV0ZXIgaXMgYmVpbmcgdXNlZCBpbiB0aGUgemVyb2NvcHkgY29kZSBwYXRoLiBUaGUgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGRpcmVjdGx5IGhhbmRzIG9mZiBhIGBOVUxMYCBmb3IgYGJpbmRpbmdgLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIG5vdCB0aGUgcHJpbWFyeSBzb3VyY2Ugb2YgdGhlIHZhbHVlLiBSaWdodCwgc28gbG9va2luZyBkZWVwZXIsIGBiaW5kaW5nYCBzZWVtcyB0byBiZSBzb3VyY2VkIGZyb20gYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuIE5vdywgd2hlcmUgZG9lcyAqdGhhdCogZ2V0IGNhbGxlZD8gQWgsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGlzIG1lYW5zIHRoYXQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBjYW4gZXZlbnR1YWxseSByZWFjaCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIHRocm91Z2ggdGhpcyBzcGVjaWZpYyBwYXRoLiBCdXQsIGlzIHRoYXQgcmlnaHQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyAqZGVmaW5pdGVseSogdGhlICpvbmx5KiBjYWxsZXIgb2YgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuIExldCBtZSBzZWUuLi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc3LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MDQ9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MDUtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTA2OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkwNy1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTQzLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NDQ6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDUtXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMzM4LVxubmV0L2lwdjQvdGNwLmM6MTMzOTpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc2ssIHNrYiwgbXNnLCBjb3B5LCB1YXJnLFxubmV0L2lwdjQvdGNwLmMtMTM0MC1cdFx0XHRcdFx0XHQgICAgICAgYmluZGluZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzQ2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFplcm8tQ29weSBOZXR3b3JrIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBjYWxsIHN0YWNrLCBhbmQgaXQgbG9va3MgbGlrZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIGNvZGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGZvciB6ZXJvLWNvcHkgb3BlcmF0aW9ucy4gVGhhdCBuYXJyb3dzIGRvd24gbXkgZm9jdXMgc2lnbmlmaWNhbnRseS4gVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCBhcmU6IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAsIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAsIGFuZCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIG1lY2hhbmljcyBvZiB0aGlzIHplcm8tY29weSBpbXBsZW1lbnRhdGlvbi4KCkJhc2VkIG9uIHRoaXMsIGl0IGFsc28gc2VlbXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBiZSBgTkVUX0RFVk1FTWAuIEkmIzM5O2xsIHdhbnQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gTGV0JiMzOTtzIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgYE5FVF9ERVZNRU1gIGlzLCBpbiBmYWN0LCB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBnb3Zlcm5pbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBsaWtlbHkgZGVmaW5lZCBpbiBgbmV0L2NvcmUvS2NvbmZpZ2AsIHdoaWNoIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgaXRzIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfREVWTUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9LY29uZmlnLTY4LVxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cbm5ldC9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc4MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgTkVUX0RFVk1FTWAgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YC4gVGhhdCBpbnN0YW50bHkgZmxhZ3Mgc29tZXRoaW5nIGltcG9ydGFudCDigJMgaXQmIzM5O3MgYSBkZWZhdWx0IGJvb2xlYW4sIHNldCB0byAmIzM0O3llcy4mIzM0OyBUaGlzIHJlcXVpcmVzIGNsb3NlciBpbnNwZWN0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRlZmF1bHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBhcm91bmQgbGluZSA2OTsgdGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSB0aGUgZGVmaW5pdGlvbiByZXNpZGVzLCBhbmQgd2hlcmUgdGhlIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLCBjb21tZW50cywgYW5kIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlLiBVbmRlcnN0YW5kaW5nICp3aHkqIGl0JiMzOTtzIHNldCB0aGlzIHdheSBpcyBjcnVjaWFsOyBpcyBpdCBlbmFibGluZyBhIGZlYXR1cmUsIG9yIGlzIGl0IG1lcmVseSBleHBvc2luZyBhbiBvcHRpb24/IEtub3dpbmcgdGhlIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgZXNzZW50aWFsIHRvIG15IGFuYWx5c2lzLiBJIGhhdmUgdG8gc2VlIHdoYXQgdGhpcyBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdGNvbmZpZyBORVRfUkVESVJFQ1RcbiAgNjE6XHRcdGJvb2xcbiAgNjI6XHRcbiAgNjM6XHRjb25maWcgU0tCX0RFQ1JZUFRFRFxuICA2NDpcdFx0Ym9vbFxuICA2NTpcdFxuICA2NjpcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xuICA2NzpcdFx0Ym9vbFxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBORVRfREVWTUVNXG4gIDcwOlx0XHRkZWZfYm9vbCB5XG4gIDcxOlx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAgNzI6XHRcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcbiAgNzM6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIE5FVF9TSEFQRVJcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcbiAgNzg6XHRjb25maWcgTkVUX0NSQzMyQ1xuICA3OTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIyMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTkVUX0RFVk1FTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgYW5kIHNldCB0byAmIzM5O3kmIzM5Oy4gVGhhdCYjMzk7cyBnb29kLCBidXQgaXQmIzM5O3MgY29uZGl0aW9uYWwuIEl0JiMzOTtzICpkZXBlbmRlbnQqIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIG9mICp0aG9zZSogYXJlIGVuYWJsZWQgYmVmb3JlIEkgYXNzdW1lIGBORVRfREVWTUVNYCBpcyBhY3R1YWxseSBnb2luZyB0byBiZSBhY3RpdmUuIFRoaXMgbWVhbnMgaWYgYERNQV9TSEFSRURfQlVGRkVSYCBvciBgUEFHRV9QT09MYCBhcmUgbm90IGVuYWJsZWQsIHRoZW4gYE5FVF9ERVZNRU1gIHdvbiYjMzk7dCBiZSBlaXRoZXIsIHJlZ2FyZGxlc3Mgb2YgaXRzIGBkZWZfYm9vbCB5YCBzZXR0aW5nLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBwcmUtcmVxdWlzaXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqS2NvbmZpZyBJbnF1aXJ5OiBETUEgU2hhcmVkIEJ1ZmZlciBCb29sZWFuKioKCk9rYXksIHNvIGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgZGVmaW5lZCBhcyBhIGJvb2xlYW4sIGludGVyZXN0aW5nLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgaXRzIGRlY2xhcmF0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkgaW1tZWRpYXRlbHkgd2FudCB0byBjaGVjayB0aGUgYGRyaXZlcnMvYmFzZS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYXMgYmFzZSBkcml2ZXJzIG9mdGVuIGhhdmUgZnVuZGFtZW50YWwgc2V0dGluZ3MgbGlrZSB0aGlzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgYm9vbGVhbiBpcyBjcnVjaWFsLiBJcyBpdCBwYXJ0IG9mIHRoZSBkZWZhdWx0IGtlcm5lbCBjb25maWd1cmF0aW9uLCBpcyBpdCBlbmFibGVkIG9uIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGlzIGl0IHBhcnQgb2YgYSBicm9hZGVyIG1vZHVsZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIGRyaXZlciBvcHRpb25zIGFzIEkgZXhwbG9yZSB0aGlzLiBUaGlzIHdpbGwgcXVpY2tseSBnaXZlIG1lIGFuIG92ZXJ2aWV3IG9mIHRoZSByb2xlIGFuZCBwdXJwb3NlIG9mIHRoaXMgc3BlY2lmaWMgYm9vbGVhbiB3aXRoaW4gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XHRib29sXG4gMjExOlx0XHRzZWxlY3QgR0xPQlxuIDIxMjpcdFxuIDIxMzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbiAyMTQ6XHRcbiAyMTU6XHRjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbiAyMTY6XHRcdGJvb2xcbiAyMTc6XHRcdGRlZmF1bHQgblxuIDIxODpcdFx0c2VsZWN0IElSUV9XT1JLXG4gMjE5Olx0XHRoZWxwXG4gMjIwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3IgYnVmZmVyLXNoYXJpbmcgYmV0d2VlblxuIDIyMTpcdFx0ICBtdWx0aXBsZSBkcml2ZXJzLiBBIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIHVzaW5nIGRyaXZlclxuIDIyMjpcdFx0ICBBUElzIGV4dGVuc2lvbjsgdGhlIGZpbGUmIzM5O3MgZGVzY3JpcHRvciBjYW4gdGhlbiBiZSBwYXNzZWQgb24gdG8gb3RoZXJcbiAyMjM6XHRcdCAgZHJpdmVyLlxuIDIyNDpcdFxuIDIyNTpcdGNvbmZpZyBETUFfRkVOQ0VfVFJBQ0VcbiAyMjY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHZlcmJvc2UgRE1BX0ZFTkNFX1RSQUNFIG1lc3NhZ2VzXCYjMzQ7XG4gMjI3Olx0XHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXG4gMjI4Olx0XHRoZWxwXG4gMjI5Olx0XHQgIEVuYWJsZSB0aGUgRE1BX0ZFTkNFX1RSQUNFIHByaW50a3MuIFRoaXMgd2lsbCBhZGQgZXh0cmFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNTUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRE1BIGFuZCBQYWdlIFBvb2xzKioKCk9rYXksIHNvIHRoaXMgYERNQV9TSEFSRURfQlVGRkVSYCB0aGluZ+KApiB0aGF0JiMzOTtzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCAqbmVlZHMqIHRvIGJlIGVuYWJsZWQsIHJpZ2h0PyBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBJIG5lZWQgdG8gdmVyaWZ5IGl0LiBXaGF0IEkgKnJlYWxseSogd2FudCB0byBzZWUgaXMgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGBQQUdFX1BPT0xgIGNvbmZpZ3VyYXRpb24uIElzIGl0IGJlaW5nIHVzZWQ/IElzIGl0IGV2ZW4gZGVmaW5lZCBvciBlbmFibGVkPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoaXMgc2hhcmVkIGJ1ZmZlciBpcyB1dGlsaXplZCwgYW5kIHdoZXRoZXIgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgb3B0aW1pemVkIGZ1cnRoZXIsIG9yIGlzIGNhdXNpbmcgYW4gaXNzdWUgc29tZXdoZXJlIGVsc2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgaGVhZGVycyByZXZlYWwuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xuLS1cbm5ldC9LY29uZmlnLTQ5MC1cbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXG5uZXQvS2NvbmZpZy00OTItXHRib29sXG5uZXQvS2NvbmZpZy00OTMtXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xubmV0L0tjb25maWctNDk1LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzczCgkJCQkJCQlvdXRwdXQ6IDE2OQoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgZm9yIEZ1enppbmcgdGhlIERldm1lbSBaZXJvY29weSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2l0dWF0aW9uIGZvciBmdXp6aW5nIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBORVRfREVWTUVNYCBmZWF0dXJlIGFuZCB0aGlzIG5ldyBwYXRjaC4gIEluaXRpYWxseSwgaXQgc2VlbWVkIHN0cmFpZ2h0Zm9yd2FyZDogYFBBR0VfUE9PTGAgaXMgZXNzZW50aWFsbHkgYSBib29sZWFuIGZsYWcsIHNvIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBjb25maWd1cmF0aW9uIEkgbmVlZCB0byB0YXJnZXQuICBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBhcmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgaW4gdGhpcyBpbnN0YW5jZS4gQnV0IHRoZW4gSSBzYXcgdGhhdCBgTkVUX0RFVk1FTWAgaXMgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAsIGFuZCBjcnVjaWFsbHkgZGVwZW5kcyBvbiB0aG9zZSBvdGhlciB0d28uCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHNpbXBseSBzcGVjaWZ5IGBORVRfREVWTUVNYCwgYW5kIGxldCBzeXprYWxsZXIgaGFuZGxlIHRoZSBkZXBlbmRlbmNpZXMuIEhvd2V2ZXIsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIExpc3RpbmcgYE5FVF9ERVZNRU1gIGFsb25lIG1lYW5zIGl0ICpjb3VsZCogYmUgZW5hYmxlZCBpZiB0aGUgZGVwZW5kZW5jaWVzIGV4aXN0LiAgQnV0LCB3aGF0IGlmIHRoZXkgYXJlbiYjMzk7dCBzZWxlY3RlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8gYmUgbW9yZSBleHBsaWNpdC4gIEFsc28sIGl0JiMzOTtzIHdvcnRoIG5vdGluZyB0aGF0IGBQQUdFX1BPT0xgIGlzIG9mdGVuIHNlbGVjdGVkIGJ5IHZhcmlvdXMgbmV0d29yayBkcml2ZXJzLCB3aGlsZSBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIHNlbGVjdGVkIGJ5IERSTSBhbmQgb3RoZXIgc3lzdGVtcy4gU28sIHNpbXBseSBsaXN0aW5nIGBORVRfREVWTUVNYCB3b3VsZCBpbnRyb2R1Y2UgYSByaXNrIG9mIHRoZSBmdXp6ZXIgZmFpbGluZy4gU28sIEkgbmVlZCB0byBsaXN0IHRoZSBkZXBlbmRlbmNpZXMhCgpXaGlsZSBgTkVUX0RFVk1FTWAgaXMgdGhlIG1vc3QgZGlyZWN0IGNvbmZpZyBmb3IgdGhpcyBjb2RlIHBhdGgsIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIFNvLCBJIHdpbGwgbGlzdCBgTkVUX0RFVk1FTWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAuCgpOb3csIG9udG8gdGhlIHBhdGNoIGl0c2VsZi4gTGV0IG1lIHJldmlldyB0aGF0IGNvZGUgYWdhaW4uIEFoLCBoZXJlJiMzOTtzIHRoZSBrZXkgY2hhbmdlOgoKYGBgYwoJaWYgKGkgJmFtcDsmYW1wOyBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKCQlyZXR1cm4gLUVFWElTVDsKYGBgCgpUaGlzIHByZXZlbnRzIGFwcGVuZGluZyBkZXZtZW0gZnJhZ3MgdG8gYW4gU0tCIGlmIGl0IGFscmVhZHkgY29udGFpbnMgcmVhZGFibGUgZnJhZ21lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAsIGFuZCBpdCYjMzk7cyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBlcnJvciBwYXRoICgtRUVYSVNUKSBpcyBoYW5kbGVkIGNvcnJlY3RseSwgYW5kIEkgd2FudCB0byB2ZXJpZnkgdGhhdCBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuCgpUaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZyBhcmU6IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAsIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAsIGFuZCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSYjMzQ7LAogICAgJiMzNDtfX3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSYjMzQ7LAogICAgJiMzNDtfX3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDoyMS44NTYwMTcxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDA3NjUxMDgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtXCIsXG4gICAgXCJfX3plcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICAgIFwic2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjIxLjg1NjAyMjYyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTY1Mzk3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YThhZDA1MzJmMDUyYTg2M2EzMWZjZWYyMDcyNWIwNzc2MDZjM2RjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIzIDA5OjU0OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jXFxuaW5kZXggYzI4NWM2NDY1OTIzZTQuLjM1ZmViYzFjMjVmYTMxIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcXG4rKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jXFxuQEAgLTcxMiw2ICs3MTIsOSBAQCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdHNpemVfdCB2aXJ0X2FkZHIsIHNpemUsIG9mZjtcXG4gXFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XFxuIFxcbitcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbiBcXHQvKiBEZXZtZW0gZmlsbGluZyB3b3JrcyBieSB0YWtpbmcgYW4gSU9WRUMgZnJvbSB0aGUgdXNlciB3aGVyZSB0aGVcXG4gXFx0ICogaW92X2FkZHJzIGFyZSBpbnRlcnByZXRlZCBhcyBhbiBvZmZzZXQgaW4gYnl0ZXMgaW50byB0aGUgZG1hLWJ1ZiB0b1xcbiBcXHQgKiBzZW5kIGZyb20uIFdlIGRvIG5vdCBzdXBwb3J0IG90aGVyIGl0ZXIgdHlwZXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjIyLjIxMzIyNTgzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExOTcxOTI5NDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtXCIsXG4gICAgXCJfX3plcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICAgIFwic2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGE4YWQwNTMyZjA1MmE4NjNhMzFmY2VmMjA3MjViMDc3NjA2YzNkY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDA5OjU0OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbmluZGV4IGMyODVjNjQ2NTkyM2U0Li4zNWZlYmMxYzI1ZmEzMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcbisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbkBAIC03MTIsNiArNzEyLDkgQEAgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0c2l6ZV90IHZpcnRfYWRkciwgc2l6ZSwgb2ZmO1xuIFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG4gXG4rXHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1xuIFx0LyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlXG4gXHQgKiBpb3ZfYWRkcnMgYXJlIGludGVycHJldGVkIGFzIGFuIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBkbWEtYnVmIHRvXG4gXHQgKiBzZW5kIGZyb20uIFdlIGRvIG5vdCBzdXBwb3J0IG90aGVyIGl0ZXIgdHlwZXMuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDoyMi4yMTMyMjcxODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkzMzc2Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTmV0L0NvcmUgRGF0YWdyYW0gUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBzZWUgd2UgaGF2ZSBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuIEltbWVkaWF0ZWx5LCBteSBhdHRlbnRpb24gemVyb2VzIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBiZWluZyBtb2RpZmllZDogYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gemVyby1jb3B5IGRhdGEgdHJhbnNmZXIsIGxpa2VseSBpbnZvbHZpbmcgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgZnJvbSBhIGRldmljZSdzIG1lbW9yeSBpbnRvIGFuIFNLQiAoU29ja2V0IEJ1ZmZlcikuIFRoaXMgaXMgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcmVhLCBzbyBsZXQncyBnZXQgYSBnb29kIGxvb2sgYXQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBpdHNlbGYgd2l0aGluIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5LiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaW1wbGljYXRpb25zIGZvciBkaWZmZXJlbnQgbmV0d29yayBpbnRlcmZhY2VzLCBwb3RlbnRpYWxseSBhbnkgc2VjdXJpdHkgY29uY2VybnMgcmVsYXRlZCB0byBhY2Nlc3NpbmcgZGV2aWNlIG1lbW9yeSwgYW5kIG9mIGNvdXJzZSwgdGhlIGltcGFjdCBvbiBvdmVyYWxsIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDoyNi4wMDY2MDU3MzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMjUxMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGF0YWdyYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kYXRhZ3JhbS5jPTcwNj1zdGF0aWMgaW50XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3MDc6emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzA4LVxcdFxcdFxcdCAgICAgIGludCBsZW5ndGgsXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTc0OT1pbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2MC1cXHRlbHNlIGlmIChiaW5kaW5nKVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYxOlxcdFxcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHNrYiwgZnJvbSwgbGVuZ3RoLCBiaW5kaW5nKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjI2LjA2MjgzNzI0OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzIxMzU2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSBjaGFuZ2UsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFplcm8tQ29weSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBzZWVtaW5nbHkgc2ltcGxlIGNoZWNrIHdpdGhpbiB0aGUgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhhdCB0aGV5J3ZlIGFkZGVkOlxuXG5gYGBjXG5cdGlmIChpIFx1MDAyNlx1MDAyNiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcblx0XHRyZXR1cm4gLUVFWElTVDtcbmBgYFxuXG5SaWdodCBhd2F5LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGludGVudGlvbiBoZXJlIGlzIGxpa2VseSByZWxhdGVkIHRvIHByZXZlbnRpbmcgYW4gdW5kZXNpcmFibGUgY29uZGl0aW9uIGR1cmluZyB6ZXJvLWNvcHkgZGF0YSB0cmFuc2Zlci4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGJlIGEgc2FmZWd1YXJkIGFnYWluc3QgYSBzY2VuYXJpbyB3aGVyZSB3ZSdyZSB0cnlpbmcgdG8gdXNlIGRldmljZSBtZW1vcnkgdG8gcG9wdWxhdGUgYW4gYHNrYmAgKHNvY2tldCBidWZmZXIpIHRoYXQgYWxyZWFkeSBoYXMgcmVhZGFibGUgZnJhZ21lbnRzLiBUaGUgYGlgIHZhcmlhYmxlIHByb2JhYmx5IHNpZ25pZmllcyBhbiBpbmRleCBvciBzb21lIG90aGVyIGNvbnRleHQgd2l0aGluIHRoZSBmdW5jdGlvbi5cblxuTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhleSdyZSB0cnlpbmcgdG8gYXZvaWQgYSBjb25mbGljdCwgcGVyaGFwcyBwcmV2ZW50aW5nIGEgZG91YmxlIGNvcHkgb3IgY29ycnVwdGlvbi4gSWYgYSBzb2NrZXQgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gcGFydGlhbGx5IHBvcHVsYXRlZCBvciBpcyBtYXJrZWQgd2l0aCBmcmFnbWVudHMgdGhhdCAqY291bGQqIGJlIHJlYWQsIHRyeWluZyB0byBpbmplY3QgbW9yZSBkYXRhIHZpYSBhIHplcm8tY29weSBtZWNoYW5pc20gbWlnaHQgY3JlYXRlIGlzc3VlcyBvciBsZWFkIHRvIGRhdGEgaW5jb25zaXN0ZW5jaWVzLiBUaGUgYC1FRVhJU1RgIGVycm9yIGNvZGUgaXMgYSBzZW5zaWJsZSBjaG9pY2UsIHNpZ25hbGluZyB0aGF0IHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSBvZiBhbiBleGlzdGluZyBjb25kaXRpb24uXG5cblRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLCBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpYCBpcyB1c2VkLCBhbmQgd2hhdCBgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgIGFjdHVhbGx5IGNoZWNrcy4gVGhlbiwgSSBjYW4gZGVkdWNlIHByZWNpc2VseSB3aHkgdGhpcyBndWFyZCBpcyBuZWNlc3NhcnksIGFuZCB3aGV0aGVyIGl0J3MgY29ycmVjdGx5IGltcGxlbWVudGVkIHRvIHByb3RlY3QgYWdhaW5zdCB0aGUgaW1wbGllZCBkYXRhIGNvcnJ1cHRpb24gb3IgaW5jb3JyZWN0IHJlYWQgc2NlbmFyaW9zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBjb25maWRlbnRseSBhc3Nlc3MgdGhlIHBhdGNoJ3MgbWVyaXQuIElzIHRoaXMgYSBjb21tb24gaXNzdWUgd2l0aCBhIGNlcnRhaW4gZHJpdmVyLCBhIGdlbmVyaWMgcHJvYmxlbSwgb3Igc29tZXRoaW5nIHNwZWNpZmljPyBOb3csIGxldCdzIGdvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjMwLjczNDk3NTA5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2RhdGFncmFtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzA2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzA2OlxcdHN0YXRpYyBpbnRcXG4gNzA3OlxcdHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4gNzA4OlxcdFxcdFxcdFxcdCAgICAgIGludCBsZW5ndGgsXFxuIDcwOTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4gNzEwOlxcdHtcXG4gNzExOlxcdFxcdGludCBpID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncztcXG4gNzEyOlxcdFxcdHNpemVfdCB2aXJ0X2FkZHIsIHNpemUsIG9mZjtcXG4gNzEzOlxcdFxcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xcbiA3MTQ6XFx0XFxuIDcxNTpcXHRcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG4gNzE2OlxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHQvKiBEZXZtZW0gZmlsbGluZyB3b3JrcyBieSB0YWtpbmcgYW4gSU9WRUMgZnJvbSB0aGUgdXNlciB3aGVyZSB0aGVcXG4gNzE5OlxcdFxcdCAqIGlvdl9hZGRycyBhcmUgaW50ZXJwcmV0ZWQgYXMgYW4gb2Zmc2V0IGluIGJ5dGVzIGludG8gdGhlIGRtYS1idWYgdG9cXG4gNzIwOlxcdFxcdCAqIHNlbmQgZnJvbS4gV2UgZG8gbm90IHN1cHBvcnQgb3RoZXIgaXRlciB0eXBlcy5cXG4gNzIxOlxcdFxcdCAqL1xcbiA3MjI6XFx0XFx0aWYgKGlvdl9pdGVyX3R5cGUoZnJvbSkgIT0gSVRFUl9JT1ZFQyBcXHUwMDI2XFx1MDAyNlxcbiA3MjM6XFx0XFx0ICAgIGlvdl9pdGVyX3R5cGUoZnJvbSkgIT0gSVRFUl9VQlVGKVxcbiA3MjQ6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDcyNTpcXHRcXG4gNzI2OlxcdFxcdHdoaWxlIChsZW5ndGggXFx1MDAyNlxcdTAwMjYgaW92X2l0ZXJfY291bnQoZnJvbSkpIHtcXG4gNzI3OlxcdFxcdFxcdGlmIChpID09IE1BWF9TS0JfRlJBR1MpXFxuIDcyODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA3Mjk6XFx0XFxuIDczMDpcXHRcXHRcXHR2aXJ0X2FkZHIgPSAoc2l6ZV90KWl0ZXJfaW92X2FkZHIoZnJvbSk7XFxuIDczMTpcXHRcXHRcXHRuaW92ID0gbmV0X2Rldm1lbV9nZXRfbmlvdl9hdChiaW5kaW5nLCB2aXJ0X2FkZHIsIFxcdTAwMjZvZmYsIFxcdTAwMjZzaXplKTtcXG4gNzMyOlxcdFxcdFxcdGlmICghbmlvdilcXG4gNzMzOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA3MzQ6XFx0XFxuIDczNTpcXHRcXHRcXHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBsZW5ndGgpO1xcbiA3MzY6XFx0XFx0XFx0c2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgaXRlcl9pb3ZfbGVuKGZyb20pKTtcXG4gNzM3OlxcdFxcbiA3Mzg6XFx0XFx0XFx0Z2V0X25ldG1lbShuZXRfaW92X3RvX25ldG1lbShuaW92KSk7XFxuIDczOTpcXHRcXHRcXHRza2JfYWRkX3J4X2ZyYWdfbmV0bWVtKHNrYiwgaSwgbmV0X2lvdl90b19uZXRtZW0obmlvdiksIG9mZixcXG4gNzQwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplLCBQQUdFX1NJWkUpO1xcbiA3NDE6XFx0XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShmcm9tLCBzaXplKTtcXG4gNzQyOlxcdFxcdFxcdGxlbmd0aCAtPSBzaXplO1xcbiA3NDM6XFx0XFx0XFx0aSsrO1xcbiA3NDQ6XFx0XFx0fVxcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRyZXR1cm4gMDtcXG4gNzQ3OlxcdH1cXG4gNzQ4OlxcdFxcbiA3NDk6XFx0aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbiA3NTA6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4gNzUxOlxcdFxcdFxcdFxcdCAgICBzaXplX3QgbGVuZ3RoLFxcbiA3NTI6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbiA3NTM6XFx0e1xcbiA3NTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBvcmlnX3NpemUgPSBza2ItXFx1MDAzZXRydWVzaXplO1xcbiA3NTU6XFx0XFx0dW5zaWduZWQgbG9uZyB0cnVlc2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTQ6MzAuNzM1MDYzNDkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0MTUxNDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGdW5jdGlvbmFsIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90aGluZyB0b28gZHJhc3RpYyBhdCBmaXJzdCBnbGFuY2UuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBjZW50ZXJzIGFyb3VuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBUaGF0J3MgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgSSBrbm93IHRoYXQncyBjYWxsZWQgZnJvbSBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLiBOb3cgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyB3aWRlc3ByZWFkIGlzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2U/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgY2FsbCBzaXRlcyBvZiBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGJyZWFkdGggb2YgcG90ZW50aWFsIGNvbnNlcXVlbmNlIG9mIHRoZXNlIGNoYW5nZXMuIFRpbWUgdG8gdHJhY2UgdGhvc2UgY2FsbHMgYW5kIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjYWxsZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjM1LjE3NjU3OTk3M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEyMjg2NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9femVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzYyLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2MzppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3My17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc0OlxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cXHUwMDNlc2ssIHNrYiwgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIsIGxlbixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzUtXFx0XFx0XFx0XFx0ICAgICAgIE5VTEwpO1xcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDgtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDk6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzUwLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3NC19XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzU6RVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzYtXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTc4Nz1pbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk0LVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk1OlxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihOVUxMLCBOVUxMLCBza2IsIGZyb20sIH4wVSwgTlVMTCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTYtfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkwNj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MjctXFxubmV0L2NvcmUvc2tidWZmLmM6MTkyODpcXHRlcnIgPSBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrLCBza2IsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sXFxubmV0L2NvcmUvc2tidWZmLmMtMTkyOS1cXHRcXHRcXHRcXHQgICAgICBiaW5kaW5nKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz04MD1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfZmlsbF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cXHRpZiAoemNvcHkpXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjg4OlxcdFxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIE5VTEwsIHNrYixcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODktXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTIxMj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZpcnRpb190cmFuc3BvcnRfYWxsb2Nfc2tiKHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0X2luZm8gKmluZm8sXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjM5LVxcdC8qIElmICd2c2snICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDA6XFx0ICogd2lsbCBuZXZlciBjYWxsICdfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJyBiZWxvdyB3aXRob3V0XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0MS1cXHQgKiBzZXR0aW5nIHNrYiBvd25lciBpbiAnc2tiX3NldF9vd25lcl93KCknLiBUaGUgb25seSBjYXNlXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ2LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XFx0LyogU2V0IG93bmVyIGhlcmUsIGJlY2F1c2UgJ19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCknIHVzZXNcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVxcdCAqIG93bmVyIG9mIHNrYiB3aXRob3V0IGNoZWNrIHRvIHVwZGF0ZSAnc2tfd21lbV9hbGxvYycuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjM2Ljk4ODg3MTMwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzUxNTg2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipBbmFseXppbmcgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBVc2FnZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2VudGVyZWQgYXJvdW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAuIFRoZSBjcml0aWNhbCBjbHVlIGhlcmUgaXMgdGhhdCBpdCBnZXRzIGNhbGxlZCBmcm9tIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAsIGJ1dCBvbmx5IHdoZW4gdGhlIGBiaW5kaW5nYCBwYXJhbWV0ZXIgaXNuJ3QgTlVMTC4gVGhhdCdzIHRoZSBrZXkgY29uZGl0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjayBkb3duIGFsbCBpbnN0YW5jZXMgd2hlcmUgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBpcyAqYWN0dWFsbHkqIGNhbGxlZCB3aXRoIGBiaW5kaW5nYCBzZXQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aC4gQSBxdWljayBzZWFyY2ggcmV2ZWFscyB0aGF0IHRoZSByZWxldmFudCBjYWxsIHNpdGUgaXMgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAgd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIE5vdyBJIGtub3cgd2hlcmUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gIHVzZXMgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCB3aGVuIHRoZSBgYmluZGluZ2AgaXMgbm9uLU5VTEwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDo0MC44NjQwMzMxMzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Nzg0NTU3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkwND1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MDUtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkwNjppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTA3LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk0My19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk0NDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDUtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTMzOC1cXG5uZXQvaXB2NC90Y3AuYzoxMzM5OlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjQyLjY0MjQ5NjM5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Nzg4NjIyNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipEZWx2aW5nIGludG8gdGhlIFRDUCBTZW5kIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBiZWluZyBpbnZva2VkIGZyb20gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgcm9sZSBpbiB6ZXJvLWNvcHkgdHJhbnNtaXNzaW9uIHdpdGhpbiB0aGUgVENQIHNlbmRpbmcgcGF0aC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY2FsbGluZyBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCB3aGljaCByZXNpZGVzIGluIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCBkZXRlcm1pbmUgaG93IGl0IGludGVyYWN0cyB3aXRoIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLiBJJ2xsIHdhbnQgdG8gdHJhY2UgaG93IGRhdGEgaXMgcHJlcGFyZWQsIGhhbmRsZWQsIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6ZWQgdXNpbmcgemVyby1jb3B5IHRlY2huaXF1ZXMgd2l0aGluIHRoZSBUQ1Agc2VuZGluZyBwcm9jZXNzLiBJdCdzIHRpbWUgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93IGFuZCBhbnkgcG9zc2libGUgYm90dGxlbmVja3Mgb3Igb3Bwb3J0dW5pdGllcyBmb3IgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQgd2l0aGluIHRoaXMgc2VnbWVudCBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTQ6NTAuNDMxMTIxNTY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTMyMTpcXHRcXHRcXHRcXHRcXHRza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCBpLCBwZnJhZy1cXHUwMDNlcGFnZSxcXG4xMzIyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHBmcmFnLVxcdTAwM2VvZmZzZXQsIGNvcHkpO1xcbjEzMjM6XFx0XFx0XFx0XFx0XFx0cGFnZV9yZWZfaW5jKHBmcmFnLVxcdTAwM2VwYWdlKTtcXG4xMzI0OlxcdFxcdFxcdFxcdH1cXG4xMzI1OlxcdFxcdFxcdFxcdHBmcmFnLVxcdTAwM2VvZmZzZXQgKz0gY29weTtcXG4xMzI2OlxcdFxcdFxcdH0gZWxzZSBpZiAoemMgPT0gTVNHX1pFUk9DT1BZKSAge1xcbjEzMjc6XFx0XFx0XFx0XFx0LyogRmlyc3QgYXBwZW5kIHRvIGEgZnJhZ2xlc3Mgc2tiIGJ1aWxkcyBpbml0aWFsXFxuMTMyODpcXHRcXHRcXHRcXHQgKiBwdXJlIHplcm9jb3B5IHNrYlxcbjEzMjk6XFx0XFx0XFx0XFx0ICovXFxuMTMzMDpcXHRcXHRcXHRcXHRpZiAoIXNrYi1cXHUwMDNlbGVuKVxcbjEzMzE6XFx0XFx0XFx0XFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmbGFncyB8PSBTS0JGTF9QVVJFX1pFUk9DT1BZO1xcbjEzMzI6XFx0XFxuMTMzMzpcXHRcXHRcXHRcXHRpZiAoIXNrYl96Y29weV9wdXJlKHNrYikpIHtcXG4xMzM0OlxcdFxcdFxcdFxcdFxcdGNvcHkgPSB0Y3Bfd21lbV9zY2hlZHVsZShzaywgY29weSk7XFxuMTMzNTpcXHRcXHRcXHRcXHRcXHRpZiAoIWNvcHkpXFxuMTMzNjpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHdhaXRfZm9yX3NwYWNlO1xcbjEzMzc6XFx0XFx0XFx0XFx0fVxcbjEzMzg6XFx0XFxuMTMzOTpcXHRcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc2ssIHNrYiwgbXNnLCBjb3B5LCB1YXJnLFxcbjEzNDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJpbmRpbmcpO1xcbjEzNDE6XFx0XFx0XFx0XFx0aWYgKGVyciA9PSAtRU1TR1NJWkUgfHwgZXJyID09IC1FRVhJU1QpIHtcXG4xMzQyOlxcdFxcdFxcdFxcdFxcdHRjcF9tYXJrX3B1c2godHAsIHNrYik7XFxuMTM0MzpcXHRcXHRcXHRcXHRcXHRnb3RvIG5ld19zZWdtZW50O1xcbjEzNDQ6XFx0XFx0XFx0XFx0fVxcbjEzNDU6XFx0XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTM0NjpcXHRcXHRcXHRcXHRcXHRnb3RvIGRvX2Vycm9yO1xcbjEzNDc6XFx0XFx0XFx0XFx0Y29weSA9IGVycjtcXG4xMzQ4OlxcdFxcdFxcdH0gZWxzZSBpZiAoemMgPT0gTVNHX1NQTElDRV9QQUdFUykge1xcbjEzNDk6XFx0XFx0XFx0XFx0LyogU3BsaWNlIGluIGRhdGEgaWYgd2UgY2FuOyBjb3B5IGlmIHdlIGNhbid0LiAqL1xcbjEzNTA6XFx0XFx0XFx0XFx0aWYgKHRjcF9kb3duZ3JhZGVfemNvcHlfcHVyZShzaywgc2tiKSlcXG4xMzUxOlxcdFxcdFxcdFxcdFxcdGdvdG8gd2FpdF9mb3Jfc3BhY2U7XFxuMTM1MjpcXHRcXHRcXHRcXHRjb3B5ID0gdGNwX3dtZW1fc2NoZWR1bGUoc2ssIGNvcHkpO1xcbjEzNTM6XFx0XFx0XFx0XFx0aWYgKCFjb3B5KVxcbjEzNTQ6XFx0XFx0XFx0XFx0XFx0Z290byB3YWl0X2Zvcl9zcGFjZTtcXG4xMzU1OlxcdFxcbjEzNTY6XFx0XFx0XFx0XFx0ZXJyID0gc2tiX3NwbGljZV9mcm9tX2l0ZXIoc2tiLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgY29weSk7XFxuMTM1NzpcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjEzNTg6XFx0XFx0XFx0XFx0XFx0aWYgKGVyciA9PSAtRU1TR1NJWkUpIHtcXG4xMzU5OlxcdFxcdFxcdFxcdFxcdFxcdHRjcF9tYXJrX3B1c2godHAsIHNrYik7XFxuMTM2MDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5ld19zZWdtZW50O1xcbjEzNjE6XFx0XFx0XFx0XFx0XFx0fVxcbjEzNjI6XFx0XFx0XFx0XFx0XFx0Z290byBkb19lcnJvcjtcXG4xMzYzOlxcdFxcdFxcdFxcdH1cXG4xMzY0OlxcdFxcdFxcdFxcdGNvcHkgPSBlcnI7XFxuMTM2NTpcXHRcXG4xMzY2OlxcdFxcdFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTVNHX05PX1NIQVJFRF9GUkFHUykpXFxuMTM2NzpcXHRcXHRcXHRcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZsYWdzIHw9IFNLQkZMX1NIQVJFRF9GUkFHO1xcbjEzNjg6XFx0XFxuMTM2OTpcXHRcXHRcXHRcXHRza193bWVtX3F1ZXVlZF9hZGQoc2ssIGNvcHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDo1MC40MzEzMTgxMTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk0MTM2NDI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFplcm8tQ29weSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB6ZXJvLWNvcHkgZnVuY3Rpb25hbGl0eSBpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGUgYWRkaXRpb24gb2YgdGhpcyBjcnVjaWFsIGNoZWNrIHdpdGhpbiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gOiBgaWYgKGkgXHUwMDI2XHUwMDI2IHNrYl9mcmFnc19yZWFkYWJsZShza2IpKSByZXR1cm4gLUVFWElTVDtgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNvbmZsaWN0IHdoZW4gYXR0ZW1wdGluZyB0byB6ZXJvLWNvcHkgZGF0YSBpbnRvIGFuIFNLQiB0aGF0IGFscmVhZHkgaGFzIGZyYWdlbWVudHMgdGhhdCBjYW4gYmUgcmVhZC5cblxuTm93LCBsZXQncyBjb25uZWN0IHRoZSBkb3RzLiBUaGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGhhbmRsZXMgdGhlIGAtRUVYSVNUYCBlcnJvciB0aGF0IHRoaXMgbmV3IGNoZWNrIGludHJvZHVjZXMuIFRoZSBjb2RlIHNuaXBwZXQgc2hvd3M6XG5cbmBgYGNcblx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5cdFx0XHRcdFx0XHQgICAgICAgYmluZGluZyk7XG5cdFx0XHRpZiAoZXJyID09IC1FTVNHU0laRSB8fCBlcnIgPT0gLUVFWElTVCkge1xuXHRcdFx0XHR0Y3BfbWFya19wdXNoKHRwLCBza2IpO1xuXHRcdFx0XHRnb3RvIG5ld19zZWdtZW50O1xuXHRcdFx0fVxuYGBgXG5cblNvLCB3aGVuIGAtRUVYSVNUYCBpcyByZXR1cm5lZCBieSBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCBncmFjZWZ1bGx5IGhhbmRsZXMgaXQgYnkgdHJpZ2dlcmluZyBgbmV3X3NlZ21lbnRgLCB3aGljaCBtZWFucyBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBzZWdtZW50LiBUaGlzIGluZGljYXRlcyB0aGUgZXhpc3RpbmcgU0tCIGlzIHVuc3VpdGFibGUgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uLCBwcm9iYWJseSBiZWNhdXNlIGl0IGNvbnRhaW5zIHVucmVhZGFibGUgZnJhZ21lbnRzLiBUaGlzIG9jY3VycyB3aGVuIGB6YyA9PSBNU0dfWkVST0NPUFlgIGFuZCBgYmluZGluZ2AgaXNuJ3QgbnVsbC4gVGhlIGBiaW5kaW5nYCBwYXJhbWV0ZXIgaXMgc291cmNlZCBmcm9tIGBzb2NrYy5uZXRtZW1fYmluZGluZ2AuIE5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcm9sZSBvZiBgbmV0bWVtX2JpbmRpbmdgIGlzIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgbG9naWMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGhvdyBhbmQgd2hlbiBgYmluZGluZ2AgKGFuZCB0aGVyZWZvcmUgYHNvY2tjLm5ldG1lbV9iaW5kaW5nYCkgaXMgc2V0IHdpdGhpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gVGhpcyB1bmRlcnN0YW5kaW5nIGlzIGNyaXRpY2FsIHRvIGdyYXNwaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGl0cyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSBpbiB0aGVzZSB6ZXJvLWNvcHkgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDI0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTQ6NTYuMzcyNjg0MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDI3ODc0NTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tjLm5ldG1lbV9iaW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDo1Ny40MTU0ODE4MzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzNjI4MjM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZm9yIEJpbmRpbmcqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBxdWVzdGlvbiBpcyBhYm91dCBob3cgYmluZGluZyByZWxhdGVzIHRvIHRoZSBleGVjdXRpb24gZmxvdyB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGlmIGFuZCB3aGVyZSB0aGUgYmluZGluZyBjb250ZXh0IGlzIHJlbGV2YW50IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJdCdzIGNydWNpYWwgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgcG9ydCwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc29ja2V0J3MgYmluZGluZywgYXJlIHV0aWxpemVkLiBJcyBiaW5kaW5nIGNoZWNrZWQgZGlyZWN0bHk/IE9yIGRvZXMgdGhlIGZ1bmN0aW9uIHJlbHkgb24gcHJlY2VkaW5nIHNldHVwIHRoYXQgKmFzc3VtZXMqIHRoZSBzb2NrZXQgaXMgYm91bmQ/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgY2hlY2tzLCBjb25kaXRpb25hbCBicmFuY2hlcywgb3IgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzZXMgdGhhdCB3b3VsZCBoaW50IGF0IGEgYmluZGluZy1hd2FyZSBvcGVyYXRpb24uIFdlJ3JlIGxvb2tpbmcgZm9yIGFueSBjb2RlIHRoYXQgd291bGQgdHJlYXQgYm91bmQgYW5kIHVuYm91bmQgc29ja2V0cyBkaWZmZXJlbnRseSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc2VuZGluZyBkYXRhLiBUaGUgZ29hbCBpcyB0byBlaXRoZXIgY29uZmlybSBhIGRpcmVjdCBkZXBlbmRlbmN5LCBvciBpZGVudGlmeSBob3cgYmluZGluZyBpbnRlcmFjdHMgd2l0aCB0aGUgc2VuZCBwcm9jZXNzLCBpZiBhdCBhbGwuIFRoaXMgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGFuZCBmb2xsb3dpbmcgZXhlY3V0aW9uIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njk3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTU6MDEuOTUxNzY2NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Njk1MjkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2lwdjQvdGNwLmMtMTExNy17XFxubmV0L2lwdjQvdGNwLmM6MTExODpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyA9IE5VTEw7XFxubmV0L2lwdjQvdGNwLmMtMTExOS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTExNTgtXFx0XFx0XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XFxubmV0L2lwdjQvdGNwLmM6MTE1OTpcXHRcXHRcXHRcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcXG5uZXQvaXB2NC90Y3AuYzoxMTYwOlxcdFxcdFxcdFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG5uZXQvaXB2NC90Y3AuYzoxMTYxOlxcdFxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XFxubmV0L2lwdjQvdGNwLmM6MTE2MjpcXHRcXHRcXHRcXHRcXHRiaW5kaW5nID0gTlVMTDtcXG5uZXQvaXB2NC90Y3AuYy0xMTYzLVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTEzMzktXFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHNrLCBza2IsIG1zZywgY29weSwgdWFyZyxcXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBiaW5kaW5nKTtcXG5uZXQvaXB2NC90Y3AuYy0xMzQxLVxcdFxcdFxcdGlmIChlcnIgPT0gLUVNU0dTSVpFIHx8IGVyciA9PSAtRUVYSVNUKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xNDE5LVxcdFxcdG5ldF96Y29weV9wdXQodWFyZyk7XFxubmV0L2lwdjQvdGNwLmM6MTQyMDpcXHRpZiAoYmluZGluZylcXG5uZXQvaXB2NC90Y3AuYzoxNDIxOlxcdFxcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xcbm5ldC9pcHY0L3RjcC5jLTE0MjItXFx0cmV0dXJuIGNvcGllZCArIGNvcGllZF9zeW47XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xNDM4LVxcdH1cXG5uZXQvaXB2NC90Y3AuYzoxNDM5OlxcdGlmIChiaW5kaW5nKVxcbm5ldC9pcHY0L3RjcC5jOjE0NDA6XFx0XFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19wdXQoYmluZGluZyk7XFxubmV0L2lwdjQvdGNwLmMtMTQ0MS1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI0OTk9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjU5OC1cXHRcXHRcXHRcXHRkbWFidWZfY21zZy5mcmFnX3Rva2VuID0gdGNwX3hhX3Bvb2wudG9rZW5zW3RjcF94YV9wb29sLmlkeF07XFxubmV0L2lwdjQvdGNwLmM6MjU5OTpcXHRcXHRcXHRcXHRkbWFidWZfY21zZy5kbWFidWZfaWQgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKG5pb3YpO1xcbm5ldC9pcHY0L3RjcC5jLTI2MDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjAyLjI0ODcyNTExOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAxOTQ1MDc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVsdmluZyBpbnRvIERldmljZSBNZW1vcnkgVENQIEJpbmRpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYGJpbmRpbmdgIGhlcmUsIGFuZCBpdCdzIGJlaW5nIGFjcXVpcmVkIHVzaW5nIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgYG5ldF9kZXZtZW1gIGZlYXR1cmUg4oCTIHRoZSBkZXZpY2UgbWVtb3J5IFRDUCBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyBgbmV0X2Rldm1lbWAgc28gSSBrbm93IHdoYXQgdGhlIHByZWNvbmRpdGlvbnMgYXJlIGZvciB0aGlzIGNhbGwgdG8gZXZlbiBzdWNjZWVkLiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHdvdWxkIHByb3ZpZGUgaW1wb3J0YW50IGNvbnRleHQgYWJvdXQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgaW52b2x2ZWQgYW5kIHRoZSBjaXJjdW1zdGFuY2VzIHdoZXJlIHRoaXMgcGllY2Ugb2YgY29kZSB3b3VsZCBiZSByZWxldmFudC4gTGV0IG1lIHF1aWNrbHkgdHJhY2sgZG93biB0aGF0IGNvbmZpZ3VyYXRpb24gaXRlbS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njc3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTU6MTMuMjY4MTc3ODY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk3NDU2NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTM3Mj12b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy0zNzYtXFxubmV0L2NvcmUvZGV2bWVtLmM6Mzc3OnN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9kZXZtZW0uYy0zNzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xNTE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE1MjpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XFxubmV0L2NvcmUvZGV2bWVtLmgtMTUzLXN0cnVjdCBuZXRfaW92ICpcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTIyMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoyMjQ6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxubmV0L2NvcmUvZGV2bWVtLmgtMjI1LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTU4LVxcdFxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xcbm5ldC9pcHY0L3RjcC5jOjExNTk6XFx0XFx0XFx0XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XFxubmV0L2lwdjQvdGNwLmMtMTE2MC1cXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjE1LjE2NTY0MDMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNjAzNDA3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6XG5cbioqQ2hlY2tpbmcgdGhlIFJlY2lwZSBmb3IgdGhlIE1lbW9yeSBBY2Nlc3MgVG9vbCoqXG5cblJpZ2h0LCB0aW1lIHRvIHRyYWNrIGRvd24gdGhpcyBgZGV2bWVtLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgbmV0L2NvcmVgIGRpcmVjdG9yeS4gVGhlIG5ldHdvcmsgY29yZSBpcyBhIHByZXR0eSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIGxvdy1sZXZlbCBtZW1vcnkgYWNjZXNzIHRvb2xzLiBBbmQgd2l0aGluIHRoYXQgZGlyZWN0b3J5LCB0aGUgbGlrZWx5IGN1bHByaXQgZm9yIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgYE1ha2VmaWxlYC4gSSdsbCBvcGVuIHRoYXQgdXAgYW5kIHNlYXJjaCBmb3IgYGRldm1lbS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnVpbGQgcmVjaXBlIG9yIGF0IGxlYXN0IGEgY2x1ZSBhYm91dCB0aGUgZmluYWwgbG9jYXRpb24gb2YgdGhlIHJlbGV2YW50IG9iamVjdCBmaWxlIGFuZCB3aGVyZSBpdCBlbmRzIHVwIGluIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgdXRpbGl0eSBpcyBjb25zdHJ1Y3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM3NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjIzLjQyNTk4MzI0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyOTQ2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bWVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ4PW9iai0kKENPTkZJR19ORVRfVEVTVCkgKz0gbmV0X3Rlc3Qub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ5Om9iai0kKENPTkZJR19ORVRfREVWTUVNKSArPSBkZXZtZW0ub1xcbm5ldC9jb3JlL01ha2VmaWxlLTUwLW9iai0kKENPTkZJR19ERUJVR19ORVQpICs9IGxvY2tfZGVidWcub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NToyMy40ODgyODE1NjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwODE1MzI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEZXZtZW0gWmVyby1Db3B5IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpdCdzIGFib3V0IGBDT05GSUdfTkVUX0RFVk1FTWAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uJ3MgdXBzdHJlYW0gaXMgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBhbmQgdWx0aW1hdGVseSBieSBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gSXQgYXBwZWFycyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGAtRUVYSVNUYCByZXR1cm4gaWYgdGhlcmUgYXJlIGFscmVhZHkgcmVhZGFibGUgZnJhZ21lbnRzIGluIHRoZSBTS0Igd2hlbiB1c2luZyBkZXZpY2UgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBwcmV2ZW50aW5nIHRoZSBtaXhpbmcgb2YgcmVndWxhciBtZW1vcnkgKHJlYWRhYmxlIGZyYWdzKSB3aXRoIGRldmljZSBtZW1vcnkgKHVucmVhZGFibGUpIHdpdGhpbiB0aGUgc2FtZSBTS0IuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJlaGF2aW91ciBzaGlmdCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyBcImZ1enppbmcgY2FuZGlkYXRlXCIgdG8gbWUuIEkgbmVlZCB0byBnZXQgdGhpcyB0ZXN0ZWQgdW5kZXIgZGlmZmVyZW50IGNvbmRpdGlvbnMuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sczogYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCwgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAsIGFuZCBvZiBjb3Vyc2UgYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEhvd2V2ZXIsIHRoZSBmdW5jdGlvbiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIHNlZW1zIG1vcmUgc3BlY2lmaWMsIGEgYmV0dGVyIHRvdWNocG9pbnQuXG5cbk5leHQgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgYWxzbyBjYWxsaW5nIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAsIGp1c3QgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgYW55dGhpbmcgbW9yZSB0aGFuIG9yaWdpbmFsbHkgdGhvdWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NToyOS4yOTY0Mzc4NzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTM2OTE0MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2RhdGFncmFtLmM9NzA2PXN0YXRpYyBpbnRcXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjcwNzp6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MDgtXFx0XFx0XFx0ICAgICAgaW50IGxlbmd0aCxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYwLVxcdGVsc2UgaWYgKGJpbmRpbmcpXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NjE6XFx0XFx0cmV0ID0gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc2tiLCBmcm9tLCBsZW5ndGgsIGJpbmRpbmcpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYyLVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTU6MzEuMTkwMTM4MDk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mjk5NzgyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRoZSBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIG9ubHkgY2FsbGVkIGJ5IGEgbGltaXRlZCBzZXQgb2YgZnVuY3Rpb25zLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGl0J3MgY2FsbGVkIGJ5IGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCwgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2ZpbGxfc2tiYC4gVGhpcyBuYXJyb3dpbmcgaXMgaGVscGZ1bDsgaXQgZ2l2ZXMgbWUgYSBjb25jaXNlIGNhbGwgZ3JhcGguIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYXJndW1lbnQgYmluZGluZywgaW4gcGFydGljdWxhciB0aGUgYXJndW1lbnQgcGFzc2VkIGZyb20gYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuIEknbSBjb25jZXJuZWQgYWJvdXQgdGhlIGBiaW5kaW5nYCBhcmd1bWVudC4gUmlnaHQsIGl0IGxvb2tzIGxpa2Ugb25seSBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBwYXNzZXMgYSBgYmluZGluZ2AgYXJndW1lbnQgdG8gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIHBhdGggZm9yIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0IGl0IHRvLiAgQnV0IGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIG90aGVyIGNvZGUgcGF0aHMsIHNvIGxldCdzIHRha2UgYSBsb29rIGF0IGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSBoYXZlIGFsbCB0aGUgcGllY2VzIGFuZCBoYXZlIG5vdCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTM1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjM1LjkyMDExODY1OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNTIwMjY2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfemVyb2NvcHlfaXRlcl9kZ3JhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzY4PWludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzE6c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz05NDk9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjUtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjY2OlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI2Ny1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xNDQ5PXN0YXRpYyBpbnQgX19pcDZfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzEtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTgzMjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMzLVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NTozNy41NDUzMjc3ODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NzY1MzAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGFuZCBaZXJvY29weSBTR3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGFuZCBpbW1lZGlhdGVseSB0aGUgZmFjdCB0aGF0IGl0IHBhc3NlcyBhIGBOVUxMYCBmb3IgYGJpbmRpbmdgIGdyYWJzIG15IGF0dGVudGlvbi4gVGhhdCdzIHVudXN1YWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgaXMgdGhlIGNhc2UuIFNpbmNlIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgaXMgbGlrZWx5IGhhbmRsaW5nIGRhdGFncmFtIHNvY2tldHMgdXNpbmcgemVyby1jb3B5IG1lY2hhbmlzbXMsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIGluIHRoaXMgc2NlbmFyaW8gYW5kIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBvZiB0aGF0IGBOVUxMYCB2YWx1ZSBmb3IgYmluZGluZy4gSXMgdGhpcyBjb3JyZWN0PyBJcyB0aGlzIGludGVuZGVkLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZSBhcmNoaXRlY3R1cmFsIHJlYXNvbnM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgYXJpc2luZyBmcm9tIHRoaXMgZGVzaWduIGNob2ljZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBhYnNlbmNlIG9mIGEgYmluZGluZyBhZmZlY3RzIHRoZSBoYW5kbGluZyBvZiB0aGUgc2NhdHRlcmVkL2dhdGhlcmVkIGRhdGEuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB6ZXJvLWNvcHkgYW5kIHNjYXR0ZXItZ2F0aGVyIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgd2l0aCBkYXRhZ3JhbSBzb2NrZXRzIGFuZCB3aGF0IGNvbnRleHQgaXMgcmVxdWlyZWQuIEl0J3MgdGltZSB0byBmb2xsb3cgdGhlIHRyYWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjQxLjYxMjk4NDY2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNzMwNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGFwLmM9NTcyPXN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTYyNy1cXHRpZiAoemVyb2NvcHkpXFxuZHJpdmVycy9uZXQvdGFwLmM6NjI4OlxcdFxcdGVyciA9IHplcm9jb3B5X3NnX2Zyb21faXRlcihza2IsIGZyb20pO1xcbmRyaXZlcnMvbmV0L3RhcC5jLTYyOS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xNzI2PXN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTgxOS1cXHRcXHRcXHQgKiBJZiB6ZXJvY29weSBpcyBlbmFibGVkLCB0aGVuIHRoaXMgbGF5b3V0IHdpbGwgYmVcXG5kcml2ZXJzL25ldC90dW4uYzoxODIwOlxcdFxcdFxcdCAqIG92ZXJ3cml0dGVuIGJ5IHplcm9jb3B5X3NnX2Zyb21faXRlcigpLlxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjEtXFx0XFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xODM1LVxcdFxcdGlmICh6ZXJvY29weSlcXG5kcml2ZXJzL25ldC90dW4uYzoxODM2OlxcdFxcdFxcdGVyciA9IHplcm9jb3B5X3NnX2Zyb21faXRlcihza2IsIGZyb20pO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MzctXFx0XFx0ZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYxPXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2Mi1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2NC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzMte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBza2ItXFx1MDAzZXNrLCBza2IsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc1LVxcdFxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDI1Mj1pbnQgc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyX2Z1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCxcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGludCBsZW4pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI1NDppbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJtKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTUtdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg9MTM4PWVudW0gc2tiX2Ryb3BfcmVhc29uIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxMi1cXHQgKiBAU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVDogZmFpbGVkIHRvIGNvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UsXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlxcdCAqIGUuZy4sIHZpYSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKSBvciBza2Jfb3JwaGFuX2ZyYWdzX3J4KClcXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTQtXFx0ICovXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc0OC1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc0OTppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NTAtXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc0LX1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ny0vKipcXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3ODogKlxcdHplcm9jb3B5X3NnX2Zyb21faXRlciAtIEJ1aWxkIGEgemVyb2NvcHkgZGF0YWdyYW0gZnJvbSBhbiBpb3ZfaXRlclxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc5LSAqXFx0QHNrYjogYnVmZmVyIHRvIGNvcHlcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzg2LSAqL1xcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg3OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzg4LXtcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk0LVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk1OlxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihOVUxMLCBOVUxMLCBza2IsIGZyb20sIH4wVSwgTlVMTCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTYtfVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk3OkVYUE9SVF9TWU1CT0woemVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5OC1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MDY9aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI3LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5Mjg6XFx0ZXJyID0gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBzaywgc2tiLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MjktXFx0XFx0XFx0XFx0ICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9ODA9c3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X2ZpbGxfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODctXFx0aWYgKHpjb3B5KVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcXHRcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBOVUxMLCBza2IsXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLCBOVUxMKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTIzOS1cXHQvKiBJZiAndnNrJyAhPSBOVUxMIHRoZW4gcGF5bG9hZCBpcyBhbHdheXMgcHJlc2VudCwgc28gd2VcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQwOlxcdCAqIHdpbGwgbmV2ZXIgY2FsbCAnX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoKScgYmVsb3cgd2l0aG91dFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDEtXFx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJ3NrYl9zZXRfb3duZXJfdygpJy4gVGhlIG9ubHkgY2FzZVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQ3OlxcdC8qIFNldCBvd25lciBoZXJlLCBiZWNhdXNlICdfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJyB1c2VzXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0OC1cXHQgKiBvd25lciBvZiBza2Igd2l0aG91dCBjaGVjayB0byB1cGRhdGUgJ3NrX3dtZW1fYWxsb2MnLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NTo0My4yMjQ3MTk0OTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUwNDgwODYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBCaW5kaW5nIFBhcmFtZXRlciBpbiBaZXJvY29weSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGBiaW5kaW5nYCBwYXJhbWV0ZXIgaXMgYmVpbmcgdXNlZCBpbiB0aGUgemVyb2NvcHkgY29kZSBwYXRoLiBUaGUgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGRpcmVjdGx5IGhhbmRzIG9mZiBhIGBOVUxMYCBmb3IgYGJpbmRpbmdgLiBUaGF0IHN1Z2dlc3RzIGl0J3Mgbm90IHRoZSBwcmltYXJ5IHNvdXJjZSBvZiB0aGUgdmFsdWUuIFJpZ2h0LCBzbyBsb29raW5nIGRlZXBlciwgYGJpbmRpbmdgIHNlZW1zIHRvIGJlIHNvdXJjZWQgZnJvbSBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC4gTm93LCB3aGVyZSBkb2VzICp0aGF0KiBnZXQgY2FsbGVkPyBBaCwgaXQncyBjYWxsZWQgZnJvbSBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gVGhpcyBtZWFucyB0aGF0IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FuIGV2ZW50dWFsbHkgcmVhY2ggYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCB0aHJvdWdoIHRoaXMgc3BlY2lmaWMgcGF0aC4gQnV0LCBpcyB0aGF0IHJpZ2h0PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgKmRlZmluaXRlbHkqIHRoZSAqb25seSogY2FsbGVyIG9mIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLiBMZXQgbWUgc2VlLi4uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTU6NDguNzI5NTMxNTY5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAxOTE2NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weV9pdGVyX3N0cmVhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MDQ9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTA1LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MDY6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTkwNy1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDMtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NDQ6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTQ1LVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTEzMzgtXFxubmV0L2lwdjQvdGNwLmM6MTMzOTpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc2ssIHNrYiwgbXNnLCBjb3B5LCB1YXJnLFxcbm5ldC9pcHY0L3RjcC5jLTEzNDAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJpbmRpbmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NTo1MC4zMzE0NTQyOTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NTczNDQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBaZXJvLUNvcHkgTmV0d29yayBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgdGhlIGNhbGwgc3RhY2ssIGFuZCBpdCBsb29rcyBsaWtlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHRoZSAqb25seSogZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgY29kZSBJJ20gaW50ZXJlc3RlZCBpbiBmb3IgemVyby1jb3B5IG9wZXJhdGlvbnMuIFRoYXQgbmFycm93cyBkb3duIG15IGZvY3VzIHNpZ25pZmljYW50bHkuIFRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgYXJlOiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLCBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBhbmQgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBtZWNoYW5pY3Mgb2YgdGhpcyB6ZXJvLWNvcHkgaW1wbGVtZW50YXRpb24uXG5cbkJhc2VkIG9uIHRoaXMsIGl0IGFsc28gc2VlbXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBiZSBgTkVUX0RFVk1FTWAuIEknbGwgd2FudCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBORVRfREVWTUVNYCBpcywgaW4gZmFjdCwgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gZ292ZXJuaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gSXQncyBsaWtlbHkgZGVmaW5lZCBpbiBgbmV0L2NvcmUvS2NvbmZpZ2AsIHdoaWNoIGlzIHdoZXJlIEknbGwgZmluZCBpdHMgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNDYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTU6NTQuNjI3MTkxNjQ1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcwMjE4MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfREVWTUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcXG4tLVxcbm5ldC9LY29uZmlnLTY4LVxcbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXFxubmV0L0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NTo1Ni40OTc0MTczMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM3NzQ1NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYE5FVF9ERVZNRU1gIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YC4gVGhhdCBpbnN0YW50bHkgZmxhZ3Mgc29tZXRoaW5nIGltcG9ydGFudCDigJMgaXQncyBhIGRlZmF1bHQgYm9vbGVhbiwgc2V0IHRvIFwieWVzLlwiIFRoaXMgcmVxdWlyZXMgY2xvc2VyIGluc3BlY3Rpb24uIExldCdzIGRpZyBpbnRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZWZhdWx0LiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBhcm91bmQgbGluZSA2OTsgdGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBkZWZpbml0aW9uIHJlc2lkZXMsIGFuZCB3aGVyZSB0aGUgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMsIGNvbW1lbnRzLCBhbmQgcmVsYXRpb25zaGlwcyB0byBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUuIFVuZGVyc3RhbmRpbmcgKndoeSogaXQncyBzZXQgdGhpcyB3YXkgaXMgY3J1Y2lhbDsgaXMgaXQgZW5hYmxpbmcgYSBmZWF0dXJlLCBvciBpcyBpdCBtZXJlbHkgZXhwb3NpbmcgYW4gb3B0aW9uPyBLbm93aW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgZXNzZW50aWFsIHRvIG15IGFuYWx5c2lzLiBJIGhhdmUgdG8gc2VlIHdoYXQgdGhpcyBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc4MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjU5LjczNTE2NTU0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRjb25maWcgTkVUX1JFRElSRUNUXFxuICA2MTpcXHRcXHRib29sXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBTS0JfREVDUllQVEVEXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NTo1OS43MzUyMzc1MDhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMjcwODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5FVF9ERVZNRU0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgYW5kIHNldCB0byAneScuIFRoYXQncyBnb29kLCBidXQgaXQncyBjb25kaXRpb25hbC4gSXQncyAqZGVwZW5kZW50KiBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIG9mICp0aG9zZSogYXJlIGVuYWJsZWQgYmVmb3JlIEkgYXNzdW1lIGBORVRfREVWTUVNYCBpcyBhY3R1YWxseSBnb2luZyB0byBiZSBhY3RpdmUuIFRoaXMgbWVhbnMgaWYgYERNQV9TSEFSRURfQlVGRkVSYCBvciBgUEFHRV9QT09MYCBhcmUgbm90IGVuYWJsZWQsIHRoZW4gYE5FVF9ERVZNRU1gIHdvbid0IGJlIGVpdGhlciwgcmVnYXJkbGVzcyBvZiBpdHMgYGRlZl9ib29sIHlgIHNldHRpbmcuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBzdGF0dXMgb2YgYERNQV9TSEFSRURfQlVGRkVSYC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgcHJlLXJlcXVpc2l0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMjAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU2OjAyLjk2Nzk0ODQ0NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjY1Nzg0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9LY29uZmlnPTIxMz1zb3VyY2UgXFxcImRyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTQtXFxuZHJpdmVycy9iYXNlL0tjb25maWc6MjE1OmNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU2OjA0LjYyNDYxNDAyN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA1MTM5ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBJbnF1aXJ5OiBETUEgU2hhcmVkIEJ1ZmZlciBCb29sZWFuKipcblxuT2theSwgc28gYERNQV9TSEFSRURfQlVGRkVSYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgaW50ZXJlc3RpbmcuIE15IG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCBpdHMgZGVjbGFyYXRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGNoZWNrIHRoZSBgZHJpdmVycy9iYXNlL0tjb25maWdgIGZpbGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGJhc2UgZHJpdmVycyBvZnRlbiBoYXZlIGZ1bmRhbWVudGFsIHNldHRpbmdzIGxpa2UgdGhpcy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGJvb2xlYW4gaXMgY3J1Y2lhbC4gSXMgaXQgcGFydCBvZiB0aGUgZGVmYXVsdCBrZXJuZWwgY29uZmlndXJhdGlvbiwgaXMgaXQgZW5hYmxlZCBvbiBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBpcyBpdCBwYXJ0IG9mIGEgYnJvYWRlciBtb2R1bGU/IEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIGRyaXZlciBvcHRpb25zIGFzIEkgZXhwbG9yZSB0aGlzLiBUaGlzIHdpbGwgcXVpY2tseSBnaXZlIG1lIGFuIG92ZXJ2aWV3IG9mIHRoZSByb2xlIGFuZCBwdXJwb3NlIG9mIHRoaXMgc3BlY2lmaWMgYm9vbGVhbiB3aXRoaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NjowOC4wMjk3NTYzNzJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdFxcdGJvb2xcXG4gMjExOlxcdFxcdHNlbGVjdCBHTE9CXFxuIDIxMjpcXHRcXG4gMjEzOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG4gMjE2OlxcdFxcdGJvb2xcXG4gMjE3OlxcdFxcdGRlZmF1bHQgblxcbiAyMTg6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuIDIxOTpcXHRcXHRoZWxwXFxuIDIyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3IgYnVmZmVyLXNoYXJpbmcgYmV0d2VlblxcbiAyMjE6XFx0XFx0ICBtdWx0aXBsZSBkcml2ZXJzLiBBIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIHVzaW5nIGRyaXZlclxcbiAyMjI6XFx0XFx0ICBBUElzIGV4dGVuc2lvbjsgdGhlIGZpbGUncyBkZXNjcmlwdG9yIGNhbiB0aGVuIGJlIHBhc3NlZCBvbiB0byBvdGhlclxcbiAyMjM6XFx0XFx0ICBkcml2ZXIuXFxuIDIyNDpcXHRcXG4gMjI1OlxcdGNvbmZpZyBETUFfRkVOQ0VfVFJBQ0VcXG4gMjI2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB2ZXJib3NlIERNQV9GRU5DRV9UUkFDRSBtZXNzYWdlc1xcXCJcXG4gMjI3OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gMjI4OlxcdFxcdGhlbHBcXG4gMjI5OlxcdFxcdCAgRW5hYmxlIHRoZSBETUFfRkVOQ0VfVFJBQ0UgcHJpbnRrcy4gVGhpcyB3aWxsIGFkZCBleHRyYVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NjowOC4wMjk4MjgzMjJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNzcyMDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRE1BIGFuZCBQYWdlIFBvb2xzKipcblxuT2theSwgc28gdGhpcyBgRE1BX1NIQVJFRF9CVUZGRVJgIHRoaW5n4oCmIHRoYXQncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgKm5lZWRzKiB0byBiZSBlbmFibGVkLCByaWdodD8gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgSSBuZWVkIHRvIHZlcmlmeSBpdC4gV2hhdCBJICpyZWFsbHkqIHdhbnQgdG8gc2VlIGlzIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBgUEFHRV9QT09MYCBjb25maWd1cmF0aW9uLiBJcyBpdCBiZWluZyB1c2VkPyBJcyBpdCBldmVuIGRlZmluZWQgb3IgZW5hYmxlZD8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoaXMgc2hhcmVkIGJ1ZmZlciBpcyB1dGlsaXplZCwgYW5kIHdoZXRoZXIgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgb3B0aW1pemVkIGZ1cnRoZXIsIG9yIGlzIGNhdXNpbmcgYW4gaXNzdWUgc29tZXdoZXJlIGVsc2UuIExldCdzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzIHJldmVhbC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNTUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU2OjExLjE1NzU1MTUwOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NjcwNDQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9QT09MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcbm5ldC9LY29uZmlnLTQ5My1cXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbm5ldC9LY29uZmlnLTQ5NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTY6MTIuODA0MjY2NTM5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNTQyNDExOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBGdXp6aW5nIHRoZSBEZXZtZW0gWmVyb2NvcHkgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBzaXR1YXRpb24gZm9yIGZ1enppbmcgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYE5FVF9ERVZNRU1gIGZlYXR1cmUgYW5kIHRoaXMgbmV3IHBhdGNoLiAgSW5pdGlhbGx5LCBpdCBzZWVtZWQgc3RyYWlnaHRmb3J3YXJkOiBgUEFHRV9QT09MYCBpcyBlc3NlbnRpYWxseSBhIGJvb2xlYW4gZmxhZywgc28gaXQncyBub3QgYSBkaXJlY3QgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gdGFyZ2V0LiAgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIGluIHRoaXMgaW5zdGFuY2UuIEJ1dCB0aGVuIEkgc2F3IHRoYXQgYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLCBhbmQgY3J1Y2lhbGx5IGRlcGVuZHMgb24gdGhvc2Ugb3RoZXIgdHdvLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHNpbXBseSBzcGVjaWZ5IGBORVRfREVWTUVNYCwgYW5kIGxldCBzeXprYWxsZXIgaGFuZGxlIHRoZSBkZXBlbmRlbmNpZXMuIEhvd2V2ZXIsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIExpc3RpbmcgYE5FVF9ERVZNRU1gIGFsb25lIG1lYW5zIGl0ICpjb3VsZCogYmUgZW5hYmxlZCBpZiB0aGUgZGVwZW5kZW5jaWVzIGV4aXN0LiAgQnV0LCB3aGF0IGlmIHRoZXkgYXJlbid0IHNlbGVjdGVkIGJ5IGRlZmF1bHQ/IEkgbmVlZCB0byBiZSBtb3JlIGV4cGxpY2l0LiAgQWxzbywgaXQncyB3b3J0aCBub3RpbmcgdGhhdCBgUEFHRV9QT09MYCBpcyBvZnRlbiBzZWxlY3RlZCBieSB2YXJpb3VzIG5ldHdvcmsgZHJpdmVycywgd2hpbGUgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBzZWxlY3RlZCBieSBEUk0gYW5kIG90aGVyIHN5c3RlbXMuIFNvLCBzaW1wbHkgbGlzdGluZyBgTkVUX0RFVk1FTWAgd291bGQgaW50cm9kdWNlIGEgcmlzayBvZiB0aGUgZnV6emVyIGZhaWxpbmcuIFNvLCBJIG5lZWQgdG8gbGlzdCB0aGUgZGVwZW5kZW5jaWVzIVxuXG5XaGlsZSBgTkVUX0RFVk1FTWAgaXMgdGhlIG1vc3QgZGlyZWN0IGNvbmZpZyBmb3IgdGhpcyBjb2RlIHBhdGgsIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIFNvLCBJIHdpbGwgbGlzdCBgTkVUX0RFVk1FTWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAuXG5cbk5vdywgb250byB0aGUgcGF0Y2ggaXRzZWxmLiBMZXQgbWUgcmV2aWV3IHRoYXQgY29kZSBhZ2Fpbi4gQWgsIGhlcmUncyB0aGUga2V5IGNoYW5nZTpcblxuYGBgY1xuXHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5cdFx0cmV0dXJuIC1FRVhJU1Q7XG5gYGBcblxuVGhpcyBwcmV2ZW50cyBhcHBlbmRpbmcgZGV2bWVtIGZyYWdzIHRvIGFuIFNLQiBpZiBpdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLCBhbmQgaXQncyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBlcnJvciBwYXRoICgtRUVYSVNUKSBpcyBoYW5kbGVkIGNvcnJlY3RseSwgYW5kIEkgd2FudCB0byB2ZXJpZnkgdGhhdCBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIGFyZTogYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCwgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM3MywiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTY6MjEuODU4NTI0MjU5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5ODI4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZNRU1cIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1cIixcbiAgICBcIl9femVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gICAgXCJza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCB0byBwcmV2ZW50IGFwcGVuZGluZyBkZXZtZW0gZnJhZ21lbnRzIHRvIGFuIHNrYiB0aGF0IGFscmVhZHkgY29udGFpbnMgcmVhZGFibGUgZnJhZ21lbnRzLCByZXR1cm5pbmcgYC1FRVhJU1RgLiBUaGlzIGFmZmVjdHMgdGhlIFRDUCB6ZXJvY29weSBwYXRoIHdoZW4gdXNpbmcgZGV2aWNlIG1lbW9yeSAoZGV2bWVtKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhpcyBuZXcgZXJyb3IgcGF0aCBpcyBoYW5kbGVkIGNvcnJlY3RseSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtXCIsXG4gICAgXCJfX3plcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICAgIFwic2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrs2s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 09:17:40 +0000 UTC FinishedAt: 2026-07-23 09:56:24 +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": "f43ee0c0730d6191629b5ee1ceae27b1ebfdc047", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f43ee0c0730d6191629b5ee1ceae27b1ebfdc047", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVMEM", "DMA_SHARED_BUFFER" ], "series_id": "8b056e90-5e9b-4050-bd83-e66b0f1ad997" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zerocopy_fill_skb_from_devmem", "__zerocopy_sg_from_iter", "skb_zerocopy_iter_stream" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSYjMzQ7LAogICAgJiMzNDtfX3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YThhZDA1MzJmMDUyYTg2M2EzMWZjZWYyMDcyNWIwNzc2MDZjM2RjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDk6NTQ6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbmluZGV4IGMyODVjNjQ2NTkyM2U0Li4zNWZlYmMxYzI1ZmEzMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbkBAIC03MTIsNiAmIzQzOzcxMiw5IEBAIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbiBcdHNpemVfdCB2aXJ0X2FkZHIsIHNpemUsIG9mZjtcbiBcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xuIFxuJiM0MztcdGlmIChpIFx1MDAyNlx1MDAyNiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcbiBcdC8qIERldm1lbSBmaWxsaW5nIHdvcmtzIGJ5IHRha2luZyBhbiBJT1ZFQyBmcm9tIHRoZSB1c2VyIHdoZXJlIHRoZVxuIFx0ICogaW92X2FkZHJzIGFyZSBpbnRlcnByZXRlZCBhcyBhbiBvZmZzZXQgaW4gYnl0ZXMgaW50byB0aGUgZG1hLWJ1ZiB0b1xuIFx0ICogc2VuZCBmcm9tLiBXZSBkbyBub3Qgc3VwcG9ydCBvdGhlciBpdGVyIHR5cGVzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfREVWTUVNJiMzNDssCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0mIzM0OywKICAgICYjMzQ7X196ZXJvY29weV9zZ19mcm9tX2l0ZXImIzM0OywKICAgICYjMzQ7c2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIHRvIHByZXZlbnQgYXBwZW5kaW5nIGRldm1lbSBmcmFnbWVudHMgdG8gYW4gc2tiIHRoYXQgYWxyZWFkeSBjb250YWlucyByZWFkYWJsZSBmcmFnbWVudHMsIHJldHVybmluZyBgLUVFWElTVGAuIFRoaXMgYWZmZWN0cyB0aGUgVENQIHplcm9jb3B5IHBhdGggd2hlbiB1c2luZyBkZXZpY2UgbWVtb3J5IChkZXZtZW0pLiBGdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGlzIG5ldyBlcnJvciBwYXRoIGlzIGhhbmRsZWQgY29ycmVjdGx5IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YThhZDA1MzJmMDUyYTg2M2EzMWZjZWYyMDcyNWIwNzc2MDZjM2RjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMDk6NTQ6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwppbmRleCBjMjg1YzY0NjU5MjNlNC4uMzVmZWJjMWMyNWZhMzEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtNzEyLDYgJiM0Mzs3MTIsOSBAQCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sCiAJc2l6ZV90IHZpcnRfYWRkciwgc2l6ZSwgb2ZmOwogCXN0cnVjdCBuZXRfaW92ICpuaW92OwogCiYjNDM7CWlmIChpICZhbXA7JmFtcDsgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpCiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsKIAkvKiBEZXZtZW0gZmlsbGluZyB3b3JrcyBieSB0YWtpbmcgYW4gSU9WRUMgZnJvbSB0aGUgdXNlciB3aGVyZSB0aGUKIAkgKiBpb3ZfYWRkcnMgYXJlIGludGVycHJldGVkIGFzIGFuIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBkbWEtYnVmIHRvCiAJICogc2VuZCBmcm9tLiBXZSBkbyBub3Qgc3VwcG9ydCBvdGhlciBpdGVyIHR5cGVzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBOZXQvQ29yZSBEYXRhZ3JhbSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgc2VlIHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gSW1tZWRpYXRlbHksIG15IGF0dGVudGlvbiB6ZXJvZXMgaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkOiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gemVyby1jb3B5IGRhdGEgdHJhbnNmZXIsIGxpa2VseSBpbnZvbHZpbmcgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgZnJvbSBhIGRldmljZSYjMzk7cyBtZW1vcnkgaW50byBhbiBTS0IgKFNvY2tldCBCdWZmZXIpLiBUaGlzIGlzIHBvdGVudGlhbGx5IGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXJlYSwgc28gbGV0JiMzOTtzIGdldCBhIGdvb2QgbG9vayBhdCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGl0c2VsZiB3aXRoaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGltcGxpY2F0aW9ucyBmb3IgZGlmZmVyZW50IG5ldHdvcmsgaW50ZXJmYWNlcywgcG90ZW50aWFsbHkgYW55IHNlY3VyaXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gYWNjZXNzaW5nIGRldmljZSBtZW1vcnksIGFuZCBvZiBjb3Vyc2UsIHRoZSBpbXBhY3Qgb24gb3ZlcmFsbCBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGF0YWdyYW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kYXRhZ3JhbS5jPTcwNj1zdGF0aWMgaW50XG5uZXQvY29yZS9kYXRhZ3JhbS5jOjcwNzp6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTcwOC1cdFx0XHQgICAgICBpbnQgbGVuZ3RoLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2MC1cdGVsc2UgaWYgKGJpbmRpbmcpXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc2MTpcdFx0cmV0ID0gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc2tiLCBmcm9tLCBsZW5ndGgsIGJpbmRpbmcpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NjItXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlIGNoYW5nZSwgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFplcm8tQ29weSBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2VlbWluZ2x5IHNpbXBsZSBjaGVjayB3aXRoaW4gdGhlIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoYXQgdGhleSYjMzk7dmUgYWRkZWQ6CgpgYGBjCglpZiAoaSAmYW1wOyZhbXA7IHNrYl9mcmFnc19yZWFkYWJsZShza2IpKQoJCXJldHVybiAtRUVYSVNUOwpgYGAKClJpZ2h0IGF3YXksIG15IG1pbmQgc3RhcnRzIHJhY2luZy4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGludGVudGlvbiBoZXJlIGlzIGxpa2VseSByZWxhdGVkIHRvIHByZXZlbnRpbmcgYW4gdW5kZXNpcmFibGUgY29uZGl0aW9uIGR1cmluZyB6ZXJvLWNvcHkgZGF0YSB0cmFuc2Zlci4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGJlIGEgc2FmZWd1YXJkIGFnYWluc3QgYSBzY2VuYXJpbyB3aGVyZSB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHVzZSBkZXZpY2UgbWVtb3J5IHRvIHBvcHVsYXRlIGFuIGBza2JgIChzb2NrZXQgYnVmZmVyKSB0aGF0IGFscmVhZHkgaGFzIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhlIGBpYCB2YXJpYWJsZSBwcm9iYWJseSBzaWduaWZpZXMgYW4gaW5kZXggb3Igc29tZSBvdGhlciBjb250ZXh0IHdpdGhpbiB0aGUgZnVuY3Rpb24uCgpNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gYXZvaWQgYSBjb25mbGljdCwgcGVyaGFwcyBwcmV2ZW50aW5nIGEgZG91YmxlIGNvcHkgb3IgY29ycnVwdGlvbi4gSWYgYSBzb2NrZXQgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gcGFydGlhbGx5IHBvcHVsYXRlZCBvciBpcyBtYXJrZWQgd2l0aCBmcmFnbWVudHMgdGhhdCAqY291bGQqIGJlIHJlYWQsIHRyeWluZyB0byBpbmplY3QgbW9yZSBkYXRhIHZpYSBhIHplcm8tY29weSBtZWNoYW5pc20gbWlnaHQgY3JlYXRlIGlzc3VlcyBvciBsZWFkIHRvIGRhdGEgaW5jb25zaXN0ZW5jaWVzLiBUaGUgYC1FRVhJU1RgIGVycm9yIGNvZGUgaXMgYSBzZW5zaWJsZSBjaG9pY2UsIHNpZ25hbGluZyB0aGF0IHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSBvZiBhbiBleGlzdGluZyBjb25kaXRpb24uCgpUbyBjb25maXJtIHRoaXMgaHlwb3RoZXNpcywgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGlgIGlzIHVzZWQsIGFuZCB3aGF0IGBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKWAgYWN0dWFsbHkgY2hlY2tzLiBUaGVuLCBJIGNhbiBkZWR1Y2UgcHJlY2lzZWx5IHdoeSB0aGlzIGd1YXJkIGlzIG5lY2Vzc2FyeSwgYW5kIHdoZXRoZXIgaXQmIzM5O3MgY29ycmVjdGx5IGltcGxlbWVudGVkIHRvIHByb3RlY3QgYWdhaW5zdCB0aGUgaW1wbGllZCBkYXRhIGNvcnJ1cHRpb24gb3IgaW5jb3JyZWN0IHJlYWQgc2NlbmFyaW9zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBjb25maWRlbnRseSBhc3Nlc3MgdGhlIHBhdGNoJiMzOTtzIG1lcml0LiBJcyB0aGlzIGEgY29tbW9uIGlzc3VlIHdpdGggYSBjZXJ0YWluIGRyaXZlciwgYSBnZW5lcmljIHByb2JsZW0sIG9yIHNvbWV0aGluZyBzcGVjaWZpYz8gTm93LCBsZXQmIzM5O3MgZ28gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGF0YWdyYW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzA2Olx0c3RhdGljIGludFxuIDcwNzpcdHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbiA3MDg6XHRcdFx0XHQgICAgICBpbnQgbGVuZ3RoLFxuIDcwOTpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuIDcxMDpcdHtcbiA3MTE6XHRcdGludCBpID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzO1xuIDcxMjpcdFx0c2l6ZV90IHZpcnRfYWRkciwgc2l6ZSwgb2ZmO1xuIDcxMzpcdFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG4gNzE0Olx0XG4gNzE1Olx0XHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG4gNzE2Olx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDcxNzpcdFxuIDcxODpcdFx0LyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlXG4gNzE5Olx0XHQgKiBpb3ZfYWRkcnMgYXJlIGludGVycHJldGVkIGFzIGFuIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBkbWEtYnVmIHRvXG4gNzIwOlx0XHQgKiBzZW5kIGZyb20uIFdlIGRvIG5vdCBzdXBwb3J0IG90aGVyIGl0ZXIgdHlwZXMuXG4gNzIxOlx0XHQgKi9cbiA3MjI6XHRcdGlmIChpb3ZfaXRlcl90eXBlKGZyb20pICE9IElURVJfSU9WRUMgXHUwMDI2XHUwMDI2XG4gNzIzOlx0XHQgICAgaW92X2l0ZXJfdHlwZShmcm9tKSAhPSBJVEVSX1VCVUYpXG4gNzI0Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDcyNTpcdFxuIDcyNjpcdFx0d2hpbGUgKGxlbmd0aCBcdTAwMjZcdTAwMjYgaW92X2l0ZXJfY291bnQoZnJvbSkpIHtcbiA3Mjc6XHRcdFx0aWYgKGkgPT0gTUFYX1NLQl9GUkFHUylcbiA3Mjg6XHRcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDcyOTpcdFxuIDczMDpcdFx0XHR2aXJ0X2FkZHIgPSAoc2l6ZV90KWl0ZXJfaW92X2FkZHIoZnJvbSk7XG4gNzMxOlx0XHRcdG5pb3YgPSBuZXRfZGV2bWVtX2dldF9uaW92X2F0KGJpbmRpbmcsIHZpcnRfYWRkciwgXHUwMDI2b2ZmLCBcdTAwMjZzaXplKTtcbiA3MzI6XHRcdFx0aWYgKCFuaW92KVxuIDczMzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDczNDpcdFxuIDczNTpcdFx0XHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBsZW5ndGgpO1xuIDczNjpcdFx0XHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBpdGVyX2lvdl9sZW4oZnJvbSkpO1xuIDczNzpcdFxuIDczODpcdFx0XHRnZXRfbmV0bWVtKG5ldF9pb3ZfdG9fbmV0bWVtKG5pb3YpKTtcbiA3Mzk6XHRcdFx0c2tiX2FkZF9yeF9mcmFnX25ldG1lbShza2IsIGksIG5ldF9pb3ZfdG9fbmV0bWVtKG5pb3YpLCBvZmYsXG4gNzQwOlx0XHRcdFx0XHQgICAgICAgc2l6ZSwgUEFHRV9TSVpFKTtcbiA3NDE6XHRcdFx0aW92X2l0ZXJfYWR2YW5jZShmcm9tLCBzaXplKTtcbiA3NDI6XHRcdFx0bGVuZ3RoIC09IHNpemU7XG4gNzQzOlx0XHRcdGkmIzQzOyYjNDM7O1xuIDc0NDpcdFx0fVxuIDc0NTpcdFxuIDc0NjpcdFx0cmV0dXJuIDA7XG4gNzQ3Olx0fVxuIDc0ODpcdFxuIDc0OTpcdGludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbiA3NTA6XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIDc1MTpcdFx0XHRcdCAgICBzaXplX3QgbGVuZ3RoLFxuIDc1MjpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbiA3NTM6XHR7XG4gNzU0Olx0XHR1bnNpZ25lZCBsb25nIG9yaWdfc2l6ZSA9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbiA3NTU6XHRcdHVuc2lnbmVkIGxvbmcgdHJ1ZXNpemU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZ1bmN0aW9uYWwgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90aGluZyB0b28gZHJhc3RpYyBhdCBmaXJzdCBnbGFuY2UuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBjZW50ZXJzIGFyb3VuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIEkga25vdyB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAuIE5vdyB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IHdpZGVzcHJlYWQgaXMgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZT8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjYWxsIHNpdGVzIG9mIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgdG8gdW5kZXJzdGFuZCB0aGUgYnJlYWR0aCBvZiBwb3RlbnRpYWwgY29uc2VxdWVuY2Ugb2YgdGhlc2UgY2hhbmdlcy4gVGltZSB0byB0cmFjZSB0aG9zZSBjYWxscyBhbmQgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhlIGNhbGxncmFwaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cdFx0XHRcdCAgICAgICBOVUxMKTtcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDgtXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc0OTppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc1MC1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc0LX1cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzc1OkVYUE9SVF9TWU1CT0woX196ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03NzYtXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03ODc9aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTQtXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5NTpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihOVUxMLCBOVUxMLCBza2IsIGZyb20sIH4wVSwgTlVMTCk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5Ni19XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkwNj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI3LVxubmV0L2NvcmUvc2tidWZmLmM6MTkyODpcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI5LVx0XHRcdFx0ICAgICAgYmluZGluZyk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cdGlmICh6Y29weSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcdFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXHQvKiBJZiAmIzM5O3ZzayYjMzk7ICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcdCAqIHdpbGwgbmV2ZXIgY2FsbCAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyBiZWxvdyB3aXRob3V0XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJiMzOTtza2Jfc2V0X293bmVyX3coKSYjMzk7LiBUaGUgb25seSBjYXNlXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyB1c2VzXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICYjMzk7c2tfd21lbV9hbGxvYyYjMzk7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqQW5hbHl6aW5nIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgVXNhZ2UqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjZW50ZXJlZCBhcm91bmQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYC4gVGhlIGNyaXRpY2FsIGNsdWUgaGVyZSBpcyB0aGF0IGl0IGdldHMgY2FsbGVkIGZyb20gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYnV0IG9ubHkgd2hlbiB0aGUgYGJpbmRpbmdgIHBhcmFtZXRlciBpc24mIzM5O3QgTlVMTC4gVGhhdCYjMzk7cyB0aGUga2V5IGNvbmRpdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHRyYWNrIGRvd24gYWxsIGluc3RhbmNlcyB3aGVyZSBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzICphY3R1YWxseSogY2FsbGVkIHdpdGggYGJpbmRpbmdgIHNldC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoLiBBIHF1aWNrIHNlYXJjaCByZXZlYWxzIHRoYXQgdGhlIHJlbGV2YW50IGNhbGwgc2l0ZSBpcyBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gTm93IEkga25vdyB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAgdXNlcyBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHdoZW4gdGhlIGBiaW5kaW5nYCBpcyBub24tTlVMTC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MTc3MT1zdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3ODppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xOTA0PUVYUE9SVF9TWU1CT0xfR1BMKG1zZ196ZXJvY29weV91YnVmX29wcyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTA1LVxubmV0L2NvcmUvc2tidWZmLmM6MTkwNjppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MDctXHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTk0My19XG5uZXQvY29yZS9za2J1ZmYuYzoxOTQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbSk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTQ1LVxuLS1cbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTMzOC1cbm5ldC9pcHY0L3RjcC5jOjEzMzk6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHNrLCBza2IsIG1zZywgY29weSwgdWFyZyxcbm5ldC9pcHY0L3RjcC5jLTEzNDAtXHRcdFx0XHRcdFx0ICAgICAgIGJpbmRpbmcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVsdmluZyBpbnRvIHRoZSBUQ1AgU2VuZCBQYXRoKioKCkFscmlnaHQsIHNvIEkgc2VlIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gIGJlaW5nIGludm9rZWQgZnJvbSBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgcm9sZSBpbiB6ZXJvLWNvcHkgdHJhbnNtaXNzaW9uIHdpdGhpbiB0aGUgVENQIHNlbmRpbmcgcGF0aC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY2FsbGluZyBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCB3aGljaCByZXNpZGVzIGluIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCBkZXRlcm1pbmUgaG93IGl0IGludGVyYWN0cyB3aXRoIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLiBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGhvdyBkYXRhIGlzIHByZXBhcmVkLCBoYW5kbGVkLCBhbmQgcG90ZW50aWFsbHkgb3B0aW1pemVkIHVzaW5nIHplcm8tY29weSB0ZWNobmlxdWVzIHdpdGhpbiB0aGUgVENQIHNlbmRpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgdGltZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBwb3NzaWJsZSBib3R0bGVuZWNrcyBvciBvcHBvcnR1bml0aWVzIGZvciBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudCB3aXRoaW4gdGhpcyBzZWdtZW50IG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMjA6XHRcdFx0XHR9IGVsc2Uge1xuMTMyMTpcdFx0XHRcdFx0c2tiX2ZpbGxfcGFnZV9kZXNjKHNrYiwgaSwgcGZyYWctXHUwMDNlcGFnZSxcbjEzMjI6XHRcdFx0XHRcdFx0XHQgICBwZnJhZy1cdTAwM2VvZmZzZXQsIGNvcHkpO1xuMTMyMzpcdFx0XHRcdFx0cGFnZV9yZWZfaW5jKHBmcmFnLVx1MDAzZXBhZ2UpO1xuMTMyNDpcdFx0XHRcdH1cbjEzMjU6XHRcdFx0XHRwZnJhZy1cdTAwM2VvZmZzZXQgJiM0Mzs9IGNvcHk7XG4xMzI2Olx0XHRcdH0gZWxzZSBpZiAoemMgPT0gTVNHX1pFUk9DT1BZKSAge1xuMTMyNzpcdFx0XHRcdC8qIEZpcnN0IGFwcGVuZCB0byBhIGZyYWdsZXNzIHNrYiBidWlsZHMgaW5pdGlhbFxuMTMyODpcdFx0XHRcdCAqIHB1cmUgemVyb2NvcHkgc2tiXG4xMzI5Olx0XHRcdFx0ICovXG4xMzMwOlx0XHRcdFx0aWYgKCFza2ItXHUwMDNlbGVuKVxuMTMzMTpcdFx0XHRcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZsYWdzIHw9IFNLQkZMX1BVUkVfWkVST0NPUFk7XG4xMzMyOlx0XG4xMzMzOlx0XHRcdFx0aWYgKCFza2JfemNvcHlfcHVyZShza2IpKSB7XG4xMzM0Olx0XHRcdFx0XHRjb3B5ID0gdGNwX3dtZW1fc2NoZWR1bGUoc2ssIGNvcHkpO1xuMTMzNTpcdFx0XHRcdFx0aWYgKCFjb3B5KVxuMTMzNjpcdFx0XHRcdFx0XHRnb3RvIHdhaXRfZm9yX3NwYWNlO1xuMTMzNzpcdFx0XHRcdH1cbjEzMzg6XHRcbjEzMzk6XHRcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc2ssIHNrYiwgbXNnLCBjb3B5LCB1YXJnLFxuMTM0MDpcdFx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbjEzNDE6XHRcdFx0XHRpZiAoZXJyID09IC1FTVNHU0laRSB8fCBlcnIgPT0gLUVFWElTVCkge1xuMTM0MjpcdFx0XHRcdFx0dGNwX21hcmtfcHVzaCh0cCwgc2tiKTtcbjEzNDM6XHRcdFx0XHRcdGdvdG8gbmV3X3NlZ21lbnQ7XG4xMzQ0Olx0XHRcdFx0fVxuMTM0NTpcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4xMzQ2Olx0XHRcdFx0XHRnb3RvIGRvX2Vycm9yO1xuMTM0NzpcdFx0XHRcdGNvcHkgPSBlcnI7XG4xMzQ4Olx0XHRcdH0gZWxzZSBpZiAoemMgPT0gTVNHX1NQTElDRV9QQUdFUykge1xuMTM0OTpcdFx0XHRcdC8qIFNwbGljZSBpbiBkYXRhIGlmIHdlIGNhbjsgY29weSBpZiB3ZSBjYW4mIzM5O3QuICovXG4xMzUwOlx0XHRcdFx0aWYgKHRjcF9kb3duZ3JhZGVfemNvcHlfcHVyZShzaywgc2tiKSlcbjEzNTE6XHRcdFx0XHRcdGdvdG8gd2FpdF9mb3Jfc3BhY2U7XG4xMzUyOlx0XHRcdFx0Y29weSA9IHRjcF93bWVtX3NjaGVkdWxlKHNrLCBjb3B5KTtcbjEzNTM6XHRcdFx0XHRpZiAoIWNvcHkpXG4xMzU0Olx0XHRcdFx0XHRnb3RvIHdhaXRfZm9yX3NwYWNlO1xuMTM1NTpcdFxuMTM1NjpcdFx0XHRcdGVyciA9IHNrYl9zcGxpY2VfZnJvbV9pdGVyKHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBjb3B5KTtcbjEzNTc6XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4xMzU4Olx0XHRcdFx0XHRpZiAoZXJyID09IC1FTVNHU0laRSkge1xuMTM1OTpcdFx0XHRcdFx0XHR0Y3BfbWFya19wdXNoKHRwLCBza2IpO1xuMTM2MDpcdFx0XHRcdFx0XHRnb3RvIG5ld19zZWdtZW50O1xuMTM2MTpcdFx0XHRcdFx0fVxuMTM2MjpcdFx0XHRcdFx0Z290byBkb19lcnJvcjtcbjEzNjM6XHRcdFx0XHR9XG4xMzY0Olx0XHRcdFx0Y29weSA9IGVycjtcbjEzNjU6XHRcbjEzNjY6XHRcdFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX05PX1NIQVJFRF9GUkFHUykpXG4xMzY3Olx0XHRcdFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7XG4xMzY4Olx0XG4xMzY5Olx0XHRcdFx0c2tfd21lbV9xdWV1ZWRfYWRkKHNrLCBjb3B5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFplcm8tQ29weSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHplcm8tY29weSBmdW5jdGlvbmFsaXR5IGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGlzIGNydWNpYWwgY2hlY2sgd2l0aGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWA6IGBpZiAoaSAmYW1wOyZhbXA7IHNrYl9mcmFnc19yZWFkYWJsZShza2IpKSByZXR1cm4gLUVFWElTVDtgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNvbmZsaWN0IHdoZW4gYXR0ZW1wdGluZyB0byB6ZXJvLWNvcHkgZGF0YSBpbnRvIGFuIFNLQiB0aGF0IGFscmVhZHkgaGFzIGZyYWdlbWVudHMgdGhhdCBjYW4gYmUgcmVhZC4KCk5vdywgbGV0JiMzOTtzIGNvbm5lY3QgdGhlIGRvdHMuIFRoZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgaGFuZGxlcyB0aGUgYC1FRVhJU1RgIGVycm9yIHRoYXQgdGhpcyBuZXcgY2hlY2sgaW50cm9kdWNlcy4gVGhlIGNvZGUgc25pcHBldCBzaG93czoKCmBgYGMKCQkJZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHNrLCBza2IsIG1zZywgY29weSwgdWFyZywKCQkJCQkJICAgICAgIGJpbmRpbmcpOwoJCQlpZiAoZXJyID09IC1FTVNHU0laRSB8fCBlcnIgPT0gLUVFWElTVCkgewoJCQkJdGNwX21hcmtfcHVzaCh0cCwgc2tiKTsKCQkJCWdvdG8gbmV3X3NlZ21lbnQ7CgkJCX0KYGBgCgpTbywgd2hlbiBgLUVFWElTVGAgaXMgcmV0dXJuZWQgYnkgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCwgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZ3JhY2VmdWxseSBoYW5kbGVzIGl0IGJ5IHRyaWdnZXJpbmcgYG5ld19zZWdtZW50YCwgd2hpY2ggbWVhbnMgaXQgd2lsbCBjcmVhdGUgYSBuZXcgc2VnbWVudC4gVGhpcyBpbmRpY2F0ZXMgdGhlIGV4aXN0aW5nIFNLQiBpcyB1bnN1aXRhYmxlIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiwgcHJvYmFibHkgYmVjYXVzZSBpdCBjb250YWlucyB1bnJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBvY2N1cnMgd2hlbiBgemMgPT0gTVNHX1pFUk9DT1BZYCBhbmQgYGJpbmRpbmdgIGlzbiYjMzk7dCBudWxsLiBUaGUgYGJpbmRpbmdgIHBhcmFtZXRlciBpcyBzb3VyY2VkIGZyb20gYHNvY2tjLm5ldG1lbV9iaW5kaW5nYC4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSByb2xlIG9mIGBuZXRtZW1fYmluZGluZ2AgaXMgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBsb2dpYy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgaG93IGFuZCB3aGVuIGBiaW5kaW5nYCAoYW5kIHRoZXJlZm9yZSBgc29ja2MubmV0bWVtX2JpbmRpbmdgKSBpcyBzZXQgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGlzIHVuZGVyc3RhbmRpbmcgaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgaXRzIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlIGluIHRoZXNlIHplcm8tY29weSBzY2VuYXJpb3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja2MubmV0bWVtX2JpbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGZvciBCaW5kaW5nKioKCkFscmlnaHQsIHRoZSBjb3JlIHF1ZXN0aW9uIGlzIGFib3V0IGhvdyBiaW5kaW5nIHJlbGF0ZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93IHdpdGhpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHVuZGVyc3RhbmQgaWYgYW5kIHdoZXJlIHRoZSBiaW5kaW5nIGNvbnRleHQgaXMgcmVsZXZhbnQgd2l0aGluIHRoaXMgZnVuY3Rpb24uIEl0JiMzOTtzIGNydWNpYWwgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgcG9ydCwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc29ja2V0JiMzOTtzIGJpbmRpbmcsIGFyZSB1dGlsaXplZC4gSXMgYmluZGluZyBjaGVja2VkIGRpcmVjdGx5PyBPciBkb2VzIHRoZSBmdW5jdGlvbiByZWx5IG9uIHByZWNlZGluZyBzZXR1cCB0aGF0ICphc3N1bWVzKiB0aGUgc29ja2V0IGlzIGJvdW5kPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGNoZWNrcywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIGRhdGEgc3RydWN0dXJlIGFjY2Vzc2VzIHRoYXQgd291bGQgaGludCBhdCBhIGJpbmRpbmctYXdhcmUgb3BlcmF0aW9uLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgYW55IGNvZGUgdGhhdCB3b3VsZCB0cmVhdCBib3VuZCBhbmQgdW5ib3VuZCBzb2NrZXRzIGRpZmZlcmVudGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBzZW5kaW5nIGRhdGEuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciBjb25maXJtIGEgZGlyZWN0IGRlcGVuZGVuY3ksIG9yIGlkZW50aWZ5IGhvdyBiaW5kaW5nIGludGVyYWN0cyB3aXRoIHRoZSBzZW5kIHByb2Nlc3MsIGlmIGF0IGFsbC4gVGhpcyBtZWFucyBkaWdnaW5nIGludG8gdGhlIGNvZGUgYW5kIGZvbGxvd2luZyBleGVjdXRpb24gcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JpbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2lwdjQvdGNwLmMtMTExNy17XG5uZXQvaXB2NC90Y3AuYzoxMTE4Olx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcgPSBOVUxMO1xubmV0L2lwdjQvdGNwLmMtMTExOS1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTExNTgtXHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xubmV0L2lwdjQvdGNwLmM6MTE1OTpcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xubmV0L2lwdjQvdGNwLmM6MTE2MDpcdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcbm5ldC9pcHY0L3RjcC5jOjExNjE6XHRcdFx0XHRcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XG5uZXQvaXB2NC90Y3AuYzoxMTYyOlx0XHRcdFx0XHRiaW5kaW5nID0gTlVMTDtcbm5ldC9pcHY0L3RjcC5jLTExNjMtXHRcdFx0XHRcdGdvdG8gb3V0X2Vycjtcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMzM5LVx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbm5ldC9pcHY0L3RjcC5jLTEzNDEtXHRcdFx0aWYgKGVyciA9PSAtRU1TR1NJWkUgfHwgZXJyID09IC1FRVhJU1QpIHtcbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDE5LVx0XHRuZXRfemNvcHlfcHV0KHVhcmcpO1xubmV0L2lwdjQvdGNwLmM6MTQyMDpcdGlmIChiaW5kaW5nKVxubmV0L2lwdjQvdGNwLmM6MTQyMTpcdFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19wdXQoYmluZGluZyk7XG5uZXQvaXB2NC90Y3AuYy0xNDIyLVx0cmV0dXJuIGNvcGllZCAmIzQzOyBjb3BpZWRfc3luO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTE0MzgtXHR9XG5uZXQvaXB2NC90Y3AuYzoxNDM5Olx0aWYgKGJpbmRpbmcpXG5uZXQvaXB2NC90Y3AuYzoxNDQwOlx0XHRuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX3B1dChiaW5kaW5nKTtcbm5ldC9pcHY0L3RjcC5jLTE0NDEtXG4tLVxubmV0L2lwdjQvdGNwLmM9MjQ5OT1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwLmMtMjU5OC1cdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW4gPSB0Y3BfeGFfcG9vbC50b2tlbnNbdGNwX3hhX3Bvb2wuaWR4XTtcbm5ldC9pcHY0L3RjcC5jOjI1OTk6XHRcdFx0XHRkbWFidWZfY21zZy5kbWFidWZfaWQgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKG5pb3YpO1xubmV0L2lwdjQvdGNwLmMtMjYwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkRlbHZpbmcgaW50byBEZXZpY2UgTWVtb3J5IFRDUCBCaW5kaW5nKioKCkFscmlnaHQsIHNvIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYGJpbmRpbmdgIGhlcmUsIGFuZCBpdCYjMzk7cyBiZWluZyBhY3F1aXJlZCB1c2luZyBgbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhlIGBuZXRfZGV2bWVtYCBmZWF0dXJlIOKAkyB0aGUgZGV2aWNlIG1lbW9yeSBUQ1AgaW1wbGVtZW50YXRpb24uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgYG5ldF9kZXZtZW1gIHNvIEkga25vdyB3aGF0IHRoZSBwcmVjb25kaXRpb25zIGFyZSBmb3IgdGhpcyBjYWxsIHRvIGV2ZW4gc3VjY2VlZC4gVW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB3b3VsZCBwcm92aWRlIGltcG9ydGFudCBjb250ZXh0IGFib3V0IHRoZSByZXN0IG9mIHRoZSBjb2RlIGludm9sdmVkIGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB3aGVyZSB0aGlzIHBpZWNlIG9mIGNvZGUgd291bGQgYmUgcmVsZXZhbnQuIExldCBtZSBxdWlja2x5IHRyYWNrIGRvd24gdGhhdCBjb25maWd1cmF0aW9uIGl0ZW0uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz0zNzI9dm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTM3Ni1cbm5ldC9jb3JlL2Rldm1lbS5jOjM3NzpzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9kZXZtZW0uYy0zNzgtXHRcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xNTE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MTUyOm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKTtcbm5ldC9jb3JlL2Rldm1lbS5oLTE1My1zdHJ1Y3QgbmV0X2lvdiAqXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MjIzPXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MjI0Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxubmV0L2NvcmUvZGV2bWVtLmgtMjI1LXtcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTExNTgtXHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xubmV0L2lwdjQvdGNwLmM6MTE1OTpcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xubmV0L2lwdjQvdGNwLmMtMTE2MC1cdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgdGhpbmtlcjoKCioqQ2hlY2tpbmcgdGhlIFJlY2lwZSBmb3IgdGhlIE1lbW9yeSBBY2Nlc3MgVG9vbCoqCgpSaWdodCwgdGltZSB0byB0cmFjayBkb3duIHRoaXMgYGRldm1lbS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LiBUaGUgbmV0d29yayBjb3JlIGlzIGEgcHJldHR5IGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgbG93LWxldmVsIG1lbW9yeSBhY2Nlc3MgdG9vbHMuIEFuZCB3aXRoaW4gdGhhdCBkaXJlY3RvcnksIHRoZSBsaWtlbHkgY3VscHJpdCBmb3IgYnVpbGQgY29uZmlndXJhdGlvbiBpcyBgTWFrZWZpbGVgLiBJJiMzOTtsbCBvcGVuIHRoYXQgdXAgYW5kIHNlYXJjaCBmb3IgYGRldm1lbS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnVpbGQgcmVjaXBlIG9yIGF0IGxlYXN0IGEgY2x1ZSBhYm91dCB0aGUgZmluYWwgbG9jYXRpb24gb2YgdGhlIHJlbGV2YW50IG9iamVjdCBmaWxlIGFuZCB3aGVyZSBpdCBlbmRzIHVwIGluIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgdXRpbGl0eSBpcyBjb25zdHJ1Y3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bWVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDg9b2JqLSQoQ09ORklHX05FVF9URVNUKSAmIzQzOz0gbmV0X3Rlc3Qub1xubmV0L2NvcmUvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ub1xubmV0L2NvcmUvTWFrZWZpbGUtNTAtb2JqLSQoQ09ORklHX0RFQlVHX05FVCkgJiM0Mzs9IGxvY2tfZGVidWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERldm1lbSBaZXJvLUNvcHkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXQmIzM5O3MgYWJvdXQgYENPTkZJR19ORVRfREVWTUVNYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbmV0L2NvcmUvZGF0YWdyYW0uY2AsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24mIzM5O3MgdXBzdHJlYW0gaXMgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBhbmQgdWx0aW1hdGVseSBieSBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gSXQgYXBwZWFycyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGAtRUVYSVNUYCByZXR1cm4gaWYgdGhlcmUgYXJlIGFscmVhZHkgcmVhZGFibGUgZnJhZ21lbnRzIGluIHRoZSBTS0Igd2hlbiB1c2luZyBkZXZpY2UgbWVtb3J5LgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgcHJldmVudGluZyB0aGUgbWl4aW5nIG9mIHJlZ3VsYXIgbWVtb3J5IChyZWFkYWJsZSBmcmFncykgd2l0aCBkZXZpY2UgbWVtb3J5ICh1bnJlYWRhYmxlKSB3aXRoaW4gdGhlIHNhbWUgU0tCLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYmVoYXZpb3VyIHNoaWZ0LCBhbmQgdGhhdCBpbW1lZGlhdGVseSBzaWduYWxzICYjMzQ7ZnV6emluZyBjYW5kaWRhdGUmIzM0OyB0byBtZS4gSSBuZWVkIHRvIGdldCB0aGlzIHRlc3RlZCB1bmRlciBkaWZmZXJlbnQgY29uZGl0aW9ucy4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sczogYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCwgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAsIGFuZCBvZiBjb3Vyc2UgYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEhvd2V2ZXIsIHRoZSBmdW5jdGlvbiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIHNlZW1zIG1vcmUgc3BlY2lmaWMsIGEgYmV0dGVyIHRvdWNocG9pbnQuCgpOZXh0IHN0ZXA6IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGFsc28gY2FsbGluZyBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLCBqdXN0IHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIGFueXRoaW5nIG1vcmUgdGhhbiBvcmlnaW5hbGx5IHRob3VnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2RhdGFncmFtLmM9NzA2PXN0YXRpYyBpbnRcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzA3Onplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzA4LVx0XHRcdCAgICAgIGludCBsZW5ndGgsXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03NDk9aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYwLVx0ZWxzZSBpZiAoYmluZGluZylcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYxOlx0XHRyZXQgPSB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShza2IsIGZyb20sIGxlbmd0aCwgYmluZGluZyk7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIEZ1bmN0aW9uIENhbGxzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgdGhlIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGJ5IGEgbGltaXRlZCBzZXQgb2YgZnVuY3Rpb25zLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gLCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAsIGFuZCBgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYmAuIFRoaXMgbmFycm93aW5nIGlzIGhlbHBmdWw7IGl0IGdpdmVzIG1lIGEgY29uY2lzZSBjYWxsIGdyYXBoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGFyZ3VtZW50IGJpbmRpbmcsIGluIHBhcnRpY3VsYXIgdGhlIGFyZ3VtZW50IHBhc3NlZCBmcm9tIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLiBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB0aGUgYGJpbmRpbmdgIGFyZ3VtZW50LiBSaWdodCwgaXQgbG9va3MgbGlrZSBvbmx5IGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gIHBhc3NlcyBhIGBiaW5kaW5nYCBhcmd1bWVudCB0byBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgcGF0aCBmb3IgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAgaXMgYmVoYXZpbmcgYXMgSSBleHBlY3QgaXQgdG8uICBCdXQgYmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgb3RoZXIgY29kZSBwYXRocywgc28gbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSBoYXZlIGFsbCB0aGUgcGllY2VzIGFuZCBoYXZlIG5vdCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weV9pdGVyX2RncmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcwLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXHRcdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTk0OT1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjUtXHRcdH0gZWxzZSB7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjY2Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY3LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE0NDk9c3RhdGljIGludCBfX2lwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzEtXHRcdH0gZWxzZSB7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTgzMjpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzMtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgYW5kIFplcm9jb3B5IFNHcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYCBhbmQgaW1tZWRpYXRlbHkgdGhlIGZhY3QgdGhhdCBpdCBwYXNzZXMgYSBgTlVMTGAgZm9yIGBiaW5kaW5nYCBncmFicyBteSBhdHRlbnRpb24uIFRoYXQmIzM5O3MgdW51c3VhbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBpcyB0aGUgY2FzZS4gU2luY2UgYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYCBpcyBsaWtlbHkgaGFuZGxpbmcgZGF0YWdyYW0gc29ja2V0cyB1c2luZyB6ZXJvLWNvcHkgbWVjaGFuaXNtcywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpZyBpbnRvIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgaW4gdGhpcyBzY2VuYXJpbyBhbmQgdW5kZXJzdGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIG9mIHRoYXQgYE5VTExgIHZhbHVlIGZvciBiaW5kaW5nLiBJcyB0aGlzIGNvcnJlY3Q/IElzIHRoaXMgaW50ZW5kZWQsIGFuZCBpZiBzbywgd2hhdCBhcmUgdGhlIGFyY2hpdGVjdHVyYWwgcmVhc29ucz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIHJhY2UgY29uZGl0aW9ucyBhcmlzaW5nIGZyb20gdGhpcyBkZXNpZ24gY2hvaWNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlIGFic2VuY2Ugb2YgYSBiaW5kaW5nIGFmZmVjdHMgdGhlIGhhbmRsaW5nIG9mIHRoZSBzY2F0dGVyZWQvZ2F0aGVyZWQgZGF0YS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHplcm8tY29weSBhbmQgc2NhdHRlci1nYXRoZXIgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCB3aXRoIGRhdGFncmFtIHNvY2tldHMgYW5kIHdoYXQgY29udGV4dCBpcyByZXF1aXJlZC4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIHRyYWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6ZXJvY29weV9zZ19mcm9tX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGFwLmM9NTcyPXN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcbi0tXG5kcml2ZXJzL25ldC90YXAuYy02MjctXHRpZiAoemVyb2NvcHkpXG5kcml2ZXJzL25ldC90YXAuYzo2Mjg6XHRcdGVyciA9IHplcm9jb3B5X3NnX2Zyb21faXRlcihza2IsIGZyb20pO1xuZHJpdmVycy9uZXQvdGFwLmMtNjI5LVx0ZWxzZVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTE3MjY9c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTgxOS1cdFx0XHQgKiBJZiB6ZXJvY29weSBpcyBlbmFibGVkLCB0aGVuIHRoaXMgbGF5b3V0IHdpbGwgYmVcbmRyaXZlcnMvbmV0L3R1bi5jOjE4MjA6XHRcdFx0ICogb3ZlcndyaXR0ZW4gYnkgemVyb2NvcHlfc2dfZnJvbV9pdGVyKCkuXG5kcml2ZXJzL25ldC90dW4uYy0xODIxLVx0XHRcdCAqL1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE4MzUtXHRcdGlmICh6ZXJvY29weSlcbmRyaXZlcnMvbmV0L3R1bi5jOjE4MzY6XHRcdFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XG5kcml2ZXJzL25ldC90dW4uYy0xODM3LVx0XHRlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYxPXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzYyLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzYzOmludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2NC1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc3MT1zdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3My17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzQ6XHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBza2ItXHUwMDNlc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzUtXHRcdFx0XHQgICAgICAgTlVMTCk7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjUyPWludCBza2JfY29weV9kYXRhZ3JhbV9mcm9tX2l0ZXJfZnVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjUzLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGludCBsZW4pO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0MjU0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm0pO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjU1LXZvaWQgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaD0xMzg9ZW51bSBza2JfZHJvcF9yZWFzb24ge1xuLS1cbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxMi1cdCAqIEBTS0JfRFJPUF9SRUFTT05fU0tCX1VDT1BZX0ZBVUxUOiBmYWlsZWQgdG8gY29weSBkYXRhIGZyb20gdXNlciBzcGFjZSxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oOjQxMzpcdCAqIGUuZy4sIHZpYSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKSBvciBza2Jfb3JwaGFuX2ZyYWdzX3J4KClcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxNC1cdCAqL1xuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmM9NzA3PXplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc0OC1cbm5ldC9jb3JlL2RhdGFncmFtLmM6NzQ5OmludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzUwLVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtfVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzU6RVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc3LS8qKlxubmV0L2NvcmUvZGF0YWdyYW0uYzo3Nzg6ICpcdHplcm9jb3B5X3NnX2Zyb21faXRlciAtIEJ1aWxkIGEgemVyb2NvcHkgZGF0YWdyYW0gZnJvbSBhbiBpb3ZfaXRlclxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzktICpcdEBza2I6IGJ1ZmZlciB0byBjb3B5XG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODYtICovXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc4NzppbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzg4LXtcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5NC1cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk1Olx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKE5VTEwsIE5VTEwsIHNrYiwgZnJvbSwgfjBVLCBOVUxMKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk2LX1cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk3OkVYUE9SVF9TWU1CT0woemVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk4LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MDY9aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTkyNy1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5Mjg6XHRlcnIgPSBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrLCBza2IsIFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgbGVuLFxubmV0L2NvcmUvc2tidWZmLmMtMTkyOS1cdFx0XHRcdCAgICAgIGJpbmRpbmcpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz04MD1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfZmlsbF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODctXHRpZiAoemNvcHkpXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6ODg6XHRcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIE5VTEwsIHNrYixcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04OS1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgbGVuLCBOVUxMKTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MjEyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmlydGlvX3RyYW5zcG9ydF9hbGxvY19za2Ioc3RydWN0IHZpcnRpb192c29ja19wa3RfaW5mbyAqaW5mbyxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjM5LVx0LyogSWYgJiMzOTt2c2smIzM5OyAhPSBOVUxMIHRoZW4gcGF5bG9hZCBpcyBhbHdheXMgcHJlc2VudCwgc28gd2Vcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDA6XHQgKiB3aWxsIG5ldmVyIGNhbGwgJiMzOTtfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJiMzOTsgYmVsb3cgd2l0aG91dFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0MS1cdCAqIHNldHRpbmcgc2tiIG93bmVyIGluICYjMzk7c2tiX3NldF9vd25lcl93KCkmIzM5Oy4gVGhlIG9ubHkgY2FzZVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDYtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQ3Olx0LyogU2V0IG93bmVyIGhlcmUsIGJlY2F1c2UgJiMzOTtfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJiMzOTsgdXNlc1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0OC1cdCAqIG93bmVyIG9mIHNrYiB3aXRob3V0IGNoZWNrIHRvIHVwZGF0ZSAmIzM5O3NrX3dtZW1fYWxsb2MmIzM5Oy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgQmluZGluZyBQYXJhbWV0ZXIgaW4gWmVyb2NvcHkgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGBiaW5kaW5nYCBwYXJhbWV0ZXIgaXMgYmVpbmcgdXNlZCBpbiB0aGUgemVyb2NvcHkgY29kZSBwYXRoLiBUaGUgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGRpcmVjdGx5IGhhbmRzIG9mZiBhIGBOVUxMYCBmb3IgYGJpbmRpbmdgLiBUaGF0IHN1Z2dlc3RzIGl0JiMzOTtzIG5vdCB0aGUgcHJpbWFyeSBzb3VyY2Ugb2YgdGhlIHZhbHVlLiBSaWdodCwgc28gbG9va2luZyBkZWVwZXIsIGBiaW5kaW5nYCBzZWVtcyB0byBiZSBzb3VyY2VkIGZyb20gYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuIE5vdywgd2hlcmUgZG9lcyAqdGhhdCogZ2V0IGNhbGxlZD8gQWgsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGlzIG1lYW5zIHRoYXQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBjYW4gZXZlbnR1YWxseSByZWFjaCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIHRocm91Z2ggdGhpcyBzcGVjaWZpYyBwYXRoLiBCdXQsIGlzIHRoYXQgcmlnaHQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyAqZGVmaW5pdGVseSogdGhlICpvbmx5KiBjYWxsZXIgb2YgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuIExldCBtZSBzZWUuLi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc3LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MDQ9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MDUtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTA2OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkwNy1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTQzLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NDQ6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDUtXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMzM4LVxubmV0L2lwdjQvdGNwLmM6MTMzOTpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc2ssIHNrYiwgbXNnLCBjb3B5LCB1YXJnLFxubmV0L2lwdjQvdGNwLmMtMTM0MC1cdFx0XHRcdFx0XHQgICAgICAgYmluZGluZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzQ2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFplcm8tQ29weSBOZXR3b3JrIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgdHJhY2VkIHRoZSBjYWxsIHN0YWNrLCBhbmQgaXQgbG9va3MgbGlrZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIGNvZGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGZvciB6ZXJvLWNvcHkgb3BlcmF0aW9ucy4gVGhhdCBuYXJyb3dzIGRvd24gbXkgZm9jdXMgc2lnbmlmaWNhbnRseS4gVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCBhcmU6IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAsIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAsIGFuZCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIG1lY2hhbmljcyBvZiB0aGlzIHplcm8tY29weSBpbXBsZW1lbnRhdGlvbi4KCkJhc2VkIG9uIHRoaXMsIGl0IGFsc28gc2VlbXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBiZSBgTkVUX0RFVk1FTWAuIEkmIzM5O2xsIHdhbnQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gTGV0JiMzOTtzIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgYE5FVF9ERVZNRU1gIGlzLCBpbiBmYWN0LCB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBnb3Zlcm5pbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBsaWtlbHkgZGVmaW5lZCBpbiBgbmV0L2NvcmUvS2NvbmZpZ2AsIHdoaWNoIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgaXRzIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfREVWTUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTY2PWNvbmZpZyBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9LY29uZmlnLTY4LVxubmV0L0tjb25maWc6Njk6Y29uZmlnIE5FVF9ERVZNRU1cbm5ldC9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc4MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgTkVUX0RFVk1FTWAgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YC4gVGhhdCBpbnN0YW50bHkgZmxhZ3Mgc29tZXRoaW5nIGltcG9ydGFudCDigJMgaXQmIzM5O3MgYSBkZWZhdWx0IGJvb2xlYW4sIHNldCB0byAmIzM0O3llcy4mIzM0OyBUaGlzIHJlcXVpcmVzIGNsb3NlciBpbnNwZWN0aW9uLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGRlZmF1bHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBhcm91bmQgbGluZSA2OTsgdGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSB0aGUgZGVmaW5pdGlvbiByZXNpZGVzLCBhbmQgd2hlcmUgdGhlIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzLCBjb21tZW50cywgYW5kIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlLiBVbmRlcnN0YW5kaW5nICp3aHkqIGl0JiMzOTtzIHNldCB0aGlzIHdheSBpcyBjcnVjaWFsOyBpcyBpdCBlbmFibGluZyBhIGZlYXR1cmUsIG9yIGlzIGl0IG1lcmVseSBleHBvc2luZyBhbiBvcHRpb24/IEtub3dpbmcgdGhlIGNvbnRleHQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgZXNzZW50aWFsIHRvIG15IGFuYWx5c2lzLiBJIGhhdmUgdG8gc2VlIHdoYXQgdGhpcyBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdGNvbmZpZyBORVRfUkVESVJFQ1RcbiAgNjE6XHRcdGJvb2xcbiAgNjI6XHRcbiAgNjM6XHRjb25maWcgU0tCX0RFQ1JZUFRFRFxuICA2NDpcdFx0Ym9vbFxuICA2NTpcdFxuICA2NjpcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xuICA2NzpcdFx0Ym9vbFxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBORVRfREVWTUVNXG4gIDcwOlx0XHRkZWZfYm9vbCB5XG4gIDcxOlx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAgNzI6XHRcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcbiAgNzM6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIE5FVF9TSEFQRVJcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcbiAgNzg6XHRjb25maWcgTkVUX0NSQzMyQ1xuICA3OTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIyMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTkVUX0RFVk1FTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgYW5kIHNldCB0byAmIzM5O3kmIzM5Oy4gVGhhdCYjMzk7cyBnb29kLCBidXQgaXQmIzM5O3MgY29uZGl0aW9uYWwuIEl0JiMzOTtzICpkZXBlbmRlbnQqIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIG9mICp0aG9zZSogYXJlIGVuYWJsZWQgYmVmb3JlIEkgYXNzdW1lIGBORVRfREVWTUVNYCBpcyBhY3R1YWxseSBnb2luZyB0byBiZSBhY3RpdmUuIFRoaXMgbWVhbnMgaWYgYERNQV9TSEFSRURfQlVGRkVSYCBvciBgUEFHRV9QT09MYCBhcmUgbm90IGVuYWJsZWQsIHRoZW4gYE5FVF9ERVZNRU1gIHdvbiYjMzk7dCBiZSBlaXRoZXIsIHJlZ2FyZGxlc3Mgb2YgaXRzIGBkZWZfYm9vbCB5YCBzZXR0aW5nLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBwcmUtcmVxdWlzaXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqS2NvbmZpZyBJbnF1aXJ5OiBETUEgU2hhcmVkIEJ1ZmZlciBCb29sZWFuKioKCk9rYXksIHNvIGBETUFfU0hBUkVEX0JVRkZFUmAgaXMgZGVmaW5lZCBhcyBhIGJvb2xlYW4sIGludGVyZXN0aW5nLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgaXRzIGRlY2xhcmF0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkgaW1tZWRpYXRlbHkgd2FudCB0byBjaGVjayB0aGUgYGRyaXZlcnMvYmFzZS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYXMgYmFzZSBkcml2ZXJzIG9mdGVuIGhhdmUgZnVuZGFtZW50YWwgc2V0dGluZ3MgbGlrZSB0aGlzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgYm9vbGVhbiBpcyBjcnVjaWFsLiBJcyBpdCBwYXJ0IG9mIHRoZSBkZWZhdWx0IGtlcm5lbCBjb25maWd1cmF0aW9uLCBpcyBpdCBlbmFibGVkIG9uIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGlzIGl0IHBhcnQgb2YgYSBicm9hZGVyIG1vZHVsZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIGRyaXZlciBvcHRpb25zIGFzIEkgZXhwbG9yZSB0aGlzLiBUaGlzIHdpbGwgcXVpY2tseSBnaXZlIG1lIGFuIG92ZXJ2aWV3IG9mIHRoZSByb2xlIGFuZCBwdXJwb3NlIG9mIHRoaXMgc3BlY2lmaWMgYm9vbGVhbiB3aXRoaW4gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XHRib29sXG4gMjExOlx0XHRzZWxlY3QgR0xPQlxuIDIxMjpcdFxuIDIxMzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbiAyMTQ6XHRcbiAyMTU6XHRjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbiAyMTY6XHRcdGJvb2xcbiAyMTc6XHRcdGRlZmF1bHQgblxuIDIxODpcdFx0c2VsZWN0IElSUV9XT1JLXG4gMjE5Olx0XHRoZWxwXG4gMjIwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3IgYnVmZmVyLXNoYXJpbmcgYmV0d2VlblxuIDIyMTpcdFx0ICBtdWx0aXBsZSBkcml2ZXJzLiBBIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIHVzaW5nIGRyaXZlclxuIDIyMjpcdFx0ICBBUElzIGV4dGVuc2lvbjsgdGhlIGZpbGUmIzM5O3MgZGVzY3JpcHRvciBjYW4gdGhlbiBiZSBwYXNzZWQgb24gdG8gb3RoZXJcbiAyMjM6XHRcdCAgZHJpdmVyLlxuIDIyNDpcdFxuIDIyNTpcdGNvbmZpZyBETUFfRkVOQ0VfVFJBQ0VcbiAyMjY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHZlcmJvc2UgRE1BX0ZFTkNFX1RSQUNFIG1lc3NhZ2VzXCYjMzQ7XG4gMjI3Olx0XHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXG4gMjI4Olx0XHRoZWxwXG4gMjI5Olx0XHQgIEVuYWJsZSB0aGUgRE1BX0ZFTkNFX1RSQUNFIHByaW50a3MuIFRoaXMgd2lsbCBhZGQgZXh0cmFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNTUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRE1BIGFuZCBQYWdlIFBvb2xzKioKCk9rYXksIHNvIHRoaXMgYERNQV9TSEFSRURfQlVGRkVSYCB0aGluZ+KApiB0aGF0JiMzOTtzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCAqbmVlZHMqIHRvIGJlIGVuYWJsZWQsIHJpZ2h0PyBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBJIG5lZWQgdG8gdmVyaWZ5IGl0LiBXaGF0IEkgKnJlYWxseSogd2FudCB0byBzZWUgaXMgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGBQQUdFX1BPT0xgIGNvbmZpZ3VyYXRpb24uIElzIGl0IGJlaW5nIHVzZWQ/IElzIGl0IGV2ZW4gZGVmaW5lZCBvciBlbmFibGVkPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoaXMgc2hhcmVkIGJ1ZmZlciBpcyB1dGlsaXplZCwgYW5kIHdoZXRoZXIgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgb3B0aW1pemVkIGZ1cnRoZXIsIG9yIGlzIGNhdXNpbmcgYW4gaXNzdWUgc29tZXdoZXJlIGVsc2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgaGVhZGVycyByZXZlYWwuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX1BPT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xuLS1cbm5ldC9LY29uZmlnLTQ5MC1cbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXG5uZXQvS2NvbmZpZy00OTItXHRib29sXG5uZXQvS2NvbmZpZy00OTMtXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xubmV0L0tjb25maWctNDk1LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzczCgkJCQkJCQlvdXRwdXQ6IDE2OQoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgZm9yIEZ1enppbmcgdGhlIERldm1lbSBaZXJvY29weSBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2l0dWF0aW9uIGZvciBmdXp6aW5nIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBORVRfREVWTUVNYCBmZWF0dXJlIGFuZCB0aGlzIG5ldyBwYXRjaC4gIEluaXRpYWxseSwgaXQgc2VlbWVkIHN0cmFpZ2h0Zm9yd2FyZDogYFBBR0VfUE9PTGAgaXMgZXNzZW50aWFsbHkgYSBib29sZWFuIGZsYWcsIHNvIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBjb25maWd1cmF0aW9uIEkgbmVlZCB0byB0YXJnZXQuICBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBhcmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgaW4gdGhpcyBpbnN0YW5jZS4gQnV0IHRoZW4gSSBzYXcgdGhhdCBgTkVUX0RFVk1FTWAgaXMgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgeWAsIGFuZCBjcnVjaWFsbHkgZGVwZW5kcyBvbiB0aG9zZSBvdGhlciB0d28uCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHNpbXBseSBzcGVjaWZ5IGBORVRfREVWTUVNYCwgYW5kIGxldCBzeXprYWxsZXIgaGFuZGxlIHRoZSBkZXBlbmRlbmNpZXMuIEhvd2V2ZXIsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIExpc3RpbmcgYE5FVF9ERVZNRU1gIGFsb25lIG1lYW5zIGl0ICpjb3VsZCogYmUgZW5hYmxlZCBpZiB0aGUgZGVwZW5kZW5jaWVzIGV4aXN0LiAgQnV0LCB3aGF0IGlmIHRoZXkgYXJlbiYjMzk7dCBzZWxlY3RlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8gYmUgbW9yZSBleHBsaWNpdC4gIEFsc28sIGl0JiMzOTtzIHdvcnRoIG5vdGluZyB0aGF0IGBQQUdFX1BPT0xgIGlzIG9mdGVuIHNlbGVjdGVkIGJ5IHZhcmlvdXMgbmV0d29yayBkcml2ZXJzLCB3aGlsZSBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIHNlbGVjdGVkIGJ5IERSTSBhbmQgb3RoZXIgc3lzdGVtcy4gU28sIHNpbXBseSBsaXN0aW5nIGBORVRfREVWTUVNYCB3b3VsZCBpbnRyb2R1Y2UgYSByaXNrIG9mIHRoZSBmdXp6ZXIgZmFpbGluZy4gU28sIEkgbmVlZCB0byBsaXN0IHRoZSBkZXBlbmRlbmNpZXMhCgpXaGlsZSBgTkVUX0RFVk1FTWAgaXMgdGhlIG1vc3QgZGlyZWN0IGNvbmZpZyBmb3IgdGhpcyBjb2RlIHBhdGgsIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIFNvLCBJIHdpbGwgbGlzdCBgTkVUX0RFVk1FTWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAuCgpOb3csIG9udG8gdGhlIHBhdGNoIGl0c2VsZi4gTGV0IG1lIHJldmlldyB0aGF0IGNvZGUgYWdhaW4uIEFoLCBoZXJlJiMzOTtzIHRoZSBrZXkgY2hhbmdlOgoKYGBgYwoJaWYgKGkgJmFtcDsmYW1wOyBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkKCQlyZXR1cm4gLUVFWElTVDsKYGBgCgpUaGlzIHByZXZlbnRzIGFwcGVuZGluZyBkZXZtZW0gZnJhZ3MgdG8gYW4gU0tCIGlmIGl0IGFscmVhZHkgY29udGFpbnMgcmVhZGFibGUgZnJhZ21lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAsIGFuZCBpdCYjMzk7cyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBlcnJvciBwYXRoICgtRUVYSVNUKSBpcyBoYW5kbGVkIGNvcnJlY3RseSwgYW5kIEkgd2FudCB0byB2ZXJpZnkgdGhhdCBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuCgpUaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZyBhcmU6IGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAsIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAsIGFuZCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSYjMzQ7LAogICAgJiMzNDtfX3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbSYjMzQ7LAogICAgJiMzNDtfX3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDoyMS44NTYwMTcxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDA3NjUxMDgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtXCIsXG4gICAgXCJfX3plcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICAgIFwic2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjIxLjg1NjAyMjYyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTY1Mzk3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YThhZDA1MzJmMDUyYTg2M2EzMWZjZWYyMDcyNWIwNzc2MDZjM2RjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIzIDA5OjU0OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jXFxuaW5kZXggYzI4NWM2NDY1OTIzZTQuLjM1ZmViYzFjMjVmYTMxIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcXG4rKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jXFxuQEAgLTcxMiw2ICs3MTIsOSBAQCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdHNpemVfdCB2aXJ0X2FkZHIsIHNpemUsIG9mZjtcXG4gXFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XFxuIFxcbitcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbiBcXHQvKiBEZXZtZW0gZmlsbGluZyB3b3JrcyBieSB0YWtpbmcgYW4gSU9WRUMgZnJvbSB0aGUgdXNlciB3aGVyZSB0aGVcXG4gXFx0ICogaW92X2FkZHJzIGFyZSBpbnRlcnByZXRlZCBhcyBhbiBvZmZzZXQgaW4gYnl0ZXMgaW50byB0aGUgZG1hLWJ1ZiB0b1xcbiBcXHQgKiBzZW5kIGZyb20uIFdlIGRvIG5vdCBzdXBwb3J0IG90aGVyIGl0ZXIgdHlwZXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjIyLjIxMzIyNTgzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExOTcxOTI5NDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtXCIsXG4gICAgXCJfX3plcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICAgIFwic2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGE4YWQwNTMyZjA1MmE4NjNhMzFmY2VmMjA3MjViMDc3NjA2YzNkY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDA5OjU0OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbmluZGV4IGMyODVjNjQ2NTkyM2U0Li4zNWZlYmMxYzI1ZmEzMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcbisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbkBAIC03MTIsNiArNzEyLDkgQEAgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0c2l6ZV90IHZpcnRfYWRkciwgc2l6ZSwgb2ZmO1xuIFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG4gXG4rXHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1xuIFx0LyogRGV2bWVtIGZpbGxpbmcgd29ya3MgYnkgdGFraW5nIGFuIElPVkVDIGZyb20gdGhlIHVzZXIgd2hlcmUgdGhlXG4gXHQgKiBpb3ZfYWRkcnMgYXJlIGludGVycHJldGVkIGFzIGFuIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBkbWEtYnVmIHRvXG4gXHQgKiBzZW5kIGZyb20uIFdlIGRvIG5vdCBzdXBwb3J0IG90aGVyIGl0ZXIgdHlwZXMuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDoyMi4yMTMyMjcxODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkzMzc2Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTmV0L0NvcmUgRGF0YWdyYW0gUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBzZWUgd2UgaGF2ZSBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuIEltbWVkaWF0ZWx5LCBteSBhdHRlbnRpb24gemVyb2VzIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBiZWluZyBtb2RpZmllZDogYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gemVyby1jb3B5IGRhdGEgdHJhbnNmZXIsIGxpa2VseSBpbnZvbHZpbmcgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgZnJvbSBhIGRldmljZSdzIG1lbW9yeSBpbnRvIGFuIFNLQiAoU29ja2V0IEJ1ZmZlcikuIFRoaXMgaXMgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcmVhLCBzbyBsZXQncyBnZXQgYSBnb29kIGxvb2sgYXQgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBpdHNlbGYgd2l0aGluIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5LiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaW1wbGljYXRpb25zIGZvciBkaWZmZXJlbnQgbmV0d29yayBpbnRlcmZhY2VzLCBwb3RlbnRpYWxseSBhbnkgc2VjdXJpdHkgY29uY2VybnMgcmVsYXRlZCB0byBhY2Nlc3NpbmcgZGV2aWNlIG1lbW9yeSwgYW5kIG9mIGNvdXJzZSwgdGhlIGltcGFjdCBvbiBvdmVyYWxsIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDoyNi4wMDY2MDU3MzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMjUxMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGF0YWdyYW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kYXRhZ3JhbS5jPTcwNj1zdGF0aWMgaW50XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3MDc6emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzA4LVxcdFxcdFxcdCAgICAgIGludCBsZW5ndGgsXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTc0OT1pbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2MC1cXHRlbHNlIGlmIChiaW5kaW5nKVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzYxOlxcdFxcdHJldCA9IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHNrYiwgZnJvbSwgbGVuZ3RoLCBiaW5kaW5nKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc2Mi1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjI2LjA2MjgzNzI0OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzIxMzU2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSBjaGFuZ2UsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFplcm8tQ29weSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBzZWVtaW5nbHkgc2ltcGxlIGNoZWNrIHdpdGhpbiB0aGUgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhhdCB0aGV5J3ZlIGFkZGVkOlxuXG5gYGBjXG5cdGlmIChpIFx1MDAyNlx1MDAyNiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcblx0XHRyZXR1cm4gLUVFWElTVDtcbmBgYFxuXG5SaWdodCBhd2F5LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGludGVudGlvbiBoZXJlIGlzIGxpa2VseSByZWxhdGVkIHRvIHByZXZlbnRpbmcgYW4gdW5kZXNpcmFibGUgY29uZGl0aW9uIGR1cmluZyB6ZXJvLWNvcHkgZGF0YSB0cmFuc2Zlci4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGJlIGEgc2FmZWd1YXJkIGFnYWluc3QgYSBzY2VuYXJpbyB3aGVyZSB3ZSdyZSB0cnlpbmcgdG8gdXNlIGRldmljZSBtZW1vcnkgdG8gcG9wdWxhdGUgYW4gYHNrYmAgKHNvY2tldCBidWZmZXIpIHRoYXQgYWxyZWFkeSBoYXMgcmVhZGFibGUgZnJhZ21lbnRzLiBUaGUgYGlgIHZhcmlhYmxlIHByb2JhYmx5IHNpZ25pZmllcyBhbiBpbmRleCBvciBzb21lIG90aGVyIGNvbnRleHQgd2l0aGluIHRoZSBmdW5jdGlvbi5cblxuTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhleSdyZSB0cnlpbmcgdG8gYXZvaWQgYSBjb25mbGljdCwgcGVyaGFwcyBwcmV2ZW50aW5nIGEgZG91YmxlIGNvcHkgb3IgY29ycnVwdGlvbi4gSWYgYSBzb2NrZXQgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gcGFydGlhbGx5IHBvcHVsYXRlZCBvciBpcyBtYXJrZWQgd2l0aCBmcmFnbWVudHMgdGhhdCAqY291bGQqIGJlIHJlYWQsIHRyeWluZyB0byBpbmplY3QgbW9yZSBkYXRhIHZpYSBhIHplcm8tY29weSBtZWNoYW5pc20gbWlnaHQgY3JlYXRlIGlzc3VlcyBvciBsZWFkIHRvIGRhdGEgaW5jb25zaXN0ZW5jaWVzLiBUaGUgYC1FRVhJU1RgIGVycm9yIGNvZGUgaXMgYSBzZW5zaWJsZSBjaG9pY2UsIHNpZ25hbGluZyB0aGF0IHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSBvZiBhbiBleGlzdGluZyBjb25kaXRpb24uXG5cblRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLCBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpYCBpcyB1c2VkLCBhbmQgd2hhdCBgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYilgIGFjdHVhbGx5IGNoZWNrcy4gVGhlbiwgSSBjYW4gZGVkdWNlIHByZWNpc2VseSB3aHkgdGhpcyBndWFyZCBpcyBuZWNlc3NhcnksIGFuZCB3aGV0aGVyIGl0J3MgY29ycmVjdGx5IGltcGxlbWVudGVkIHRvIHByb3RlY3QgYWdhaW5zdCB0aGUgaW1wbGllZCBkYXRhIGNvcnJ1cHRpb24gb3IgaW5jb3JyZWN0IHJlYWQgc2NlbmFyaW9zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBjb25maWRlbnRseSBhc3Nlc3MgdGhlIHBhdGNoJ3MgbWVyaXQuIElzIHRoaXMgYSBjb21tb24gaXNzdWUgd2l0aCBhIGNlcnRhaW4gZHJpdmVyLCBhIGdlbmVyaWMgcHJvYmxlbSwgb3Igc29tZXRoaW5nIHNwZWNpZmljPyBOb3csIGxldCdzIGdvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjMwLjczNDk3NTA5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2RhdGFncmFtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzA2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzA2OlxcdHN0YXRpYyBpbnRcXG4gNzA3OlxcdHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4gNzA4OlxcdFxcdFxcdFxcdCAgICAgIGludCBsZW5ndGgsXFxuIDcwOTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4gNzEwOlxcdHtcXG4gNzExOlxcdFxcdGludCBpID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncztcXG4gNzEyOlxcdFxcdHNpemVfdCB2aXJ0X2FkZHIsIHNpemUsIG9mZjtcXG4gNzEzOlxcdFxcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xcbiA3MTQ6XFx0XFxuIDcxNTpcXHRcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiBza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG4gNzE2OlxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHQvKiBEZXZtZW0gZmlsbGluZyB3b3JrcyBieSB0YWtpbmcgYW4gSU9WRUMgZnJvbSB0aGUgdXNlciB3aGVyZSB0aGVcXG4gNzE5OlxcdFxcdCAqIGlvdl9hZGRycyBhcmUgaW50ZXJwcmV0ZWQgYXMgYW4gb2Zmc2V0IGluIGJ5dGVzIGludG8gdGhlIGRtYS1idWYgdG9cXG4gNzIwOlxcdFxcdCAqIHNlbmQgZnJvbS4gV2UgZG8gbm90IHN1cHBvcnQgb3RoZXIgaXRlciB0eXBlcy5cXG4gNzIxOlxcdFxcdCAqL1xcbiA3MjI6XFx0XFx0aWYgKGlvdl9pdGVyX3R5cGUoZnJvbSkgIT0gSVRFUl9JT1ZFQyBcXHUwMDI2XFx1MDAyNlxcbiA3MjM6XFx0XFx0ICAgIGlvdl9pdGVyX3R5cGUoZnJvbSkgIT0gSVRFUl9VQlVGKVxcbiA3MjQ6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDcyNTpcXHRcXG4gNzI2OlxcdFxcdHdoaWxlIChsZW5ndGggXFx1MDAyNlxcdTAwMjYgaW92X2l0ZXJfY291bnQoZnJvbSkpIHtcXG4gNzI3OlxcdFxcdFxcdGlmIChpID09IE1BWF9TS0JfRlJBR1MpXFxuIDcyODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA3Mjk6XFx0XFxuIDczMDpcXHRcXHRcXHR2aXJ0X2FkZHIgPSAoc2l6ZV90KWl0ZXJfaW92X2FkZHIoZnJvbSk7XFxuIDczMTpcXHRcXHRcXHRuaW92ID0gbmV0X2Rldm1lbV9nZXRfbmlvdl9hdChiaW5kaW5nLCB2aXJ0X2FkZHIsIFxcdTAwMjZvZmYsIFxcdTAwMjZzaXplKTtcXG4gNzMyOlxcdFxcdFxcdGlmICghbmlvdilcXG4gNzMzOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA3MzQ6XFx0XFxuIDczNTpcXHRcXHRcXHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBsZW5ndGgpO1xcbiA3MzY6XFx0XFx0XFx0c2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgaXRlcl9pb3ZfbGVuKGZyb20pKTtcXG4gNzM3OlxcdFxcbiA3Mzg6XFx0XFx0XFx0Z2V0X25ldG1lbShuZXRfaW92X3RvX25ldG1lbShuaW92KSk7XFxuIDczOTpcXHRcXHRcXHRza2JfYWRkX3J4X2ZyYWdfbmV0bWVtKHNrYiwgaSwgbmV0X2lvdl90b19uZXRtZW0obmlvdiksIG9mZixcXG4gNzQwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplLCBQQUdFX1NJWkUpO1xcbiA3NDE6XFx0XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShmcm9tLCBzaXplKTtcXG4gNzQyOlxcdFxcdFxcdGxlbmd0aCAtPSBzaXplO1xcbiA3NDM6XFx0XFx0XFx0aSsrO1xcbiA3NDQ6XFx0XFx0fVxcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRyZXR1cm4gMDtcXG4gNzQ3OlxcdH1cXG4gNzQ4OlxcdFxcbiA3NDk6XFx0aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbiA3NTA6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4gNzUxOlxcdFxcdFxcdFxcdCAgICBzaXplX3QgbGVuZ3RoLFxcbiA3NTI6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbiA3NTM6XFx0e1xcbiA3NTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBvcmlnX3NpemUgPSBza2ItXFx1MDAzZXRydWVzaXplO1xcbiA3NTU6XFx0XFx0dW5zaWduZWQgbG9uZyB0cnVlc2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTQ6MzAuNzM1MDYzNDkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0MTUxNDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGdW5jdGlvbmFsIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90aGluZyB0b28gZHJhc3RpYyBhdCBmaXJzdCBnbGFuY2UuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBjZW50ZXJzIGFyb3VuZCBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLiBUaGF0J3MgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgSSBrbm93IHRoYXQncyBjYWxsZWQgZnJvbSBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLiBOb3cgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyB3aWRlc3ByZWFkIGlzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2U/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgY2FsbCBzaXRlcyBvZiBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGJyZWFkdGggb2YgcG90ZW50aWFsIGNvbnNlcXVlbmNlIG9mIHRoZXNlIGNoYW5nZXMuIFRpbWUgdG8gdHJhY2UgdGhvc2UgY2FsbHMgYW5kIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjYWxsZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjM1LjE3NjU3OTk3M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEyMjg2NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9femVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzYyLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc2MzppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3My17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc0OlxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cXHUwMDNlc2ssIHNrYiwgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIsIGxlbixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzUtXFx0XFx0XFx0XFx0ICAgICAgIE5VTEwpO1xcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDgtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDk6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzUwLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3NC19XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzU6RVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzYtXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTc4Nz1pbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk0LVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk1OlxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihOVUxMLCBOVUxMLCBza2IsIGZyb20sIH4wVSwgTlVMTCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTYtfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkwNj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MjctXFxubmV0L2NvcmUvc2tidWZmLmM6MTkyODpcXHRlcnIgPSBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrLCBza2IsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sXFxubmV0L2NvcmUvc2tidWZmLmMtMTkyOS1cXHRcXHRcXHRcXHQgICAgICBiaW5kaW5nKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz04MD1zdGF0aWMgaW50IHZpcnRpb190cmFuc3BvcnRfZmlsbF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cXHRpZiAoemNvcHkpXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjg4OlxcdFxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIE5VTEwsIHNrYixcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODktXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTIxMj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZpcnRpb190cmFuc3BvcnRfYWxsb2Nfc2tiKHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0X2luZm8gKmluZm8sXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjM5LVxcdC8qIElmICd2c2snICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDA6XFx0ICogd2lsbCBuZXZlciBjYWxsICdfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJyBiZWxvdyB3aXRob3V0XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0MS1cXHQgKiBzZXR0aW5nIHNrYiBvd25lciBpbiAnc2tiX3NldF9vd25lcl93KCknLiBUaGUgb25seSBjYXNlXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ2LVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XFx0LyogU2V0IG93bmVyIGhlcmUsIGJlY2F1c2UgJ19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCknIHVzZXNcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVxcdCAqIG93bmVyIG9mIHNrYiB3aXRob3V0IGNoZWNrIHRvIHVwZGF0ZSAnc2tfd21lbV9hbGxvYycuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjM2Ljk4ODg3MTMwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzUxNTg2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipBbmFseXppbmcgYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCBVc2FnZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2VudGVyZWQgYXJvdW5kIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAuIFRoZSBjcml0aWNhbCBjbHVlIGhlcmUgaXMgdGhhdCBpdCBnZXRzIGNhbGxlZCBmcm9tIGBfX3plcm9jb3B5X3NnX2Zyb21faXRlcmAsIGJ1dCBvbmx5IHdoZW4gdGhlIGBiaW5kaW5nYCBwYXJhbWV0ZXIgaXNuJ3QgTlVMTC4gVGhhdCdzIHRoZSBrZXkgY29uZGl0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjayBkb3duIGFsbCBpbnN0YW5jZXMgd2hlcmUgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCBpcyAqYWN0dWFsbHkqIGNhbGxlZCB3aXRoIGBiaW5kaW5nYCBzZXQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHNwZWNpZmljIGNvZGUgcGF0aC4gQSBxdWljayBzZWFyY2ggcmV2ZWFscyB0aGF0IHRoZSByZWxldmFudCBjYWxsIHNpdGUgaXMgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAgd2l0aGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIE5vdyBJIGtub3cgd2hlcmUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gIHVzZXMgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCB3aGVuIHRoZSBgYmluZGluZ2AgaXMgbm9uLU5VTEwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDo0MC44NjQwMzMxMzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Nzg0NTU3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NzE9c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkwND1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MDUtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkwNjppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTA3LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk0My19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk0NDpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDUtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTMzOC1cXG5uZXQvaXB2NC90Y3AuYzoxMzM5OlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXFxubmV0L2lwdjQvdGNwLmMtMTM0MC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgYmluZGluZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU0OjQyLjY0MjQ5NjM5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Nzg4NjIyNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipEZWx2aW5nIGludG8gdGhlIFRDUCBTZW5kIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBiZWluZyBpbnZva2VkIGZyb20gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgcm9sZSBpbiB6ZXJvLWNvcHkgdHJhbnNtaXNzaW9uIHdpdGhpbiB0aGUgVENQIHNlbmRpbmcgcGF0aC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY2FsbGluZyBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCB3aGljaCByZXNpZGVzIGluIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCBkZXRlcm1pbmUgaG93IGl0IGludGVyYWN0cyB3aXRoIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLiBJJ2xsIHdhbnQgdG8gdHJhY2UgaG93IGRhdGEgaXMgcHJlcGFyZWQsIGhhbmRsZWQsIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6ZWQgdXNpbmcgemVyby1jb3B5IHRlY2huaXF1ZXMgd2l0aGluIHRoZSBUQ1Agc2VuZGluZyBwcm9jZXNzLiBJdCdzIHRpbWUgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93IGFuZCBhbnkgcG9zc2libGUgYm90dGxlbmVja3Mgb3Igb3Bwb3J0dW5pdGllcyBmb3IgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQgd2l0aGluIHRoaXMgc2VnbWVudCBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTQ6NTAuNDMxMTIxNTY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTMyMTpcXHRcXHRcXHRcXHRcXHRza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCBpLCBwZnJhZy1cXHUwMDNlcGFnZSxcXG4xMzIyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHBmcmFnLVxcdTAwM2VvZmZzZXQsIGNvcHkpO1xcbjEzMjM6XFx0XFx0XFx0XFx0XFx0cGFnZV9yZWZfaW5jKHBmcmFnLVxcdTAwM2VwYWdlKTtcXG4xMzI0OlxcdFxcdFxcdFxcdH1cXG4xMzI1OlxcdFxcdFxcdFxcdHBmcmFnLVxcdTAwM2VvZmZzZXQgKz0gY29weTtcXG4xMzI2OlxcdFxcdFxcdH0gZWxzZSBpZiAoemMgPT0gTVNHX1pFUk9DT1BZKSAge1xcbjEzMjc6XFx0XFx0XFx0XFx0LyogRmlyc3QgYXBwZW5kIHRvIGEgZnJhZ2xlc3Mgc2tiIGJ1aWxkcyBpbml0aWFsXFxuMTMyODpcXHRcXHRcXHRcXHQgKiBwdXJlIHplcm9jb3B5IHNrYlxcbjEzMjk6XFx0XFx0XFx0XFx0ICovXFxuMTMzMDpcXHRcXHRcXHRcXHRpZiAoIXNrYi1cXHUwMDNlbGVuKVxcbjEzMzE6XFx0XFx0XFx0XFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmbGFncyB8PSBTS0JGTF9QVVJFX1pFUk9DT1BZO1xcbjEzMzI6XFx0XFxuMTMzMzpcXHRcXHRcXHRcXHRpZiAoIXNrYl96Y29weV9wdXJlKHNrYikpIHtcXG4xMzM0OlxcdFxcdFxcdFxcdFxcdGNvcHkgPSB0Y3Bfd21lbV9zY2hlZHVsZShzaywgY29weSk7XFxuMTMzNTpcXHRcXHRcXHRcXHRcXHRpZiAoIWNvcHkpXFxuMTMzNjpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHdhaXRfZm9yX3NwYWNlO1xcbjEzMzc6XFx0XFx0XFx0XFx0fVxcbjEzMzg6XFx0XFxuMTMzOTpcXHRcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc2ssIHNrYiwgbXNnLCBjb3B5LCB1YXJnLFxcbjEzNDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJpbmRpbmcpO1xcbjEzNDE6XFx0XFx0XFx0XFx0aWYgKGVyciA9PSAtRU1TR1NJWkUgfHwgZXJyID09IC1FRVhJU1QpIHtcXG4xMzQyOlxcdFxcdFxcdFxcdFxcdHRjcF9tYXJrX3B1c2godHAsIHNrYik7XFxuMTM0MzpcXHRcXHRcXHRcXHRcXHRnb3RvIG5ld19zZWdtZW50O1xcbjEzNDQ6XFx0XFx0XFx0XFx0fVxcbjEzNDU6XFx0XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTM0NjpcXHRcXHRcXHRcXHRcXHRnb3RvIGRvX2Vycm9yO1xcbjEzNDc6XFx0XFx0XFx0XFx0Y29weSA9IGVycjtcXG4xMzQ4OlxcdFxcdFxcdH0gZWxzZSBpZiAoemMgPT0gTVNHX1NQTElDRV9QQUdFUykge1xcbjEzNDk6XFx0XFx0XFx0XFx0LyogU3BsaWNlIGluIGRhdGEgaWYgd2UgY2FuOyBjb3B5IGlmIHdlIGNhbid0LiAqL1xcbjEzNTA6XFx0XFx0XFx0XFx0aWYgKHRjcF9kb3duZ3JhZGVfemNvcHlfcHVyZShzaywgc2tiKSlcXG4xMzUxOlxcdFxcdFxcdFxcdFxcdGdvdG8gd2FpdF9mb3Jfc3BhY2U7XFxuMTM1MjpcXHRcXHRcXHRcXHRjb3B5ID0gdGNwX3dtZW1fc2NoZWR1bGUoc2ssIGNvcHkpO1xcbjEzNTM6XFx0XFx0XFx0XFx0aWYgKCFjb3B5KVxcbjEzNTQ6XFx0XFx0XFx0XFx0XFx0Z290byB3YWl0X2Zvcl9zcGFjZTtcXG4xMzU1OlxcdFxcbjEzNTY6XFx0XFx0XFx0XFx0ZXJyID0gc2tiX3NwbGljZV9mcm9tX2l0ZXIoc2tiLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgY29weSk7XFxuMTM1NzpcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjEzNTg6XFx0XFx0XFx0XFx0XFx0aWYgKGVyciA9PSAtRU1TR1NJWkUpIHtcXG4xMzU5OlxcdFxcdFxcdFxcdFxcdFxcdHRjcF9tYXJrX3B1c2godHAsIHNrYik7XFxuMTM2MDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5ld19zZWdtZW50O1xcbjEzNjE6XFx0XFx0XFx0XFx0XFx0fVxcbjEzNjI6XFx0XFx0XFx0XFx0XFx0Z290byBkb19lcnJvcjtcXG4xMzYzOlxcdFxcdFxcdFxcdH1cXG4xMzY0OlxcdFxcdFxcdFxcdGNvcHkgPSBlcnI7XFxuMTM2NTpcXHRcXG4xMzY2OlxcdFxcdFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTVNHX05PX1NIQVJFRF9GUkFHUykpXFxuMTM2NzpcXHRcXHRcXHRcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZsYWdzIHw9IFNLQkZMX1NIQVJFRF9GUkFHO1xcbjEzNjg6XFx0XFxuMTM2OTpcXHRcXHRcXHRcXHRza193bWVtX3F1ZXVlZF9hZGQoc2ssIGNvcHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDo1MC40MzEzMTgxMTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk0MTM2NDI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFplcm8tQ29weSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB6ZXJvLWNvcHkgZnVuY3Rpb25hbGl0eSBpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGUgYWRkaXRpb24gb2YgdGhpcyBjcnVjaWFsIGNoZWNrIHdpdGhpbiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gOiBgaWYgKGkgXHUwMDI2XHUwMDI2IHNrYl9mcmFnc19yZWFkYWJsZShza2IpKSByZXR1cm4gLUVFWElTVDtgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNvbmZsaWN0IHdoZW4gYXR0ZW1wdGluZyB0byB6ZXJvLWNvcHkgZGF0YSBpbnRvIGFuIFNLQiB0aGF0IGFscmVhZHkgaGFzIGZyYWdlbWVudHMgdGhhdCBjYW4gYmUgcmVhZC5cblxuTm93LCBsZXQncyBjb25uZWN0IHRoZSBkb3RzLiBUaGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGhhbmRsZXMgdGhlIGAtRUVYSVNUYCBlcnJvciB0aGF0IHRoaXMgbmV3IGNoZWNrIGludHJvZHVjZXMuIFRoZSBjb2RlIHNuaXBwZXQgc2hvd3M6XG5cbmBgYGNcblx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5cdFx0XHRcdFx0XHQgICAgICAgYmluZGluZyk7XG5cdFx0XHRpZiAoZXJyID09IC1FTVNHU0laRSB8fCBlcnIgPT0gLUVFWElTVCkge1xuXHRcdFx0XHR0Y3BfbWFya19wdXNoKHRwLCBza2IpO1xuXHRcdFx0XHRnb3RvIG5ld19zZWdtZW50O1xuXHRcdFx0fVxuYGBgXG5cblNvLCB3aGVuIGAtRUVYSVNUYCBpcyByZXR1cm5lZCBieSBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLCBgdGNwX3NlbmRtc2dfbG9ja2VkYCBncmFjZWZ1bGx5IGhhbmRsZXMgaXQgYnkgdHJpZ2dlcmluZyBgbmV3X3NlZ21lbnRgLCB3aGljaCBtZWFucyBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBzZWdtZW50LiBUaGlzIGluZGljYXRlcyB0aGUgZXhpc3RpbmcgU0tCIGlzIHVuc3VpdGFibGUgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uLCBwcm9iYWJseSBiZWNhdXNlIGl0IGNvbnRhaW5zIHVucmVhZGFibGUgZnJhZ21lbnRzLiBUaGlzIG9jY3VycyB3aGVuIGB6YyA9PSBNU0dfWkVST0NPUFlgIGFuZCBgYmluZGluZ2AgaXNuJ3QgbnVsbC4gVGhlIGBiaW5kaW5nYCBwYXJhbWV0ZXIgaXMgc291cmNlZCBmcm9tIGBzb2NrYy5uZXRtZW1fYmluZGluZ2AuIE5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcm9sZSBvZiBgbmV0bWVtX2JpbmRpbmdgIGlzIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgbG9naWMuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGhvdyBhbmQgd2hlbiBgYmluZGluZ2AgKGFuZCB0aGVyZWZvcmUgYHNvY2tjLm5ldG1lbV9iaW5kaW5nYCkgaXMgc2V0IHdpdGhpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gVGhpcyB1bmRlcnN0YW5kaW5nIGlzIGNyaXRpY2FsIHRvIGdyYXNwaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGl0cyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSBpbiB0aGVzZSB6ZXJvLWNvcHkgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDI0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTQ6NTYuMzcyNjg0MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDI3ODc0NTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tjLm5ldG1lbV9iaW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NDo1Ny40MTU0ODE4MzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzNjI4MjM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZm9yIEJpbmRpbmcqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBxdWVzdGlvbiBpcyBhYm91dCBob3cgYmluZGluZyByZWxhdGVzIHRvIHRoZSBleGVjdXRpb24gZmxvdyB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGlmIGFuZCB3aGVyZSB0aGUgYmluZGluZyBjb250ZXh0IGlzIHJlbGV2YW50IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJdCdzIGNydWNpYWwgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHNlY3Rpb25zIHdoZXJlIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgcG9ydCwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc29ja2V0J3MgYmluZGluZywgYXJlIHV0aWxpemVkLiBJcyBiaW5kaW5nIGNoZWNrZWQgZGlyZWN0bHk/IE9yIGRvZXMgdGhlIGZ1bmN0aW9uIHJlbHkgb24gcHJlY2VkaW5nIHNldHVwIHRoYXQgKmFzc3VtZXMqIHRoZSBzb2NrZXQgaXMgYm91bmQ/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgY2hlY2tzLCBjb25kaXRpb25hbCBicmFuY2hlcywgb3IgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzZXMgdGhhdCB3b3VsZCBoaW50IGF0IGEgYmluZGluZy1hd2FyZSBvcGVyYXRpb24uIFdlJ3JlIGxvb2tpbmcgZm9yIGFueSBjb2RlIHRoYXQgd291bGQgdHJlYXQgYm91bmQgYW5kIHVuYm91bmQgc29ja2V0cyBkaWZmZXJlbnRseSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc2VuZGluZyBkYXRhLiBUaGUgZ29hbCBpcyB0byBlaXRoZXIgY29uZmlybSBhIGRpcmVjdCBkZXBlbmRlbmN5LCBvciBpZGVudGlmeSBob3cgYmluZGluZyBpbnRlcmFjdHMgd2l0aCB0aGUgc2VuZCBwcm9jZXNzLCBpZiBhdCBhbGwuIFRoaXMgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGFuZCBmb2xsb3dpbmcgZXhlY3V0aW9uIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njk3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTU6MDEuOTUxNzY2NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Njk1MjkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2lwdjQvdGNwLmMtMTExNy17XFxubmV0L2lwdjQvdGNwLmM6MTExODpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyA9IE5VTEw7XFxubmV0L2lwdjQvdGNwLmMtMTExOS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTExNTgtXFx0XFx0XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XFxubmV0L2lwdjQvdGNwLmM6MTE1OTpcXHRcXHRcXHRcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcXG5uZXQvaXB2NC90Y3AuYzoxMTYwOlxcdFxcdFxcdFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG5uZXQvaXB2NC90Y3AuYzoxMTYxOlxcdFxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XFxubmV0L2lwdjQvdGNwLmM6MTE2MjpcXHRcXHRcXHRcXHRcXHRiaW5kaW5nID0gTlVMTDtcXG5uZXQvaXB2NC90Y3AuYy0xMTYzLVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTEzMzktXFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHNrLCBza2IsIG1zZywgY29weSwgdWFyZyxcXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBiaW5kaW5nKTtcXG5uZXQvaXB2NC90Y3AuYy0xMzQxLVxcdFxcdFxcdGlmIChlcnIgPT0gLUVNU0dTSVpFIHx8IGVyciA9PSAtRUVYSVNUKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xNDE5LVxcdFxcdG5ldF96Y29weV9wdXQodWFyZyk7XFxubmV0L2lwdjQvdGNwLmM6MTQyMDpcXHRpZiAoYmluZGluZylcXG5uZXQvaXB2NC90Y3AuYzoxNDIxOlxcdFxcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xcbm5ldC9pcHY0L3RjcC5jLTE0MjItXFx0cmV0dXJuIGNvcGllZCArIGNvcGllZF9zeW47XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xNDM4LVxcdH1cXG5uZXQvaXB2NC90Y3AuYzoxNDM5OlxcdGlmIChiaW5kaW5nKVxcbm5ldC9pcHY0L3RjcC5jOjE0NDA6XFx0XFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19wdXQoYmluZGluZyk7XFxubmV0L2lwdjQvdGNwLmMtMTQ0MS1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI0OTk9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjU5OC1cXHRcXHRcXHRcXHRkbWFidWZfY21zZy5mcmFnX3Rva2VuID0gdGNwX3hhX3Bvb2wudG9rZW5zW3RjcF94YV9wb29sLmlkeF07XFxubmV0L2lwdjQvdGNwLmM6MjU5OTpcXHRcXHRcXHRcXHRkbWFidWZfY21zZy5kbWFidWZfaWQgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKG5pb3YpO1xcbm5ldC9pcHY0L3RjcC5jLTI2MDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjAyLjI0ODcyNTExOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAxOTQ1MDc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVsdmluZyBpbnRvIERldmljZSBNZW1vcnkgVENQIEJpbmRpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYGJpbmRpbmdgIGhlcmUsIGFuZCBpdCdzIGJlaW5nIGFjcXVpcmVkIHVzaW5nIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgYG5ldF9kZXZtZW1gIGZlYXR1cmUg4oCTIHRoZSBkZXZpY2UgbWVtb3J5IFRDUCBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyBgbmV0X2Rldm1lbWAgc28gSSBrbm93IHdoYXQgdGhlIHByZWNvbmRpdGlvbnMgYXJlIGZvciB0aGlzIGNhbGwgdG8gZXZlbiBzdWNjZWVkLiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHdvdWxkIHByb3ZpZGUgaW1wb3J0YW50IGNvbnRleHQgYWJvdXQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgaW52b2x2ZWQgYW5kIHRoZSBjaXJjdW1zdGFuY2VzIHdoZXJlIHRoaXMgcGllY2Ugb2YgY29kZSB3b3VsZCBiZSByZWxldmFudC4gTGV0IG1lIHF1aWNrbHkgdHJhY2sgZG93biB0aGF0IGNvbmZpZ3VyYXRpb24gaXRlbS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njc3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTU6MTMuMjY4MTc3ODY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk3NDU2NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTM3Mj12b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy0zNzYtXFxubmV0L2NvcmUvZGV2bWVtLmM6Mzc3OnN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9kZXZtZW0uYy0zNzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xNTE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE1MjpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XFxubmV0L2NvcmUvZGV2bWVtLmgtMTUzLXN0cnVjdCBuZXRfaW92ICpcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTIyMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoyMjQ6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxubmV0L2NvcmUvZGV2bWVtLmgtMjI1LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTU4LVxcdFxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xcbm5ldC9pcHY0L3RjcC5jOjExNTk6XFx0XFx0XFx0XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XFxubmV0L2lwdjQvdGNwLmMtMTE2MC1cXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjE1LjE2NTY0MDMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNjAzNDA3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6XG5cbioqQ2hlY2tpbmcgdGhlIFJlY2lwZSBmb3IgdGhlIE1lbW9yeSBBY2Nlc3MgVG9vbCoqXG5cblJpZ2h0LCB0aW1lIHRvIHRyYWNrIGRvd24gdGhpcyBgZGV2bWVtLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0J3MgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgbmV0L2NvcmVgIGRpcmVjdG9yeS4gVGhlIG5ldHdvcmsgY29yZSBpcyBhIHByZXR0eSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIGxvdy1sZXZlbCBtZW1vcnkgYWNjZXNzIHRvb2xzLiBBbmQgd2l0aGluIHRoYXQgZGlyZWN0b3J5LCB0aGUgbGlrZWx5IGN1bHByaXQgZm9yIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgYE1ha2VmaWxlYC4gSSdsbCBvcGVuIHRoYXQgdXAgYW5kIHNlYXJjaCBmb3IgYGRldm1lbS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnVpbGQgcmVjaXBlIG9yIGF0IGxlYXN0IGEgY2x1ZSBhYm91dCB0aGUgZmluYWwgbG9jYXRpb24gb2YgdGhlIHJlbGV2YW50IG9iamVjdCBmaWxlIGFuZCB3aGVyZSBpdCBlbmRzIHVwIGluIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgdXRpbGl0eSBpcyBjb25zdHJ1Y3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM3NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjIzLjQyNTk4MzI0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyOTQ2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bWVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ4PW9iai0kKENPTkZJR19ORVRfVEVTVCkgKz0gbmV0X3Rlc3Qub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ5Om9iai0kKENPTkZJR19ORVRfREVWTUVNKSArPSBkZXZtZW0ub1xcbm5ldC9jb3JlL01ha2VmaWxlLTUwLW9iai0kKENPTkZJR19ERUJVR19ORVQpICs9IGxvY2tfZGVidWcub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NToyMy40ODgyODE1NjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwODE1MzI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEZXZtZW0gWmVyby1Db3B5IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpdCdzIGFib3V0IGBDT05GSUdfTkVUX0RFVk1FTWAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uJ3MgdXBzdHJlYW0gaXMgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBhbmQgdWx0aW1hdGVseSBieSBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gSXQgYXBwZWFycyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGAtRUVYSVNUYCByZXR1cm4gaWYgdGhlcmUgYXJlIGFscmVhZHkgcmVhZGFibGUgZnJhZ21lbnRzIGluIHRoZSBTS0Igd2hlbiB1c2luZyBkZXZpY2UgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBwcmV2ZW50aW5nIHRoZSBtaXhpbmcgb2YgcmVndWxhciBtZW1vcnkgKHJlYWRhYmxlIGZyYWdzKSB3aXRoIGRldmljZSBtZW1vcnkgKHVucmVhZGFibGUpIHdpdGhpbiB0aGUgc2FtZSBTS0IuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJlaGF2aW91ciBzaGlmdCwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyBcImZ1enppbmcgY2FuZGlkYXRlXCIgdG8gbWUuIEkgbmVlZCB0byBnZXQgdGhpcyB0ZXN0ZWQgdW5kZXIgZGlmZmVyZW50IGNvbmRpdGlvbnMuXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sczogYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCwgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAsIGFuZCBvZiBjb3Vyc2UgYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEhvd2V2ZXIsIHRoZSBmdW5jdGlvbiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gIHNlZW1zIG1vcmUgc3BlY2lmaWMsIGEgYmV0dGVyIHRvdWNocG9pbnQuXG5cbk5leHQgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgYWxzbyBjYWxsaW5nIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAsIGp1c3QgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGFmZmVjdHMgYW55dGhpbmcgbW9yZSB0aGFuIG9yaWdpbmFsbHkgdGhvdWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NToyOS4yOTY0Mzc4NzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTM2OTE0MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2RhdGFncmFtLmM9NzA2PXN0YXRpYyBpbnRcXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjcwNzp6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03MDgtXFx0XFx0XFx0ICAgICAgaW50IGxlbmd0aCxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM9NzQ5PWludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYwLVxcdGVsc2UgaWYgKGJpbmRpbmcpXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NjE6XFx0XFx0cmV0ID0gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc2tiLCBmcm9tLCBsZW5ndGgsIGJpbmRpbmcpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzYyLVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTU6MzEuMTkwMTM4MDk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mjk5NzgyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRoZSBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIG9ubHkgY2FsbGVkIGJ5IGEgbGltaXRlZCBzZXQgb2YgZnVuY3Rpb25zLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGl0J3MgY2FsbGVkIGJ5IGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCwgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2ZpbGxfc2tiYC4gVGhpcyBuYXJyb3dpbmcgaXMgaGVscGZ1bDsgaXQgZ2l2ZXMgbWUgYSBjb25jaXNlIGNhbGwgZ3JhcGguIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYXJndW1lbnQgYmluZGluZywgaW4gcGFydGljdWxhciB0aGUgYXJndW1lbnQgcGFzc2VkIGZyb20gYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuIEknbSBjb25jZXJuZWQgYWJvdXQgdGhlIGBiaW5kaW5nYCBhcmd1bWVudC4gUmlnaHQsIGl0IGxvb2tzIGxpa2Ugb25seSBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYCBwYXNzZXMgYSBgYmluZGluZ2AgYXJndW1lbnQgdG8gYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIHBhdGggZm9yIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0IGl0IHRvLiAgQnV0IGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIG90aGVyIGNvZGUgcGF0aHMsIHNvIGxldCdzIHRha2UgYSBsb29rIGF0IGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSBoYXZlIGFsbCB0aGUgcGllY2VzIGFuZCBoYXZlIG5vdCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTM1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjM1LjkyMDExODY1OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNTIwMjY2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfemVyb2NvcHlfaXRlcl9kZ3JhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzY4PWludCB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzE6c3RhdGljIGlubGluZSBpbnQgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz05NDk9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjUtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjY2OlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI2Ny1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xNDQ5PXN0YXRpYyBpbnQgX19pcDZfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzEtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTgzMjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMzLVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NTozNy41NDUzMjc3ODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NzY1MzAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGFuZCBaZXJvY29weSBTR3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGFuZCBpbW1lZGlhdGVseSB0aGUgZmFjdCB0aGF0IGl0IHBhc3NlcyBhIGBOVUxMYCBmb3IgYGJpbmRpbmdgIGdyYWJzIG15IGF0dGVudGlvbi4gVGhhdCdzIHVudXN1YWwuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgaXMgdGhlIGNhc2UuIFNpbmNlIGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgaXMgbGlrZWx5IGhhbmRsaW5nIGRhdGFncmFtIHNvY2tldHMgdXNpbmcgemVyby1jb3B5IG1lY2hhbmlzbXMsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIGluIHRoaXMgc2NlbmFyaW8gYW5kIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBvZiB0aGF0IGBOVUxMYCB2YWx1ZSBmb3IgYmluZGluZy4gSXMgdGhpcyBjb3JyZWN0PyBJcyB0aGlzIGludGVuZGVkLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZSBhcmNoaXRlY3R1cmFsIHJlYXNvbnM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgYXJpc2luZyBmcm9tIHRoaXMgZGVzaWduIGNob2ljZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBhYnNlbmNlIG9mIGEgYmluZGluZyBhZmZlY3RzIHRoZSBoYW5kbGluZyBvZiB0aGUgc2NhdHRlcmVkL2dhdGhlcmVkIGRhdGEuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB6ZXJvLWNvcHkgYW5kIHNjYXR0ZXItZ2F0aGVyIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgd2l0aCBkYXRhZ3JhbSBzb2NrZXRzIGFuZCB3aGF0IGNvbnRleHQgaXMgcmVxdWlyZWQuIEl0J3MgdGltZSB0byBmb2xsb3cgdGhlIHRyYWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjQxLjYxMjk4NDY2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExNzMwNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGFwLmM9NTcyPXN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTYyNy1cXHRpZiAoemVyb2NvcHkpXFxuZHJpdmVycy9uZXQvdGFwLmM6NjI4OlxcdFxcdGVyciA9IHplcm9jb3B5X3NnX2Zyb21faXRlcihza2IsIGZyb20pO1xcbmRyaXZlcnMvbmV0L3RhcC5jLTYyOS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xNzI2PXN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTgxOS1cXHRcXHRcXHQgKiBJZiB6ZXJvY29weSBpcyBlbmFibGVkLCB0aGVuIHRoaXMgbGF5b3V0IHdpbGwgYmVcXG5kcml2ZXJzL25ldC90dW4uYzoxODIwOlxcdFxcdFxcdCAqIG92ZXJ3cml0dGVuIGJ5IHplcm9jb3B5X3NnX2Zyb21faXRlcigpLlxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjEtXFx0XFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xODM1LVxcdFxcdGlmICh6ZXJvY29weSlcXG5kcml2ZXJzL25ldC90dW4uYzoxODM2OlxcdFxcdFxcdGVyciA9IHplcm9jb3B5X3NnX2Zyb21faXRlcihza2IsIGZyb20pO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MzctXFx0XFx0ZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYxPXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2Mi1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2NC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzMte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBza2ItXFx1MDAzZXNrLCBza2IsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc1LVxcdFxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDI1Mj1pbnQgc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyX2Z1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCxcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGludCBsZW4pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI1NDppbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJtKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTUtdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg9MTM4PWVudW0gc2tiX2Ryb3BfcmVhc29uIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxMi1cXHQgKiBAU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVDogZmFpbGVkIHRvIGNvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UsXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlxcdCAqIGUuZy4sIHZpYSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKSBvciBza2Jfb3JwaGFuX2ZyYWdzX3J4KClcXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTQtXFx0ICovXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc0OC1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc0OTppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NTAtXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc0LX1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ny0vKipcXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3ODogKlxcdHplcm9jb3B5X3NnX2Zyb21faXRlciAtIEJ1aWxkIGEgemVyb2NvcHkgZGF0YWdyYW0gZnJvbSBhbiBpb3ZfaXRlclxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc5LSAqXFx0QHNrYjogYnVmZmVyIHRvIGNvcHlcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzg2LSAqL1xcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg3OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzg4LXtcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzk0LVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk1OlxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihOVUxMLCBOVUxMLCBza2IsIGZyb20sIH4wVSwgTlVMTCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTYtfVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk3OkVYUE9SVF9TWU1CT0woemVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5OC1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MDY9aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI3LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5Mjg6XFx0ZXJyID0gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBzaywgc2tiLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MjktXFx0XFx0XFx0XFx0ICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9ODA9c3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X2ZpbGxfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODctXFx0aWYgKHpjb3B5KVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcXHRcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBOVUxMLCBza2IsXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLCBOVUxMKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTIzOS1cXHQvKiBJZiAndnNrJyAhPSBOVUxMIHRoZW4gcGF5bG9hZCBpcyBhbHdheXMgcHJlc2VudCwgc28gd2VcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQwOlxcdCAqIHdpbGwgbmV2ZXIgY2FsbCAnX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoKScgYmVsb3cgd2l0aG91dFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDEtXFx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJ3NrYl9zZXRfb3duZXJfdygpJy4gVGhlIG9ubHkgY2FzZVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQ3OlxcdC8qIFNldCBvd25lciBoZXJlLCBiZWNhdXNlICdfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJyB1c2VzXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0OC1cXHQgKiBvd25lciBvZiBza2Igd2l0aG91dCBjaGVjayB0byB1cGRhdGUgJ3NrX3dtZW1fYWxsb2MnLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NTo0My4yMjQ3MTk0OTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUwNDgwODYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBCaW5kaW5nIFBhcmFtZXRlciBpbiBaZXJvY29weSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGBiaW5kaW5nYCBwYXJhbWV0ZXIgaXMgYmVpbmcgdXNlZCBpbiB0aGUgemVyb2NvcHkgY29kZSBwYXRoLiBUaGUgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGRpcmVjdGx5IGhhbmRzIG9mZiBhIGBOVUxMYCBmb3IgYGJpbmRpbmdgLiBUaGF0IHN1Z2dlc3RzIGl0J3Mgbm90IHRoZSBwcmltYXJ5IHNvdXJjZSBvZiB0aGUgdmFsdWUuIFJpZ2h0LCBzbyBsb29raW5nIGRlZXBlciwgYGJpbmRpbmdgIHNlZW1zIHRvIGJlIHNvdXJjZWQgZnJvbSBgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtYC4gTm93LCB3aGVyZSBkb2VzICp0aGF0KiBnZXQgY2FsbGVkPyBBaCwgaXQncyBjYWxsZWQgZnJvbSBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gVGhpcyBtZWFucyB0aGF0IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FuIGV2ZW50dWFsbHkgcmVhY2ggYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCB0aHJvdWdoIHRoaXMgc3BlY2lmaWMgcGF0aC4gQnV0LCBpcyB0aGF0IHJpZ2h0PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgKmRlZmluaXRlbHkqIHRoZSAqb25seSogY2FsbGVyIG9mIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLiBMZXQgbWUgc2VlLi4uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTU6NDguNzI5NTMxNTY5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAxOTE2NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl96ZXJvY29weV9pdGVyX3N0cmVhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzc4OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MDQ9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTA1LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MDY6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTkwNy1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NDMtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NDQ6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTQ1LVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTEzMzgtXFxubmV0L2lwdjQvdGNwLmM6MTMzOTpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc2ssIHNrYiwgbXNnLCBjb3B5LCB1YXJnLFxcbm5ldC9pcHY0L3RjcC5jLTEzNDAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJpbmRpbmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NTo1MC4zMzE0NTQyOTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NTczNDQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBaZXJvLUNvcHkgTmV0d29yayBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSd2ZSB0cmFjZWQgdGhlIGNhbGwgc3RhY2ssIGFuZCBpdCBsb29rcyBsaWtlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHRoZSAqb25seSogZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgY29kZSBJJ20gaW50ZXJlc3RlZCBpbiBmb3IgemVyby1jb3B5IG9wZXJhdGlvbnMuIFRoYXQgbmFycm93cyBkb3duIG15IGZvY3VzIHNpZ25pZmljYW50bHkuIFRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgYXJlOiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLCBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBhbmQgYHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBtZWNoYW5pY3Mgb2YgdGhpcyB6ZXJvLWNvcHkgaW1wbGVtZW50YXRpb24uXG5cbkJhc2VkIG9uIHRoaXMsIGl0IGFsc28gc2VlbXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBiZSBgTkVUX0RFVk1FTWAuIEknbGwgd2FudCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBORVRfREVWTUVNYCBpcywgaW4gZmFjdCwgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gZ292ZXJuaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gSXQncyBsaWtlbHkgZGVmaW5lZCBpbiBgbmV0L2NvcmUvS2NvbmZpZ2AsIHdoaWNoIGlzIHdoZXJlIEknbGwgZmluZCBpdHMgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNDYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTU6NTQuNjI3MTkxNjQ1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcwMjE4MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfREVWTUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcXG4tLVxcbm5ldC9LY29uZmlnLTY4LVxcbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXFxubmV0L0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NTo1Ni40OTc0MTczMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM3NzQ1NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYE5FVF9ERVZNRU1gIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGBkZWZfYm9vbCB5YC4gVGhhdCBpbnN0YW50bHkgZmxhZ3Mgc29tZXRoaW5nIGltcG9ydGFudCDigJMgaXQncyBhIGRlZmF1bHQgYm9vbGVhbiwgc2V0IHRvIFwieWVzLlwiIFRoaXMgcmVxdWlyZXMgY2xvc2VyIGluc3BlY3Rpb24uIExldCdzIGRpZyBpbnRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZWZhdWx0LiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBhcm91bmQgbGluZSA2OTsgdGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBkZWZpbml0aW9uIHJlc2lkZXMsIGFuZCB3aGVyZSB0aGUgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMsIGNvbW1lbnRzLCBhbmQgcmVsYXRpb25zaGlwcyB0byBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUuIFVuZGVyc3RhbmRpbmcgKndoeSogaXQncyBzZXQgdGhpcyB3YXkgaXMgY3J1Y2lhbDsgaXMgaXQgZW5hYmxpbmcgYSBmZWF0dXJlLCBvciBpcyBpdCBtZXJlbHkgZXhwb3NpbmcgYW4gb3B0aW9uPyBLbm93aW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdWJzeXN0ZW0gaXMgZXNzZW50aWFsIHRvIG15IGFuYWx5c2lzLiBJIGhhdmUgdG8gc2VlIHdoYXQgdGhpcyBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc4MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU1OjU5LjczNTE2NTU0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRjb25maWcgTkVUX1JFRElSRUNUXFxuICA2MTpcXHRcXHRib29sXFxuICA2MjpcXHRcXG4gIDYzOlxcdGNvbmZpZyBTS0JfREVDUllQVEVEXFxuICA2NDpcXHRcXHRib29sXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NTo1OS43MzUyMzc1MDhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMjcwODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5FVF9ERVZNRU0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGBORVRfREVWTUVNYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgYW5kIHNldCB0byAneScuIFRoYXQncyBnb29kLCBidXQgaXQncyBjb25kaXRpb25hbC4gSXQncyAqZGVwZW5kZW50KiBvbiBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIG9mICp0aG9zZSogYXJlIGVuYWJsZWQgYmVmb3JlIEkgYXNzdW1lIGBORVRfREVWTUVNYCBpcyBhY3R1YWxseSBnb2luZyB0byBiZSBhY3RpdmUuIFRoaXMgbWVhbnMgaWYgYERNQV9TSEFSRURfQlVGRkVSYCBvciBgUEFHRV9QT09MYCBhcmUgbm90IGVuYWJsZWQsIHRoZW4gYE5FVF9ERVZNRU1gIHdvbid0IGJlIGVpdGhlciwgcmVnYXJkbGVzcyBvZiBpdHMgYGRlZl9ib29sIHlgIHNldHRpbmcuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBzdGF0dXMgb2YgYERNQV9TSEFSRURfQlVGRkVSYC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgcHJlLXJlcXVpc2l0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMjAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU2OjAyLjk2Nzk0ODQ0NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjY1Nzg0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9LY29uZmlnPTIxMz1zb3VyY2UgXFxcImRyaXZlcnMvYmFzZS9yZWdtYXAvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTQtXFxuZHJpdmVycy9iYXNlL0tjb25maWc6MjE1OmNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU2OjA0LjYyNDYxNDAyN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA1MTM5ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBJbnF1aXJ5OiBETUEgU2hhcmVkIEJ1ZmZlciBCb29sZWFuKipcblxuT2theSwgc28gYERNQV9TSEFSRURfQlVGRkVSYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgaW50ZXJlc3RpbmcuIE15IG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCBpdHMgZGVjbGFyYXRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGNoZWNrIHRoZSBgZHJpdmVycy9iYXNlL0tjb25maWdgIGZpbGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGJhc2UgZHJpdmVycyBvZnRlbiBoYXZlIGZ1bmRhbWVudGFsIHNldHRpbmdzIGxpa2UgdGhpcy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIGJvb2xlYW4gaXMgY3J1Y2lhbC4gSXMgaXQgcGFydCBvZiB0aGUgZGVmYXVsdCBrZXJuZWwgY29uZmlndXJhdGlvbiwgaXMgaXQgZW5hYmxlZCBvbiBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBpcyBpdCBwYXJ0IG9mIGEgYnJvYWRlciBtb2R1bGU/IEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIGRyaXZlciBvcHRpb25zIGFzIEkgZXhwbG9yZSB0aGlzLiBUaGlzIHdpbGwgcXVpY2tseSBnaXZlIG1lIGFuIG92ZXJ2aWV3IG9mIHRoZSByb2xlIGFuZCBwdXJwb3NlIG9mIHRoaXMgc3BlY2lmaWMgYm9vbGVhbiB3aXRoaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NjowOC4wMjk3NTYzNzJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdFxcdGJvb2xcXG4gMjExOlxcdFxcdHNlbGVjdCBHTE9CXFxuIDIxMjpcXHRcXG4gMjEzOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG4gMjE2OlxcdFxcdGJvb2xcXG4gMjE3OlxcdFxcdGRlZmF1bHQgblxcbiAyMTg6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuIDIxOTpcXHRcXHRoZWxwXFxuIDIyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3IgYnVmZmVyLXNoYXJpbmcgYmV0d2VlblxcbiAyMjE6XFx0XFx0ICBtdWx0aXBsZSBkcml2ZXJzLiBBIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIHVzaW5nIGRyaXZlclxcbiAyMjI6XFx0XFx0ICBBUElzIGV4dGVuc2lvbjsgdGhlIGZpbGUncyBkZXNjcmlwdG9yIGNhbiB0aGVuIGJlIHBhc3NlZCBvbiB0byBvdGhlclxcbiAyMjM6XFx0XFx0ICBkcml2ZXIuXFxuIDIyNDpcXHRcXG4gMjI1OlxcdGNvbmZpZyBETUFfRkVOQ0VfVFJBQ0VcXG4gMjI2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB2ZXJib3NlIERNQV9GRU5DRV9UUkFDRSBtZXNzYWdlc1xcXCJcXG4gMjI3OlxcdFxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG4gMjI4OlxcdFxcdGhlbHBcXG4gMjI5OlxcdFxcdCAgRW5hYmxlIHRoZSBETUFfRkVOQ0VfVFJBQ0UgcHJpbnRrcy4gVGhpcyB3aWxsIGFkZCBleHRyYVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwOTo1NjowOC4wMjk4MjgzMjJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNzcyMDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gRE1BIGFuZCBQYWdlIFBvb2xzKipcblxuT2theSwgc28gdGhpcyBgRE1BX1NIQVJFRF9CVUZGRVJgIHRoaW5n4oCmIHRoYXQncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgKm5lZWRzKiB0byBiZSBlbmFibGVkLCByaWdodD8gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgSSBuZWVkIHRvIHZlcmlmeSBpdC4gV2hhdCBJICpyZWFsbHkqIHdhbnQgdG8gc2VlIGlzIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBgUEFHRV9QT09MYCBjb25maWd1cmF0aW9uLiBJcyBpdCBiZWluZyB1c2VkPyBJcyBpdCBldmVuIGRlZmluZWQgb3IgZW5hYmxlZD8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoaXMgc2hhcmVkIGJ1ZmZlciBpcyB1dGlsaXplZCwgYW5kIHdoZXRoZXIgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgb3B0aW1pemVkIGZ1cnRoZXIsIG9yIGlzIGNhdXNpbmcgYW4gaXNzdWUgc29tZXdoZXJlIGVsc2UuIExldCdzIHNlZSB3aGF0IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzIHJldmVhbC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNTUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA5OjU2OjExLjE1NzU1MTUwOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NjcwNDQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFHRV9QT09MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcbm5ldC9LY29uZmlnLTQ5My1cXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbm5ldC9LY29uZmlnLTQ5NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTY6MTIuODA0MjY2NTM5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNTQyNDExOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBGdXp6aW5nIHRoZSBEZXZtZW0gWmVyb2NvcHkgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBzaXR1YXRpb24gZm9yIGZ1enppbmcgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYE5FVF9ERVZNRU1gIGZlYXR1cmUgYW5kIHRoaXMgbmV3IHBhdGNoLiAgSW5pdGlhbGx5LCBpdCBzZWVtZWQgc3RyYWlnaHRmb3J3YXJkOiBgUEFHRV9QT09MYCBpcyBlc3NlbnRpYWxseSBhIGJvb2xlYW4gZmxhZywgc28gaXQncyBub3QgYSBkaXJlY3QgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gdGFyZ2V0LiAgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIGluIHRoaXMgaW5zdGFuY2UuIEJ1dCB0aGVuIEkgc2F3IHRoYXQgYE5FVF9ERVZNRU1gIGlzIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLCBhbmQgY3J1Y2lhbGx5IGRlcGVuZHMgb24gdGhvc2Ugb3RoZXIgdHdvLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHNpbXBseSBzcGVjaWZ5IGBORVRfREVWTUVNYCwgYW5kIGxldCBzeXprYWxsZXIgaGFuZGxlIHRoZSBkZXBlbmRlbmNpZXMuIEhvd2V2ZXIsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIExpc3RpbmcgYE5FVF9ERVZNRU1gIGFsb25lIG1lYW5zIGl0ICpjb3VsZCogYmUgZW5hYmxlZCBpZiB0aGUgZGVwZW5kZW5jaWVzIGV4aXN0LiAgQnV0LCB3aGF0IGlmIHRoZXkgYXJlbid0IHNlbGVjdGVkIGJ5IGRlZmF1bHQ/IEkgbmVlZCB0byBiZSBtb3JlIGV4cGxpY2l0LiAgQWxzbywgaXQncyB3b3J0aCBub3RpbmcgdGhhdCBgUEFHRV9QT09MYCBpcyBvZnRlbiBzZWxlY3RlZCBieSB2YXJpb3VzIG5ldHdvcmsgZHJpdmVycywgd2hpbGUgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBzZWxlY3RlZCBieSBEUk0gYW5kIG90aGVyIHN5c3RlbXMuIFNvLCBzaW1wbHkgbGlzdGluZyBgTkVUX0RFVk1FTWAgd291bGQgaW50cm9kdWNlIGEgcmlzayBvZiB0aGUgZnV6emVyIGZhaWxpbmcuIFNvLCBJIG5lZWQgdG8gbGlzdCB0aGUgZGVwZW5kZW5jaWVzIVxuXG5XaGlsZSBgTkVUX0RFVk1FTWAgaXMgdGhlIG1vc3QgZGlyZWN0IGNvbmZpZyBmb3IgdGhpcyBjb2RlIHBhdGgsIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIFNvLCBJIHdpbGwgbGlzdCBgTkVUX0RFVk1FTWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAuXG5cbk5vdywgb250byB0aGUgcGF0Y2ggaXRzZWxmLiBMZXQgbWUgcmV2aWV3IHRoYXQgY29kZSBhZ2Fpbi4gQWgsIGhlcmUncyB0aGUga2V5IGNoYW5nZTpcblxuYGBgY1xuXHRpZiAoaSBcdTAwMjZcdTAwMjYgc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikpXG5cdFx0cmV0dXJuIC1FRVhJU1Q7XG5gYGBcblxuVGhpcyBwcmV2ZW50cyBhcHBlbmRpbmcgZGV2bWVtIGZyYWdzIHRvIGFuIFNLQiBpZiBpdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1gLCBhbmQgaXQncyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBlcnJvciBwYXRoICgtRUVYSVNUKSBpcyBoYW5kbGVkIGNvcnJlY3RseSwgYW5kIEkgd2FudCB0byB2ZXJpZnkgdGhhdCBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIGFyZTogYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCwgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYW5kIGBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM3MywiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDk6NTY6MjEuODU4NTI0MjU5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5ODI4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZNRU1cIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW1cIixcbiAgICBcIl9femVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gICAgXCJza2JfemVyb2NvcHlfaXRlcl9zdHJlYW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtYCB0byBwcmV2ZW50IGFwcGVuZGluZyBkZXZtZW0gZnJhZ21lbnRzIHRvIGFuIHNrYiB0aGF0IGFscmVhZHkgY29udGFpbnMgcmVhZGFibGUgZnJhZ21lbnRzLCByZXR1cm5pbmcgYC1FRVhJU1RgLiBUaGlzIGFmZmVjdHMgdGhlIFRDUCB6ZXJvY29weSBwYXRoIHdoZW4gdXNpbmcgZGV2aWNlIG1lbW9yeSAoZGV2bWVtKS4gRnV6emluZyBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhpcyBuZXcgZXJyb3IgcGF0aCBpcyBoYW5kbGVkIGNvcnJlY3RseSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X2ZpbGxfc2tiX2Zyb21fZGV2bWVtXCIsXG4gICAgXCJfX3plcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICAgIFwic2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbWAgdG8gcHJldmVudCBhcHBlbmRpbmcgZGV2bWVtIGZyYWdtZW50cyB0byBhbiBza2IgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHJlYWRhYmxlIGZyYWdtZW50cywgcmV0dXJuaW5nIGAtRUVYSVNUYC4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgemVyb2NvcHkgcGF0aCB3aGVuIHVzaW5nIGRldmljZSBtZW1vcnkgKGRldm1lbSkuIEZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoaXMgbmV3IGVycm9yIHBhdGggaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrs2s[1] Phase: Succeeded StartedAt: 2026-07-23 09:56:33 +0000 UTC FinishedAt: 2026-07-23 09:56:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 09:56:33 +0000 UTC FinishedAt: 2026-07-23 09:56:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2] Phase: Succeeded StartedAt: 2026-07-23 09:56:33 +0000 UTC FinishedAt: 2026-07-23 13:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 09:56:33 +0000 UTC FinishedAt: 2026-07-23 13:53:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 09:56:33 +0000 UTC FinishedAt: 2026-07-23 09:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 09:56:33 +0000 UTC FinishedAt: 2026-07-23 09:56:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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-workflowzrs2s/series-workflowzrs2s-convert-artifact-3120199189/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 09:56:43 +0000 UTC FinishedAt: 2026-07-23 10:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 09:56:43 +0000 UTC FinishedAt: 2026-07-23 10:21:10 +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:*295039c2-ef8d-4be5-b5b2-921e7a8bb41a,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-workflowzrs2s/series-workflowzrs2s-convert-artifact-3120199189/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": "c507ad2e-fcad-4af9-8e68-3f794fb5f0a9", "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-workflowzrs2s/series-workflowzrs2s-build-action-4072328827/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 09:56:43 +0000 UTC FinishedAt: 2026-07-23 10:21:00 +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:*295039c2-ef8d-4be5-b5b2-921e7a8bb41a,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-workflowzrs2s/series-workflowzrs2s-convert-artifact-3120199189/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": "c507ad2e-fcad-4af9-8e68-3f794fb5f0a9", "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-workflowzrs2s/series-workflowzrs2s-build-action-4072328827/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:21:10 +0000 UTC FinishedAt: 2026-07-23 10:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:21:10 +0000 UTC FinishedAt: 2026-07-23 10:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:21:10 +0000 UTC FinishedAt: 2026-07-23 10:21:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:21:10 +0000 UTC FinishedAt: 2026-07-23 10:21:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-workflowzrs2s/series-workflowzrs2s-convert-artifact-3849577200/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:21:20 +0000 UTC FinishedAt: 2026-07-23 10:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:21:20 +0000 UTC FinishedAt: 2026-07-23 10:23:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c507ad2e-fcad-4af9-8e68-3f794fb5f0a9,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-workflowzrs2s/series-workflowzrs2s-build-action-4072328827/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-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:23:26 +0000 UTC FinishedAt: 2026-07-23 10:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:23:26 +0000 UTC FinishedAt: 2026-07-23 10:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:23:26 +0000 UTC FinishedAt: 2026-07-23 10:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:23:26 +0000 UTC FinishedAt: 2026-07-23 10:48:24 +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:*295039c2-ef8d-4be5-b5b2-921e7a8bb41a,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-workflowzrs2s/series-workflowzrs2s-convert-artifact-3849577200/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": "c3a4517d-9e45-4a3d-9244-d91875d07dcb", "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-workflowzrs2s/series-workflowzrs2s-build-action-1979597804/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:23:26 +0000 UTC FinishedAt: 2026-07-23 10:48:03 +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:*295039c2-ef8d-4be5-b5b2-921e7a8bb41a,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-workflowzrs2s/series-workflowzrs2s-convert-artifact-3849577200/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": "c3a4517d-9e45-4a3d-9244-d91875d07dcb", "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-workflowzrs2s/series-workflowzrs2s-build-action-1979597804/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:48:24 +0000 UTC FinishedAt: 2026-07-23 10:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:48:24 +0000 UTC FinishedAt: 2026-07-23 10:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:48:24 +0000 UTC FinishedAt: 2026-07-23 10:50:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:48:24 +0000 UTC FinishedAt: 2026-07-23 10:50:14 +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:*c3a4517d-9e45-4a3d-9244-d91875d07dcb,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-workflowzrs2s/series-workflowzrs2s-build-action-1979597804/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-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:50:24 +0000 UTC FinishedAt: 2026-07-23 13:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:50:24 +0000 UTC FinishedAt: 2026-07-23 13:53:47 +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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"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:*c507ad2e-fcad-4af9-8e68-3f794fb5f0a9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3a4517d-9e45-4a3d-9244-d91875d07dcb,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-workflowzrs2s/series-workflowzrs2s-build-action-4072328827/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-workflowzrs2s/series-workflowzrs2s-build-action-1979597804/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:50:24 +0000 UTC FinishedAt: 2026-07-23 10:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:50:24 +0000 UTC FinishedAt: 2026-07-23 10:50:30 +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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"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-workflowzrs2s/series-workflowzrs2s-convert-artifact-2160698217/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:50:24 +0000 UTC FinishedAt: 2026-07-23 10:50:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:50:24 +0000 UTC FinishedAt: 2026-07-23 10:50:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:50:24 +0000 UTC FinishedAt: 2026-07-23 10:50:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:50:34 +0000 UTC FinishedAt: 2026-07-23 13:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrs2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"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":["zerocopy_fill_skb_from_devmem","__zerocopy_sg_from_iter","skb_zerocopy_iter_stream"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f43ee0c0730d6191629b5ee1ceae27b1ebfdc047","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVMEM","DMA_SHARED_BUFFER"],"series_id":"8b056e90-5e9b-4050-bd83-e66b0f1ad997","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-07-23 10:50:34 +0000 UTC FinishedAt: 2026-07-23 13:53:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c507ad2e-fcad-4af9-8e68-3f794fb5f0a9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3a4517d-9e45-4a3d-9244-d91875d07dcb,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-workflowzrs2s/series-workflowzrs2s-build-action-4072328827/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-workflowzrs2s/series-workflowzrs2s-build-action-1979597804/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-workflowzrs2s/series-workflowzrs2s-convert-artifact-2160698217/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,}