Name: series-workflowxpkjd Phase: Succeeded StartedAt: 2026-08-07 12:52:57 +0000 UTC FinishedAt: 2026-08-07 17:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[0] Phase: Succeeded StartedAt: 2026-08-07 12:52:57 +0000 UTC FinishedAt: 2026-08-07 13:32:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 12:52:57 +0000 UTC FinishedAt: 2026-08-07 13:32:55 +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": "c7a127371ce5dc3d073cc69ba70145c2c420d8e2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_U32" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c7a127371ce5dc3d073cc69ba70145c2c420d8e2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_U32" ], "series_id": "2eb7a5b2-44dd-46b7-b64e-729da103ee09" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "u32_change" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB1MzJfY2hhbmdlYCB3aGVyZSB0aGUgYGZsYWdzYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHBhcnNlZCBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuIFRoaXMgY2F1c2VkIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgdG8gcmVjZWl2ZSB0aGUgd3JvbmcgZmxhZ3MsIHBvdGVudGlhbGx5IGFmZmVjdGluZyBoYXJkd2FyZSBvZmZsb2FkIGJlaGF2aW9yIChlLmcuLCBpbmNvcnJlY3RseSBldmFsdWF0aW5nIGB0Y19za2lwX3N3KGZsYWdzKWApLiBUaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgYnV0IHRoaXMgc3BlY2lmaWMgYnVnIGlzIGp1c3QgaW5jb3JyZWN0IGZsYWcgdXNhZ2UuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1MzJfY2hhbmdlYCBpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllciAodGMgZmlsdGVyKSB0byB1c2UgYHVzZXJmbGFnc2AgaW5zdGVhZCBvZiBgZmxhZ3NgIHdoZW4gY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBmaWx0ZXIgYWRkL2NoYW5nZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyY2JkNjY4YTQ2NDFhOTUyYTk4NTc1MjRmNzZiYmJhOWU4MWQyZTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMzoxMzoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuaW5kZXggOGYzMGNjODIxODFkOS4uZGM2ZTQ1NWU2NGVjNyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcbkBAIC05MzUsNyAmIzQzOzkzNSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gXHRcdHUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7XG4gXG4tXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuJiM0MztcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpO1xuIFxuQEAgLTExNjEsNyAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRzdHJ1Y3QgdGNfdV9rbm9kZSBfX3JjdSAqKmlucztcbiBcdFx0c3RydWN0IHRjX3Vfa25vZGUgKnBpbnM7XG4gXG4tXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCBmbGFncywgZXh0YWNrKTtcbiYjNDM7XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBlcnJ1bmJpbmQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdTMyX2NoYW5nZWAgaW4gdGhlIGBjbHNfdTMyYCB0cmFmZmljIGNsYXNzaWZpZXIgKHRjIGZpbHRlcikgdG8gdXNlIGB1c2VyZmxhZ3NgIGluc3RlYWQgb2YgYGZsYWdzYCB3aGVuIGNhbGxpbmcgYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgZmlsdGVyIGFkZC9jaGFuZ2UpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmNiZDY2OGE0NjQxYTk1MmE5ODU3NTI0Zjc2YmJiYTllODFkMmU2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTM6MTM6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuYwppbmRleCA4ZjMwY2M4MjE4MWQ5Li5kYzZlNDU1ZTY0ZWM3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKQEAgLTkzNSw3ICYjNDM7OTM1LDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAogCQl1MzJfYmluZF9maWx0ZXIodHAsIG5ldywgYmFzZSwgdGIpOwogCi0JCWVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spOwomIzQzOwkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spOwogCQlpZiAoZXJyKSB7CiAJCQl1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbmV3LCB0Yik7CiAKQEAgLTExNjEsNyAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlzdHJ1Y3QgdGNfdV9rbm9kZSBfX3JjdSAqKmluczsKIAkJc3RydWN0IHRjX3Vfa25vZGUgKnBpbnM7CiAKLQkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIGZsYWdzLCBleHRhY2spOwomIzQzOwkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJydW5iaW5kOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBjbHNfdTMyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2Nsc191MzIuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3JlIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllciAodGMgZmlsdGVyKS4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBtb2RpZmllZCB0aGUgY2FsbCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLgoKUHJldmlvdXNseSwgYHUzMl9jaGFuZ2VgIHdhcyBjYWxsaW5nIGB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCBmbGFncywgZXh0YWNrKWAuIE5vdywgdGhlIGNhbGwgaXMgYHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKWAuIFRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGUgcGFyYW1ldGVyIGJlaW5nIHBhc3NlZDogYGZsYWdzYCBpcyBiZWluZyByZXBsYWNlZCBieSBgdXNlcmZsYWdzYC4gQ2xlYXJseSwgdGhlIGludGVudGlvbiBoZXJlIGlzIHRvIHVzZSBhIGRpZmZlcmVudCBzZXQgb2YgZmxhZ3MsIHByZXN1bWFibHkgdXNlci1wcm92aWRlZCBmbGFncy4KCkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiBhbmQgc2VlIGhvdyB0aGVzZSBgdXNlcmZsYWdzYCBhcmUgYmVpbmcgaGFuZGxlZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggYXV0aG9yIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoIGhlcmUgYW5kIGhvdyB0aGlzIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBgY2xzX3UzMmAgY2xhc3NpZmllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1MzJfY2hhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jPTgyMT1zdGF0aWMgc3RydWN0IHRjX3Vfa25vZGUgKnUzMl9pbml0X2tub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy04NzEtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjg3MjpzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L3NjaGVkL2Nsc191MzIuYy04NzMtXHRcdCAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDU4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2My1cdC5nZXRcdFx0PVx0dTMyX2dldCxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ2NDpcdC5jaGFuZ2VcdFx0PVx0dTMyX2NoYW5nZSxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2NS1cdC5kZWxldGVcdFx0PVx0dTMyX2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKlByaW9yaXRpemluZyBGdXp6aW5nIFRhcmdldHMgaW4gY2xzX3UzMioqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBpcyB0aGUgY3J1Y2lhbCBgLmNoYW5nZWAgY2FsbGJhY2sgd2l0aGluIGBjbHNfdTMyX29wc2AuIEdpdmVuIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3RydWN0dXJlLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gV2UgY2FuJiMzOTt0IGxldCB0aGlzIHNsaXAgdGhyb3VnaCBvdXIgZmluZ2Vycy4gVGhlIGAuY2hhbmdlYCBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIGFsd2F5cyBwcm9uZSB0byBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTGV0JiMzOTtzIGltbWVkaWF0ZWx5IGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGNsc191MzIuY2AgYW5kIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RseSBzZXQgdXAgZm9yIGl0LiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBvdXIgZnV6emluZyBoYXJuZXNzIHdpbGwgZWZmZWN0aXZlbHkgcmVhY2ggdGhpcyBjb2RlIHBhdGggYW5kIHRoYXQgd2UgaGF2ZSB0aGUgcHJvcGVyIGluc3RydW1lbnRhdGlvbiBpbiBwbGFjZSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gR290dGEgZW5zdXJlIGNvdmVyYWdlIGlzIHRob3JvdWdoIGFuZCB0aGUgZmVlZGJhY2sgbG9vcCBpcyB0aWdodC4gVGhpcyBsb29rcyBsaWtlIGxvdy1oYW5naW5nIGZydWl0IHdpdGggaGlnaCBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nsc191MzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01MTY9Y29uZmlnIE5FVF9DTFNfVTMyXG4tLVxubmV0L3NjaGVkL0tjb25maWctNTIzLVx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG5uZXQvc2NoZWQvS2NvbmZpZzo1MjQ6XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfdTMyLlxubmV0L3NjaGVkL0tjb25maWctNTI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCYjMzk7cyBhIGRpcmVjdCBleHByZXNzaW9uIG9mIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5FVF9DTFNfVTMyIGluIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgYE5FVF9DTFNfVTMyYC4gSXQmIzM5O3MgcHJldHR5IGZ1bmRhbWVudGFsLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgdG8gYG5ldC9zY2hlZC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG5ldHdvcmtpbmcgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBVMzJgIGlzIGEga2V5IGNvbXBvbmVudCBpbiBhIGxvdCBvZiB0cmFmZmljIGNvbnRyb2wgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBpdCYjMzk7cyBzaXR1YXRlZCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCBiZWhhdmlvcnMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBjbGFyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIGludGVncmF0aW9uIHdpdGggdGhlIG90aGVyIG5ldHdvcmtpbmcgY29tcG9uZW50cyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19VMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGU6IE5FVF9DTFNfVTMyIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYE5FVF9DTFNfVTMyYCBjbGFzc2lmaWNhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBrbm93aW5nICp3aGF0KiByZWxpZXMgb24gaXQsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSAqbmF0dXJlKiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMuIEFyZSB3ZSB0YWxraW5nIGNvcmUga2VybmVsIG1vZHVsZXMsIHVzZXItc3BhY2UgdXRpbGl0aWVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIG1hdHRlcnMgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGNhbGxzIG9yIGluZGlyZWN0IHVzYWdlIHRocm91Z2ggbW9yZSBjb21wbGV4IHN0cnVjdHVyZXM/IEtub3dpbmcgdGhpcyBpcyBnb2luZyB0byBncmVhdGx5IGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgYW5hbHlzaXMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNvbm5lY3Rpb25zIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHdlYWsgcG9pbnRzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgcmVxdWlyZXMgYSBncmFudWxhciB2aWV3IOKAkyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMsIG5vdCBqdXN0IHRoZSBjb2RlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgYSBkZXBlbmRlbmN5IGdyYXBoIHZpc3VhbGl6YXRpb24gdG9vbCByZWFkeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTE2Olx0Y29uZmlnIE5FVF9DTFNfVTMyXG4gNTE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuIDUxODpcdFx0c2VsZWN0IE5FVF9DTFNcbiA1MTk6XHRcdGhlbHBcbiA1MjA6XHRcdCAgU2F5IFkgaGVyZSB0byBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgdXNpbmcgYSB1bml2ZXJzYWxcbiA1MjE6XHRcdCAgMzJiaXQgcGllY2VzIGJhc2VkIGNvbXBhcmlzb24gc2NoZW1lLlxuIDUyMjpcdFxuIDUyMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTI0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfdTMyLlxuIDUyNTpcdFxuIDUyNjpcdGNvbmZpZyBDTFNfVTMyX1BFUkZcbiA1Mjc6XHRcdGJvb2wgXCYjMzQ7UGVyZm9ybWFuY2UgY291bnRlcnMgc3VwcG9ydFwmIzM0O1xuIDUyODpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX1UzMlxuIDUyOTpcdFx0aGVscFxuIDUzMDpcdFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgdTMyIGdhdGhlciBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgdXNlZnVsIGZvclxuIDUzMTpcdFx0ICBmaW5lIHR1bmluZyB1MzIgY2xhc3NpZmllcnMuXG4gNTMyOlx0XG4gNTMzOlx0Y29uZmlnIENMU19VMzJfTUFSS1xuIDUzNDpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbWFya3Mgc3VwcG9ydFwmIzM0O1xuIDUzNTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX1UzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTIyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKk5ldHdvcmsgQ29uZmlndXJhdGlvbiBDb250ZXh0KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbmV0d29yayBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHksIHRoZSBgTkVUX0NMU19VMzJgIHNldHRpbmcuIFRoYXQmIzM5O3MgdGhlIGtleSBpZGVudGlmaWVyIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHRoaW5nIGNoYW5nZXMsIGhvdyBpdCYjMzk7cyBoYW5kbGVkLiBUaGUgY29yZSBmdW5jdGlvbiB0byBleGFtaW5lIGlzIG9idmlvdXNseSBgdTMyX2NoYW5nZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBhY3Rpb24gbGlrZWx5IHJlc2lkZXMsIHJpZ2h0PyBJdCYjMzk7cyB0aGUgbWVjaGFuaXNtIGZvciBtb2RpZmljYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMsIG91dHB1dHMsIHNpZGUgZWZmZWN0cywgZXZlcnl0aGluZy4KCkJ1dCB3YWl0LCB0aGVyZSYjMzk7cyBhbm90aGVyIG9uZSBtZW50aW9uZWQ6IGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIFRoYXTigJlzIGFub3RoZXIgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkgY2FuJiMzOTt0IGRpc21pc3MgaXQuIFRoaXMgc2VlbXMgdG8gYmUgYXQgYSBsb3dlciBsZXZlbCAtLSBoYXJkd2FyZSBrZXkgbm9kZSByZXBsYWNlbWVudCwgbWF5YmU/IEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCBmaXRzIHdpdGggdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbi4gSXMgaXQgY2FsbGVkIGJ5IGl0PyBEb2VzIGl0IHByb3ZpZGUgc29tZSBhbHRlcm5hdGl2ZSBwYXRod2F5PyBBcmUgdGhlcmUgc3BlY2lmaWMgc2l0dWF0aW9ucyB3aGVyZSB0aGUgaGFyZHdhcmUgbm9kZSByZXBsYWNlbWVudCBpcyB0aGUgKnByZWZlcnJlZCogbWV0aG9kPyBUaGVzZSBhcmUgaW1wb3J0YW50IHF1ZXN0aW9ucy4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCBpcyBjcnVjaWFsIHRvIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gY29uc2lkZXIgYm90aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTMyX3JlcGxhY2VfaHdfa25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmM9NTMyPXN0YXRpYyB2b2lkIHUzMl9yZW1vdmVfaHdfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTQ1LVxubmV0L3NjaGVkL2Nsc191MzIuYzo1NDY6c3RhdGljIGludCB1MzJfcmVwbGFjZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0Ny1cdFx0XHRcdHUzMiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9ODcyPXN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy05MzctXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkzODpcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy05MzktXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNjMtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNjQ6XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNjUtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdTMyYCBDbGFzc2lmaWVyIEFQSSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdTMyYCBjbGFzc2lmaWVyIGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBleHBvc2UgdGhlIGVudHJ5IHBvaW50IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyBvbiBgdTMyX2NoYW5nZWAsIGJ1dCB0aGF0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnIGFjY29yZGluZyB0byB0aGUgcHJvamVjdCBndWlkZWxpbmVzLiBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIHllcCwgYHN0YXRpYyBpbnQgdTMyX2NoYW5nZSguLi4pYC4gSG1tLCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhcmUgaW1wb3J0YW50IGZvciB0cmFjaW5nIGFuZCBleHRlcm5hbCB1c2UuCgpTbywgYHUzMl9jaGFuZ2VgIGlzIHN0YXRpYywgKmhvd2V2ZXIqIGl0JiMzOTtzIGFzc2lnbmVkIGFzIHRoZSBgLmNoYW5nZWAgb3BlcmF0aW9uIGluIGBjbHNfdTMyX29wc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBub3QgaWRlYWwuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGVuZHMgdXAgY2FsbGluZyBgdTMyX2NoYW5nZWA/IEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IGluZGlyZWN0bHkgZXhwb3NlcyBpdCBhcyBhbiBleHRlcm5hbCBBUEkuCgpBaGEhIGB0Y19uZXdfdGZpbHRlcmAgaW4gYG5ldC9zY2hlZC9jbHNfYXBpLmNgIGxvb2tzIHByb21pc2luZy4gSXQgc2VlbXMgdG8gY2FsbCBgdHAtJmd0O29wcy0mZ3Q7Y2hhbmdlKC4uLilgLCB3aGljaCwgaW4gdGhpcyBjYXNlLCB3b3VsZCBiZSBgdTMyX2NoYW5nZWAuIFRoYXQmIzM5O3MgcHJvYmFibHkgdGhlIGtleS4gSSBzaG91bGQgaW52ZXN0aWdhdGUgYHRjX25ld190ZmlsdGVyYCBtb3JlIGNsb3NlbHkuIEkgYmVsaWV2ZSB0aGlzIGlzIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmM9MjIzMT1zdGF0aWMgYm9vbCBpc19pbmdyZXNzX29yX2Nsc2FjdChzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaywgc3RydWN0IFFkaXNjICpxKVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjIzNS1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MjIzNjpzdGF0aWMgaW50IHRjX25ld190ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjIzNy1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQxMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2ZpbHRlcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L3NjaGVkL2Nsc19hcGkuYzo0MTA2Olx0ey5tc2d0eXBlID0gUlRNX05FV1RGSUxURVIsIC5kb2l0ID0gdGNfbmV3X3RmaWx0ZXIsXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQxMDctXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjA5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVHJhZmZpYyBDb250cm9sIEZpbHRlciBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgdGNfbmV3X3RmaWx0ZXJgIGlzIGFsc28gZGVjbGFyZWQgYXMgc3RhdGljLiBIbW0sIGJ1dCB3YWl0LCBJIHJlbWVtYmVyIHRoYXQgYHRjX25ld190ZmlsdGVyYCBpcyByZWdpc3RlcmVkIGFzIGFuIHJ0bmwgbWVzc2FnZSBoYW5kbGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBhbmQgaXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgdGhlIGV4dGVybmFsIEFQSS4gTGV0IG1lIHNlZSwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljPwoKSWYgYHUzMl9jaGFuZ2VgIGlzIHN0YXRpYyBidXQgKm5vdCogaW5saW5lZCwgdGhhdCBjb3VsZCBiZSB1c2VmdWwsIHNpbmNlIGl0ICptaWdodCogc3RpbGwgaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbC4gQWgsIGJ1dCBgdGNfbmV3X3RmaWx0ZXJgIGlzIGEgc29saWQgZW50cnkgcG9pbnQsIGFuZCB0aGF0IHNlZW1zIHByZXR0eSBzYWZlLgoKUmlnaHQsIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoLCBiZWluZyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4pIEFoYSEgYHUzMl9jaGFuZ2VgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyICpjYW4mIzM5O3QqIGlubGluZSBpdCwgc28gaXQgd2lsbCBkZWZpbml0ZWx5IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhhdCYjMzk7cyBnb29kIHRvIGxpc3QhIFNvIGB1MzJfY2hhbmdlYCBpcyBwZXJmZWN0bHkgZmluZSBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgd2UmIzM5O3JlIG9ubHkgZ29pbmcgdG8gcmVxdWlyZSBtaW5pbWFsIGNvbmZpZyBvcHRpb25zLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBJIGJlbGlldmUgYE5FVF9DTFNfVTMyYCBpcyBzdWZmaWNpZW50LiBCZXR0ZXIgdG8gYmUgc3VyZTsgbGV0IG1lIGFsc28gY2hlY2sgYE5FVF9DTFNgIGFuZCBgTkVUX1NDSEVEYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTQ3OT1jb21tZW50IFwmIzM0O0NsYXNzaWZpY2F0aW9uXCYjMzQ7XG5uZXQvc2NoZWQvS2NvbmZpZy00ODAtXG5uZXQvc2NoZWQvS2NvbmZpZzo0ODE6Y29uZmlnIE5FVF9DTFNcbm5ldC9zY2hlZC9LY29uZmlnLTQ4Mi1cdGJvb2xcbm5ldC9zY2hlZC9LY29uZmlnLTQ4My1cbm5ldC9zY2hlZC9LY29uZmlnOjQ4NDpjb25maWcgTkVUX0NMU19CQVNJQ1xubmV0L3NjaGVkL0tjb25maWctNDg1LVx0dHJpc3RhdGUgXCYjMzQ7RWxlbWVudGFyeSBjbGFzc2lmaWNhdGlvbiAoQkFTSUMpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNDkzLVxubmV0L3NjaGVkL0tjb25maWc6NDk0OmNvbmZpZyBORVRfQ0xTX1JPVVRFNFxubmV0L3NjaGVkL0tjb25maWctNDk1LVx0dHJpc3RhdGUgXCYjMzQ7Um91dGluZyBkZWNpc2lvbiAoUk9VVEUpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNTA1LVxubmV0L3NjaGVkL0tjb25maWc6NTA2OmNvbmZpZyBORVRfQ0xTX0ZXXG5uZXQvc2NoZWQvS2NvbmZpZy01MDctXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbWFyayAoRlcpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNTE1LVxubmV0L3NjaGVkL0tjb25maWc6NTE2OmNvbmZpZyBORVRfQ0xTX1UzMlxubmV0L3NjaGVkL0tjb25maWctNTE3LVx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz01MzM9Y29uZmlnIENMU19VMzJfTUFSS1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTUzOC1cbm5ldC9zY2hlZC9LY29uZmlnOjUzOTpjb25maWcgTkVUX0NMU19GTE9XXG5uZXQvc2NoZWQvS2NvbmZpZy01NDAtXHR0cmlzdGF0ZSBcJiMzNDtGbG93IGNsYXNzaWZpZXJcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01NDktXG5uZXQvc2NoZWQvS2NvbmZpZzo1NTA6Y29uZmlnIE5FVF9DTFNfQ0dST1VQXG5uZXQvc2NoZWQvS2NvbmZpZy01NTEtXHR0cmlzdGF0ZSBcJiMzNDtDb250cm9sIEdyb3VwIENsYXNzaWZpZXJcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01NjEtXG5uZXQvc2NoZWQvS2NvbmZpZzo1NjI6Y29uZmlnIE5FVF9DTFNfQlBGXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXHR0cmlzdGF0ZSBcJiMzNDtCUEYtYmFzZWQgY2xhc3NpZmllclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU3MS1cbm5ldC9zY2hlZC9LY29uZmlnOjU3Mjpjb25maWcgTkVUX0NMU19GTE9XRVJcbm5ldC9zY2hlZC9LY29uZmlnLTU3My1cdHRyaXN0YXRlIFwmIzM0O0Zsb3dlciBjbGFzc2lmaWVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNTgxLVxubmV0L3NjaGVkL0tjb25maWc6NTgyOmNvbmZpZyBORVRfQ0xTX01BVENIQUxMXG5uZXQvc2NoZWQvS2NvbmZpZy01ODMtXHR0cmlzdGF0ZSBcJiMzNDtNYXRjaC1hbGwgY2xhc3NpZmllclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTY5MD1jb25maWcgTkVUX0VNQVRDSF9JUFRcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDI6Y29uZmlnIE5FVF9DTFNfQUNUXG5uZXQvc2NoZWQvS2NvbmZpZy03MDMtXHRib29sIFwmIzM0O0FjdGlvbnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0MQoJCQkJCQkJb3V0cHV0OiAxMjQKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVMzIgQ2xhc3NpZmllciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBjaGFuZ2UgaGVyZSBjZW50ZXJzIGFyb3VuZCBgTkVUX0NMU19VMzJgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlnIEkgbmVlZCB0byBsb29rIGF0LiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gYWRkIGBORVRfQ0xTX1UzMmAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBlbnN1cmluZyBpdCYjMzk7cyBwcm9wZXJseSBjb25zaWRlcmVkIGR1cmluZyB0aGlzIHJldmlldy4KCk5vdywgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQgaXMgYHUzMl9jaGFuZ2VgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgcXVpY2tseS4uLiBpcyBgdTMyX2NoYW5nZWAgKnN0YXRpYyogYnV0ICpub3QqIGlubGluZWQ/IFJpZ2h0LCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgY2xzX3UzMl9vcHMuY2hhbmdlYCwgd2hpY2ggbWVhbnMgaXTigJlzIGJlaW5nIHVzZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhlcmVmb3JlLCB0aGUgY29tcGlsZXIgKmNhbiYjMzk7dCogaW5saW5lIGl0LiBHb29kLCB0aGF0IGNvbmZpcm1zIGl0LiBJJiMzOTtsbCBuZWVkIHRvIGFkZCBgdTMyX2NoYW5nZWAgdG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGVuc3VyaW5nIGl0IHJlbWFpbnMgdmlzaWJsZSBmb3IgZGVlcGVyIGFuYWx5c2lzLgoKVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllci4gU3BlY2lmaWNhbGx5LCB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHV0aWxpemUgYHVzZXJmbGFnc2AgaW5zdGVhZCBvZiBgZmxhZ3NgIHdoZW4gY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljLCBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgYHRjIGZpbHRlciBhZGQvY2hhbmdlYCBvcGVyYXRpb25zLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGluIHRoZSBjcml0aWNhbCBwYXRoLgoKQWxyaWdodCwgd2l0aCBhbGwgdGhhdCBjb25maXJtZWQsIEkmIzM5O20gaGFwcHkgd2l0aCBteSBhc3Nlc3NtZW50LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0NMU19VMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1MzJfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1MzJfY2hhbmdlYCBpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllciAodGMgZmlsdGVyKSB0byB1c2UgYHVzZXJmbGFnc2AgaW5zdGVhZCBvZiBgZmxhZ3NgIHdoZW4gY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBmaWx0ZXIgYWRkL2NoYW5nZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdTMyX2NoYW5nZWAgaW4gdGhlIGBjbHNfdTMyYCB0cmFmZmljIGNsYXNzaWZpZXIgKHRjIGZpbHRlcikgdG8gdXNlIGB1c2VyZmxhZ3NgIGluc3RlYWQgb2YgYGZsYWdzYCB3aGVuIGNhbGxpbmcgYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgZmlsdGVyIGFkZC9jaGFuZ2UpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB1MzJfY2hhbmdlYCB3aGVyZSB0aGUgYGZsYWdzYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHBhcnNlZCBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuIFRoaXMgY2F1c2VkIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgdG8gcmVjZWl2ZSB0aGUgd3JvbmcgZmxhZ3MsIHBvdGVudGlhbGx5IGFmZmVjdGluZyBoYXJkd2FyZSBvZmZsb2FkIGJlaGF2aW9yIChlLmcuLCBpbmNvcnJlY3RseSBldmFsdWF0aW5nIGB0Y19za2lwX3N3KGZsYWdzKWApLiBUaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgYnV0IHRoaXMgc3BlY2lmaWMgYnVnIGlzIGp1c3QgaW5jb3JyZWN0IGZsYWcgdXNhZ2UuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJjYmQ2NjhhNDY0MWE5NTJhOTg1NzUyNGY3NmJiYmE5ZTgxZDJlNjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEzOjEzOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKaW5kZXggOGYzMGNjODIxODFkOS4uZGM2ZTQ1NWU2NGVjNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCkBAIC05MzUsNyAmIzQzOzkzNSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAKIAkJdTMyX2JpbmRfZmlsdGVyKHRwLCBuZXcsIGJhc2UsIHRiKTsKIAotCQllcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCBmbGFncywgZXh0YWNrKTsKJiM0MzsJCWVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKTsKIAkJaWYgKGVycikgewogCQkJdTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpOwogCkBAIC0xMTYxLDcgJiM0MzsxMTYxLDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJc3RydWN0IHRjX3Vfa25vZGUgX19yY3UgKippbnM7CiAJCXN0cnVjdCB0Y191X2tub2RlICpwaW5zOwogCi0JCWVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCBmbGFncywgZXh0YWNrKTsKJiM0MzsJCWVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycnVuYmluZDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGVjaG5pY2FsIHNuaXBwZXQsIGV4cHJlc3NlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgdTMyIENsYXNzaWZpZXIgQ29kZSoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgaG9taW5nIGluIG9uIGBuZXQvc2NoZWQvY2xzX3UzMi5jYC4gVGhhdCB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBVMzIgY2xhc3NpZmllciwgd2hpY2ggSSBrbm93IGlzIGEgY29yZSBjb21wb25lbnQgb2YgdHJhZmZpYyBjb250cm9sIGZvciBJUCBwYWNrZXRzLiBHb29kLCBmYW1pbGlhciB0ZXJyaXRvcnkuCgpUaGUgbWVhdCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCB0aGUgZnVuY3Rpb24gYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gIFNwZWNpZmljYWxseSwgdGhlIHNpZ25hdHVyZSBpcyBzaGlmdGluZyBmcm9tIHVzaW5nIGBmbGFnc2AgdG8gdXNpbmcgYHVzZXJmbGFnc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhvc2UgZmxhZyB2YXJpYWJsZXMgcmVwcmVzZW50IGFuZCB3aHkgdGhlIGNoYW5nZSB3YXMgbWFkZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdTMyX2NoYW5nZWAgZG9lcy4gTXkgc3VzcGljaW9uIGlzIHRoYXQgYHVzZXJmbGFnc2AgbWlnaHQgcmVsYXRlIHRvIHVzZXItc3BhY2UgaW5wdXQvY29udHJvbCB3aGlsZSBgZmxhZ3NgIHJlbGF0ZSB0byBpbnRlcm5hbCBrZXJuZWwgd29ya2luZ3MuIFByb2JhYmx5IHNvbWUga2luZCBvZiBwYXJhbWV0ZXIgaGFuZGxpbmcgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBhcmUgdXNlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBjbGFyaWZ5IHdoYXQga2luZCBvZiBpbXBhY3QgdGhpcyBjaGFuZ2Ugd2lsbCBtYWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1MzJfY2hhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jPTgyMT1zdGF0aWMgc3RydWN0IHRjX3Vfa25vZGUgKnUzMl9pbml0X2tub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy04NzEtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjg3MjpzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L3NjaGVkL2Nsc191MzIuYy04NzMtXHRcdCAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDU4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2My1cdC5nZXRcdFx0PVx0dTMyX2dldCxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ2NDpcdC5jaGFuZ2VcdFx0PVx0dTMyX2NoYW5nZSxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2NS1cdC5kZWxldGVcdFx0PVx0dTMyX2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGNsc191MzJgJiMzOTtzIGB1MzJfY2hhbmdlYCBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9zY2hlZC9jbHNfdTMyLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVTMyIGNsYXNzaWZpZXIgaXMgdXBkYXRlZCwgY3JlYXRlZCwgb3IgZGVsZXRlZCBiYXNlZCBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGlzIGNvcmUgcm91dGluZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGZsb3cgLSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLCB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIHNlZSBob3cgaXQgYWxsb2NhdGVzIGFuZCBkZWFsbG9jYXRlcyBtZW1vcnksIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdG8gbG9vayBvdXQgZm9yLiBTaW5jZSB0aGlzIGlzIGEgY3JpdGljYWwgcGFydCBvZiB0cmFmZmljIGNsYXNzaWZpY2F0aW9uIGFuZCBxdWV1aW5nIGRpc2NpcGxpbmUgbWFuYWdlbWVudCwgdGhlIGRldmlsIHdpbGwgYmUgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZC4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG9zc2libGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGVzcGVjaWFsbHkgaW4gaGlnaC1sb2FkIHNjZW5hcmlvcy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGZpbHRlciBrZXlzIGFuZCBtYXNrcyBhcmUgcGFyc2VkIGFuZCB2YWxpZGF0ZWQsIGFuZCBob3cgdGhlc2UgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgZnJvbSB0aGUgdXNlci1zcGFjZSByZXByZXNlbnRhdGlvbiB0byB0aGUga2VybmVsLXNwYWNlLiBUaGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGluZ3Jlc3MvZWdyZXNzIGRpcmVjdGlvbnMgYW5kIHRoZSBuZXR3b3JrIHN0YWNrIGluIGdlbmVyYWwgd2lsbCBiZSBjcml0aWNhbCBhcyB3ZWxsLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBrZXJuZWwmIzM5O3MgdHJhZmZpYyBjb250cm9sIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0fVxuIDg3MTpcdFxuIDg3MjpcdHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gODczOlx0XHRcdCAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXG4gODc0Olx0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0Y2EsIHZvaWQgKiphcmcsIHUzMiBmbGFncyxcbiA4NzU6XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDg3NjpcdHtcbiA4Nzc6XHRcdHN0cnVjdCB0Y191X2NvbW1vbiAqdHBfYyA9IHRwLVx1MDAzZWRhdGE7XG4gODc4Olx0XHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHQ7XG4gODc5Olx0XHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbjtcbiA4ODA6XHRcdHN0cnVjdCB0Y191MzJfc2VsICpzO1xuIDg4MTpcdFx0c3RydWN0IG5sYXR0ciAqb3B0ID0gdGNhW1RDQV9PUFRJT05TXTtcbiA4ODI6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9VMzJfTUFYICYjNDM7IDFdO1xuIDg4MzpcdFx0dTMyIGh0aWQsIHVzZXJmbGFncyA9IDA7XG4gODg0Olx0XHRzaXplX3Qgc2VsX3NpemU7XG4gODg1Olx0XHRpbnQgZXJyO1xuIDg4NjpcdFxuIDg4NzpcdFx0aWYgKCFvcHQpIHtcbiA4ODg6XHRcdFx0aWYgKGhhbmRsZSkge1xuIDg4OTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ZpbHRlciBoYW5kbGUgcmVxdWlyZXMgb3B0aW9uc1wmIzM0Oyk7XG4gODkwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODkxOlx0XHRcdH0gZWxzZSB7XG4gODkyOlx0XHRcdFx0cmV0dXJuIDA7XG4gODkzOlx0XHRcdH1cbiA4OTQ6XHRcdH1cbiA4OTU6XHRcbiA4OTY6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1UzMl9NQVgsIG9wdCwgdTMyX3BvbGljeSxcbiA4OTc6XHRcdFx0XHRcdFx0ICBleHRhY2spO1xuIDg5ODpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA4OTk6XHRcdFx0cmV0dXJuIGVycjtcbiA5MDA6XHRcbiA5MDE6XHRcdGlmICh0YltUQ0FfVTMyX0ZMQUdTXSkge1xuIDkwMjpcdFx0XHR1c2VyZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltUQ0FfVTMyX0ZMQUdTXSk7XG4gOTAzOlx0XHRcdGlmICghdGNfZmxhZ3NfdmFsaWQodXNlcmZsYWdzKSkge1xuIDkwNDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludmFsaWQgZmlsdGVyIGZsYWdzXCYjMzQ7KTtcbiA5MDU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5MDY6XHRcdFx0fVxuIDkwNzpcdFx0fVxuIDkwODpcdFxuIDkwOTpcdFx0biA9ICphcmc7XG4gOTEwOlx0XHRpZiAobikge1xuIDkxMTpcdFx0XHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbmV3O1xuIDkxMjpcdFxuIDkxMzpcdFx0XHRpZiAoVENfVTMyX0tFWShuLVx1MDAzZWhhbmRsZSkgPT0gMCkge1xuIDkxNDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0tleSBub2RlIGlkIGNhbm5vdCBiZSB6ZXJvXCYjMzQ7KTtcbiA5MTU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5MTY6XHRcdFx0fVxuIDkxNzpcdFxuIDkxODpcdFx0XHRpZiAoKG4tXHUwMDNlZmxhZ3MgXiB1c2VyZmxhZ3MpIFx1MDAyNlxuIDkxOTpcdFx0XHQgICAgfihUQ0FfQ0xTX0ZMQUdTX0lOX0hXIHwgVENBX0NMU19GTEFHU19OT1RfSU5fSFcpKSB7XG4gOTIwOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7S2V5IG5vZGUgZmxhZ3MgZG8gbm90IG1hdGNoIHBhc3NlZCBmbGFnc1wmIzM0Oyk7XG4gOTIxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTIyOlx0XHRcdH1cbiA5MjM6XHRcbiA5MjQ6XHRcdFx0bmV3ID0gdTMyX2luaXRfa25vZGUobmV0LCB0cCwgbik7XG4gOTI1Olx0XHRcdGlmICghbmV3KVxuIDkyNjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDkyNzpcdFxuIDkyODpcdFx0XHRlcnIgPSB1MzJfc2V0X3Bhcm1zKG5ldCwgdHAsIG5ldywgdGIsIHRjYVtUQ0FfUkFURV0sXG4gOTI5Olx0XHRcdFx0XHQgICAgZmxhZ3MsIG5ldy1cdTAwM2VmbGFncywgZXh0YWNrKTtcbiA5MzA6XHRcbiA5MzE6XHRcdFx0aWYgKGVycikge1xuIDkzMjpcdFx0XHRcdF9fdTMyX2Rlc3Ryb3lfa2V5KG5ldyk7XG4gOTMzOlx0XHRcdFx0cmV0dXJuIGVycjtcbiA5MzQ6XHRcdFx0fVxuIDkzNTpcdFxuIDkzNjpcdFx0XHR1MzJfYmluZF9maWx0ZXIodHAsIG5ldywgYmFzZSwgdGIpO1xuIDkzNzpcdFxuIDkzODpcdFx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gOTM5Olx0XHRcdGlmIChlcnIpIHtcbiA5NDA6XHRcdFx0XHR1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbmV3LCB0Yik7XG4gOTQxOlx0XG4gOTQyOlx0XHRcdFx0aWYgKHRiW1RDQV9VMzJfTElOS10pIHtcbiA5NDM6XHRcdFx0XHRcdHN0cnVjdCB0Y191X2hub2RlICpodF9vbGQ7XG4gOTQ0Olx0XG4gOTQ1Olx0XHRcdFx0XHRodF9vbGQgPSBydG5sX2RlcmVmZXJlbmNlKG4tXHUwMDNlaHRfZG93bik7XG4gOTQ2Olx0XHRcdFx0XHRpZiAoaHRfb2xkKVxuIDk0NzpcdFx0XHRcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2aHRfb2xkLVx1MDAzZXJlZmNudCk7XG4gOTQ4Olx0XHRcdFx0fVxuIDk0OTpcdFx0XHRcdF9fdTMyX2Rlc3Ryb3lfa2V5KG5ldyk7XG4gOTUwOlx0XHRcdFx0cmV0dXJuIGVycjtcbiA5NTE6XHRcdFx0fVxuIDk1MjpcdFxuIDk1MzpcdFx0XHRpZiAoIXRjX2luX2h3KG5ldy1cdTAwM2VmbGFncykpXG4gOTU0Olx0XHRcdFx0bmV3LVx1MDAzZWZsYWdzIHw9IFRDQV9DTFNfRkxBR1NfTk9UX0lOX0hXO1xuIDk1NTpcdFxuIDk1NjpcdFx0XHR0Y2ZfcHJvdG9fdXBkYXRlX3VzZXN3KHRwLCBuZXctXHUwMDNlZmxhZ3MpO1xuIDk1NzpcdFxuIDk1ODpcdFx0XHR1MzJfcmVwbGFjZV9rbm9kZSh0cCwgdHBfYywgbmV3KTtcbiA5NTk6XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNm4tXHUwMDNlcmVzKTtcbiA5NjA6XHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZuLVx1MDAzZWV4dHMpO1xuIDk2MTpcdFx0XHR0Y2ZfcXVldWVfd29yayhcdTAwMjZuLVx1MDAzZXJ3b3JrLCB1MzJfZGVsZXRlX2tleV93b3JrKTtcbiA5NjI6XHRcdFx0cmV0dXJuIDA7XG4gOTYzOlx0XHR9XG4gOTY0Olx0XG4gOTY1Olx0XHRpZiAodGJbVENBX1UzMl9ESVZJU09SXSkge1xuIDk2NjpcdFx0XHR1bnNpZ25lZCBpbnQgZGl2aXNvciA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfRElWSVNPUl0pO1xuIDk2NzpcdFxuIDk2ODpcdFx0XHRpZiAoIWlzX3Bvd2VyX29mXzIoZGl2aXNvcikpIHtcbiA5Njk6XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtEaXZpc29yIGlzIG5vdCBhIHBvd2VyIG9mIDJcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRyYWZmaWMgQ29udHJvbCBCdWcgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyBpbiBob3cgd2UgaGFuZGxlIGZsYWdzIHdpdGhpbiB0aGUgdTMyIGZpbHRlciBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgYHUzMl9yZXBsYWNlX2h3X2tub2RlYCBmdW5jdGlvbiBpcyBiZWluZyBmZWQgdGhlIHdyb25nIGBmbGFnc2AgdmFsdWUuIEl0IHNlZW1zIHRoZSBjb2RlIHdhcyBwYXNzaW5nIHRoZSBvcmlnaW5hbCBgZmxhZ3NgIHZhcmlhYmxlLCB1c2VkIHdpdGhpbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIHRoZSBpbnRlbmRlZCBgdXNlcmZsYWdzYCwgd2hpY2ggaXMgcGFyc2VkIGRpcmVjdGx5IGZyb20gdGhlIGBUQ0FfVTMyX0ZMQUdTYCBuZXRsaW5rIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIGNvbmZpZ3VyYXRpb24gZGF0YS4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBubywgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYGZsYWdzYCBhcmd1bWVudCB0byBgdTMyX2NoYW5nZWAgb3JpZ2luYXRlcyBmcm9tIHRoZSBjYWxsZXIg4oCTIHR5cGljYWxseSBmdW5jdGlvbnMgbGlrZSBgdGNfbmV3X3RmaWx0ZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlbiB0aGUgcGF0Y2ggc2ltcGx5IGNvcnJlY3RzIHRoZSBhcmd1bWVudCBwYXNzZWQgZnJvbSB0aGF0LCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGUgYnVnIHN0ZW1zIGZyb20gYSBzaW1wbGUsIGJ1dCBjcml0aWNhbCwgdmFyaWFibGUgbWl4LXVwLiBXZSBzaG91bGQgZW5zdXJlIHRoZSBjb3JyZWN0IGB1c2VyZmxhZ3NgIGFyZSBwYXNzZWQgdG8gYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gTm93LCBJJiMzOTtsbCByZXZpZXcgYHUzMl9yZXBsYWNlX2h3X2tub2RlYCBpdHNlbGYgdG8gY29uZmlybSB0aGUgaW1wbGljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3UzMl9yZXBsYWNlX2h3X2tub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jPTUzMj1zdGF0aWMgdm9pZCB1MzJfcmVtb3ZlX2h3X2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0NS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTQ2OnN0YXRpYyBpbnQgdTMyX3JlcGxhY2VfaHdfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxubmV0L3NjaGVkL2Nsc191MzIuYy01NDctXHRcdFx0XHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTg3Mj1zdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM3LVxubmV0L3NjaGVkL2Nsc191MzIuYzo5Mzg6XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM5LVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xMTYzLVxubmV0L3NjaGVkL2Nsc191MzIuYzoxMTY0Olx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy0xMTY1LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjE3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgaGFyZHdhcmU6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gYHUzMl9yZXBsYWNlX2h3X2tub2RlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZnVuY3Rpb24uIEp1c3QgdGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSwgcG90ZW50aWFsbHkgbG93LWxldmVsIG1lbW9yeSBvcGVyYXRpb25zLCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyAzMi1iaXQgdmFsdWVzIGFuZCBzb21lIHNvcnQgb2YgJiMzNDtrLW5vZGUmIzM0OyBjb25jZXB0LiBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgd2hhdCB0aGlzICYjMzQ7ay1ub2RlJiMzNDsgcmVwcmVzZW50cyDigJMgYSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmU/IEEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXI/IEdvdHRhIHNlZSB0aGUgY29udGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIHBlcmZvcm0gc29tZSBhdG9taWMgcmVwbGFjZW1lbnQgb3IgbW9kaWZpY2F0aW9uIG9wZXJhdGlvbiBvbiBoYXJkd2FyZSBtZW1vcnksIGdpdmVuIHRoZSAmIzM0O3JlcGxhY2UmIzM0OyBhbmQgcG90ZW50aWFsICYjMzQ7aHcmIzM0OyBpbiB0aGUgbmFtZS4gSXMgaXQgdXNpbmcgaGFyZHdhcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM/IElzIGl0IGRlYWxpbmcgd2l0aCBjYWNoZSBjb2hlcmVuY3kgaXNzdWVzPyBUaGVzZSBhcmUgYWxsIHRoZSBxdWVzdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBzcHJpbmcgdG8gbWluZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIG1lbW9yeSBiYXJyaWVycywgYXRvbWljIGluc3RydWN0aW9ucywgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIGNvZGUuIExldCYjMzk7cyBzdGFydCByZWFkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0MDpcdFx0Y2xzX3UzMi5rbm9kZS5oYW5kbGUgPSBuLVx1MDAzZWhhbmRsZTtcbiA1NDE6XHRcbiA1NDI6XHRcdHRjX3NldHVwX2NiX2Rlc3Ryb3koYmxvY2ssIHRwLCBUQ19TRVRVUF9DTFNVMzIsIFx1MDAyNmNsc191MzIsIGZhbHNlLFxuIDU0MzpcdFx0XHRcdCAgICBcdTAwMjZuLVx1MDAzZWZsYWdzLCBcdTAwMjZuLVx1MDAzZWluX2h3X2NvdW50LCB0cnVlKTtcbiA1NDQ6XHR9XG4gNTQ1Olx0XG4gNTQ2Olx0c3RhdGljIGludCB1MzJfcmVwbGFjZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXG4gNTQ3Olx0XHRcdFx0XHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA1NDg6XHR7XG4gNTQ5Olx0XHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHQgPSBydG5sX2RlcmVmZXJlbmNlKG4tXHUwMDNlaHRfZG93bik7XG4gNTUwOlx0XHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jayA9IHRwLVx1MDAzZWNoYWluLVx1MDAzZWJsb2NrO1xuIDU1MTpcdFx0c3RydWN0IHRjX2Nsc191MzJfb2ZmbG9hZCBjbHNfdTMyID0ge307XG4gNTUyOlx0XHRib29sIHNraXBfc3cgPSB0Y19za2lwX3N3KGZsYWdzKTtcbiA1NTM6XHRcdGludCBlcnI7XG4gNTU0Olx0XG4gNTU1Olx0XHR0Y19jbHNfY29tbW9uX29mZmxvYWRfaW5pdChcdTAwMjZjbHNfdTMyLmNvbW1vbiwgdHAsIGZsYWdzLCBleHRhY2spO1xuIDU1NjpcdFx0Y2xzX3UzMi5jb21tYW5kID0gVENfQ0xTVTMyX1JFUExBQ0VfS05PREU7XG4gNTU3Olx0XHRjbHNfdTMyLmtub2RlLmhhbmRsZSA9IG4tXHUwMDNlaGFuZGxlO1xuIDU1ODpcdFx0Y2xzX3UzMi5rbm9kZS5mc2hpZnQgPSBuLVx1MDAzZWZzaGlmdDtcbiA1NTk6XHQjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSS1xuIDU2MDpcdFx0Y2xzX3UzMi5rbm9kZS52YWwgPSBuLVx1MDAzZXZhbDtcbiA1NjE6XHRcdGNsc191MzIua25vZGUubWFzayA9IG4tXHUwMDNlbWFzaztcbiA1NjI6XHQjZWxzZVxuIDU2MzpcdFx0Y2xzX3UzMi5rbm9kZS52YWwgPSAwO1xuIDU2NDpcdFx0Y2xzX3UzMi5rbm9kZS5tYXNrID0gMDtcbiA1NjU6XHQjZW5kaWZcbiA1NjY6XHRcdGNsc191MzIua25vZGUuc2VsID0gXHUwMDI2bi1cdTAwM2VzZWw7XG4gNTY3Olx0XHRjbHNfdTMyLmtub2RlLnJlcyA9IFx1MDAyNm4tXHUwMDNlcmVzO1xuIDU2ODpcdFx0Y2xzX3UzMi5rbm9kZS5leHRzID0gXHUwMDI2bi1cdTAwM2VleHRzO1xuIDU2OTpcdFx0aWYgKG4tXHUwMDNlaHRfZG93bilcbiA1NzA6XHRcdFx0Y2xzX3UzMi5rbm9kZS5saW5rX2hhbmRsZSA9IGh0LVx1MDAzZWhhbmRsZTtcbiA1NzE6XHRcbiA1NzI6XHRcdGVyciA9IHRjX3NldHVwX2NiX2FkZChibG9jaywgdHAsIFRDX1NFVFVQX0NMU1UzMiwgXHUwMDI2Y2xzX3UzMiwgc2tpcF9zdyxcbiA1NzM6XHRcdFx0XHQgICAgICBcdTAwMjZuLVx1MDAzZWZsYWdzLCBcdTAwMjZuLVx1MDAzZWluX2h3X2NvdW50LCB0cnVlKTtcbiA1NzQ6XHRcdGlmIChlcnIpIHtcbiA1NzU6XHRcdFx0dTMyX3JlbW92ZV9od19rbm9kZSh0cCwgbiwgTlVMTCk7XG4gNTc2Olx0XHRcdHJldHVybiBlcnI7XG4gNTc3Olx0XHR9XG4gNTc4Olx0XG4gNTc5Olx0XHRpZiAoc2tpcF9zdyBcdTAwMjZcdTAwMjYgIShuLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ0FfQ0xTX0ZMQUdTX0lOX0hXKSlcbiA1ODA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTgxOlx0XG4gNTgyOlx0XHRyZXR1cm4gMDtcbiA1ODM6XHR9XG4gNTg0Olx0XG4gNTg1Olx0c3RhdGljIHZvaWQgdTMyX2NsZWFyX2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaHQsXG4gNTg2Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA1ODc6XHR7XG4gNTg4Olx0XHRzdHJ1Y3QgdGNfdV9jb21tb24gKnRwX2MgPSB0cC1cdTAwM2VkYXRhO1xuIDU4OTpcdFx0c3RydWN0IHRjX3Vfa25vZGUgKm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgUG90ZW50aWFsIEhhcmR3YXJlIE9mZmxvYWQgSXNzdWUgaW4gVHJhZmZpYyBDb250cm9sKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIGNsYXNzaWMgYXJndW1lbnQgbWl4LXVwLCBhbmQgaXQmIzM5O3MgcG90ZW50aWFsbHkgY2F1c2luZyBzb21lIHdvbmt5IGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksIHRoZSBgdTMyX2NoYW5nZWAgZnVuY3Rpb24gaXMgZ2V0dGluZyB0aGUgd3Jvbmcgc2V0IG9mIGZsYWdzLiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBgdXNlcmZsYWdzYCBkZXJpdmVkIGZyb20gdGhlIE5ldGxpbmsgYXR0cmlidXRlcywgdGhlIGNvZGUgaXMgcGFzc2luZyB0aGUgcmF3IGBmbGFnc2AgYXJndW1lbnQgZGlyZWN0bHksIHdoaWNoIGlzIGEgYmlnIG5vLW5vLgoKVGhpcyBtaXN0YWtlIGlzIGNhc2NhZGluZywgaW1wYWN0aW5nIGJvdGggYHRjX3NraXBfc3coZmxhZ3MpYCBhbmQgdGhlIGluaXRpYWxpemF0aW9uIHdpdGhpbiBgdGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoJmFtcDtjbHNfdTMyLmNvbW1vbiwgdHAsIGZsYWdzLCBleHRhY2spYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJdCYjMzk7cyBhIGxvZ2ljIGJ1Zywgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gVGhlIGRvd25zdHJlYW0gaW1wYWN0cyBpbmNsdWRlIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNvcnJlY3QgaGFyZHdhcmUgb2ZmbG9hZCBkZWNpc2lvbnMgb3IgZXZlbiBhY2NpZGVudGFsbHkgKmZhaWxpbmcqIHRvIHNraXAgc29mdHdhcmUgcHJvY2Vzc2luZyB3aGVuIHdlICp3YW50KiB0by4KClRoZSBgZmxhZ3NgIGFyZ3VtZW50IGluIHF1ZXN0aW9uIG9yaWdpbmF0ZXMgZnJvbSB0aGUgYHRjX25ld190ZmlsdGVyYCBmdW5jdGlvbiwgd2hpY2ggaXMgZGVmaW5lZCBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AuIE5vdywgbGV0JiMzOTtzIGdvIHBva2UgYXJvdW5kIGluIGB0Y19uZXdfdGZpbHRlcmAgdG8gZmlndXJlIG91dCB3aGF0IGBmbGFnc2AgYWN0dWFsbHkgcmVwcmVzZW50cyBhdCB0aGF0IHBvaW50LiBJJiMzOTttIGhvcGluZyBJIGNhbiBlYXNpbHkgc2VlIGhvdyB0aGlzIG1pc21hdGNoIGlzIGhhcHBlbmluZy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN0YXRlIGJlZm9yZSB0aGUgZmxhZ3MgYXJlIGFjdHVhbGx5IGFwcGxpZWQuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gdGhhdCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY29ycmVjdCBhbmQgaGVscCBtZSB0cmFjZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdG8gc2VlIGhvdyB0aGlzIGVycm9yIGNhbWUgdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTMyX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDA0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVjb2RpbmcgdGhlIGB0cC0mZ3Q7b3BzLSZndDtjaGFuZ2VgIENhbGwqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgY3JpdGljYWwgbGluZTogdGhlIGB0cC0mZ3Q7b3BzLSZndDtjaGFuZ2VgIGNhbGwuIFRoYXQmIzM5O3MgdGhlIGdhdGV3YXksIGlzbiYjMzk7dCBpdD8gVGhhdCYjMzk7cyBob3cgdGhpcyBlbnRpcmUgbWVjaGFuaXNtIGlzIHRyaWdnZXJlZC4gSSYjMzk7bSBhc3N1bWluZywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoaXMgb2YgY291cnNlLCB0aGF0ICYjMzk7dHAmIzM5OyBsaWtlbHkgcmVwcmVzZW50cyBhIGhhbmRsZSBvciBwb2ludGVyIHRvIGEgKnNvbWV0aGluZyog4oCTIGEgY29udHJvbCBibG9jaywgYSBkYXRhIHN0cnVjdHVyZSwgYSBkZXZpY2UgY29udGV4dCwgc29tZXRoaW5nIGluIHRoYXQgdmVpbi4gVGhlIGBvcHNgIG1lbWJlciwgYWgsIHRoYXQmIzM5O3MgdGhlIGludGVyZXN0aW5nIHBhcnQuIEl0JiMzOTtzIGEgdnRhYmxlLCBhbG1vc3QgY2VydGFpbmx5LiBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIG9iamVjdC1vcmllbnRlZCBvciBmdW5jdGlvbi1wb2ludGVyLWJhc2VkIGltcGxlbWVudGF0aW9uLiAmIzM5O0NoYW5nZSYjMzk7IHRoZW4gaXMgYSBtZXRob2Qgb3IgZnVuY3Rpb24gd2l0aGluIHRoYXQgdnRhYmxlLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHRoaXMgJiMzOTtjaGFuZ2UmIzM5OyBtZXRob2QgbGlrZWx5IHNpZ25pZmllcyBtb2RpZmljYXRpb24gb3IgYWRhcHRhdGlvbiBvZiB0aGUgcmVsZXZhbnQgb2JqZWN0IG9yIHRoZSBzeXN0ZW0gdG8gd2hpY2ggaXQgaXMgdGllZC4gVGhlIHNwZWNpZmljIGFjdGlvbiB3aWxsIGJlIGRlcGVuZGVudCBvbiBob3cgdGhlIGB0cGAgb2JqZWN0IGlzIGluaXRpYWxpemVkIGFuZCB3aGF0IGBvcHNgIGlzIHNldCB0by4gVGhpcyBjYWxsIGNvdWxkIGJlIGEgc2lnbmFsIHRvIHVwZGF0ZSwgcmVjb25maWd1cmUsIG9yIG90aGVyd2lzZSBtb2RpZnkgYSBjb3JlIGNvbXBvbmVudC4gVGhlIGRldmlsJiMzOTtzIGluIHRoZSBkZXRhaWwsIGJ1dCB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgcGllY2UgbWFrZXMgbG9naWNhbCBzZW5zZSBpbiBhIGRlc2lnbiBzdWNoIGFzIHRoaXMuIExldCYjMzk7cyBzZWUgaG93IGB0cGAgYW5kIGBvcHNgIGFyZSBkZWZpbmVkLCB0aGVuIHdl4oCZbGwgdW5wYWNrIHdoYXQg4oCYY2hhbmdl4oCZIGFjdHVhbGx5IGRvZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LVx1MDAzZWNoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYz0yMjM2PXN0YXRpYyBpbnQgdGNfbmV3X3RmaWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjQyOS1cdFx0ZmxhZ3MgfD0gVENBX0FDVF9GTEFHU19BVF9JTkdSRVNTX09SX0NMU0FDVDtcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MjQzMDpcdGVyciA9IHRwLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2UobmV0LCBza2IsIHRwLCBjbCwgdC1cdTAwM2V0Y21faGFuZGxlLCB0Y2EsIFx1MDAyNmZoLFxubmV0L3NjaGVkL2Nsc19hcGkuYy0yNDMxLVx0XHRcdCAgICAgIGZsYWdzLCBleHRhY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTI1CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoZSBpc3N1ZSBib2lscyBkb3duIHRvIGEgc2ltcGxlIGxvZ2ljIGVycm9yIGluIGB1MzJfY2hhbmdlYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIG1peC11cCBpbiBob3cgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQuIFRoZSBgZmxhZ3NgIGFyZ3VtZW50IGluIGB0Y19uZXdfdGZpbHRlcmAgaXMganVzdCB0aGF0IOKAkyBhIHNldCBvZiBmbGFncy4gVGhlIHBhdGNoIHNpbXBseSBjb3JyZWN0cyB0aGUgdXNlIG9mIGFuIGluY29ycmVjdCB2YXJpYWJsZSB3aXRoaW4gdGhlIHUzMiBjb2RlLiBUaGUgbG9naWMgYnVnIGFyaXNlcyBiZWNhdXNlIHRoZSBmdW5jdGlvbiBgdTMyX2NoYW5nZWAgd2FzIGFjY2lkZW50YWxseSB1c2luZyB0aGUgYGZsYWdzYCBhcmd1bWVudCBtZWFudCBmb3IgdGhlIG92ZXJhbGwgZmlsdGVyIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHJldHJpZXZlZCBmcm9tIHRoZSBOZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuCgpUaGlzIG1pc2RpcmVjdGlvbiByZXN1bHRzIGluIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZ2V0dGluZyB0aGUgd3Jvbmcgc2V0IG9mIGZsYWdzLiBUaGUgaW1wbGljYXRpb24gb2YgdGhhdCBpcyB0aGF0IGhhcmR3YXJlIG9mZmxvYWQgYmVoYXZpb3IgY291bGQgYmUgYWZmZWN0ZWQuIEZvciBpbnN0YW5jZSwgdGhlIGZ1bmN0aW9uIG1pZ2h0IGluY29ycmVjdGx5IGV2YWx1YXRlIGB0Y19za2lwX3N3KGZsYWdzKWAuCgpIb3dldmVyLCB0aGUgbmF0dXJlIG9mIHRoaXMgYnVnIGlzIHB1cmVseSBsb2dpY2FsLiBJdCBkZWFscyB3aXRoIGluY29ycmVjdCBmbGFnIHVzYWdlLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIG5vIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBubyBpbmZvcm1hdGlvbiBsZWFrcyBhdCBwbGF5LiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBidWcuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gYWRlcXVhdGUgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGFyaXNpbmcgZnJvbSB0aGlzLiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBmaXgsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIG9yIGV2ZW4gcmVsZXZhbnQsIGZvciBpZGVudGlmeWluZyBhbnkgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB1MzJfY2hhbmdlYCB3aGVyZSB0aGUgYGZsYWdzYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHBhcnNlZCBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuIFRoaXMgY2F1c2VkIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgdG8gcmVjZWl2ZSB0aGUgd3JvbmcgZmxhZ3MsIHBvdGVudGlhbGx5IGFmZmVjdGluZyBoYXJkd2FyZSBvZmZsb2FkIGJlaGF2aW9yIChlLmcuLCBpbmNvcnJlY3RseSBldmFsdWF0aW5nIGB0Y19za2lwX3N3KGZsYWdzKWApLiBUaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgYnV0IHRoaXMgc3BlY2lmaWMgYnVnIGlzIGp1c3QgaW5jb3JyZWN0IGZsYWcgdXNhZ2UuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdTMyX2NoYW5nZWAgd2hlcmUgdGhlIGBmbGFnc2AgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgdXNlcmZsYWdzYCBwYXJzZWQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIChgVENBX1UzMl9GTEFHU2ApLiBUaGlzIGNhdXNlZCBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIHRvIHJlY2VpdmUgdGhlIHdyb25nIGZsYWdzLCBwb3RlbnRpYWxseSBhZmZlY3RpbmcgaGFyZHdhcmUgb2ZmbG9hZCBiZWhhdmlvciAoZS5nLiwgaW5jb3JyZWN0bHkgZXZhbHVhdGluZyBgdGNfc2tpcF9zdyhmbGFncylgKS4gVGhpcyBpcyBhIHB1cmUgbG9naWMgYnVnIHJlbGF0ZWQgdG8gaGFyZHdhcmUgb2ZmbG9hZCBmbGFncyBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIGJ1dCB0aGlzIHNwZWNpZmljIGJ1ZyBpcyBqdXN0IGluY29ycmVjdCBmbGFnIHVzYWdlLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzoyMS40NDc5NzM5NzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjM3NDIyMDA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX1UzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInUzMl9jaGFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB1MzJfY2hhbmdlYCB3aGVyZSB0aGUgYGZsYWdzYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHBhcnNlZCBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuIFRoaXMgY2F1c2VkIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgdG8gcmVjZWl2ZSB0aGUgd3JvbmcgZmxhZ3MsIHBvdGVudGlhbGx5IGFmZmVjdGluZyBoYXJkd2FyZSBvZmZsb2FkIGJlaGF2aW9yIChlLmcuLCBpbmNvcnJlY3RseSBldmFsdWF0aW5nIGB0Y19za2lwX3N3KGZsYWdzKWApLiBUaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgYnV0IHRoaXMgc3BlY2lmaWMgYnVnIGlzIGp1c3QgaW5jb3JyZWN0IGZsYWcgdXNhZ2UuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHUzMl9jaGFuZ2VgIGluIHRoZSBgY2xzX3UzMmAgdHJhZmZpYyBjbGFzc2lmaWVyICh0YyBmaWx0ZXIpIHRvIHVzZSBgdXNlcmZsYWdzYCBpbnN0ZWFkIG9mIGBmbGFnc2Agd2hlbiBjYWxsaW5nIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIGZpbHRlciBhZGQvY2hhbmdlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6MjEuNDQ3OTgyNDk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA3OTA2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyY2JkNjY4YTQ2NDFhOTUyYTk4NTc1MjRmNzZiYmJhOWU4MWQyZTY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTM6MTM6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcXG5pbmRleCA4ZjMwY2M4MjE4MWQ5Li5kYzZlNDU1ZTY0ZWM3IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXFxuQEAgLTkzNSw3ICs5MzUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXG4gXFx0XFx0dTMyX2JpbmRfZmlsdGVyKHRwLCBuZXcsIGJhc2UsIHRiKTtcXG4gXFxuLVxcdFxcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spO1xcbitcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpO1xcbiBcXG5AQCAtMTE2MSw3ICsxMTYxLDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0XFx0c3RydWN0IHRjX3Vfa25vZGUgX19yY3UgKippbnM7XFxuIFxcdFxcdHN0cnVjdCB0Y191X2tub2RlICpwaW5zO1xcbiBcXG4tXFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIGZsYWdzLCBleHRhY2spO1xcbitcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGVycnVuYmluZDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjIxLjk3OTc5MjQzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM1NDg0Mzg0Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfVTMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidTMyX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB1MzJfY2hhbmdlYCBpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllciAodGMgZmlsdGVyKSB0byB1c2UgYHVzZXJmbGFnc2AgaW5zdGVhZCBvZiBgZmxhZ3NgIHdoZW4gY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBmaWx0ZXIgYWRkL2NoYW5nZSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjYmQ2NjhhNDY0MWE5NTJhOTg1NzUyNGY3NmJiYmE5ZTgxZDJlNjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEzOjEzOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcbmluZGV4IDhmMzBjYzgyMTgxZDkuLmRjNmU0NTVlNjRlYzcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5AQCAtOTM1LDcgKzkzNSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gXHRcdHUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7XG4gXG4tXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuK1x0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHR1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbmV3LCB0Yik7XG4gXG5AQCAtMTE2MSw3ICsxMTYxLDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0c3RydWN0IHRjX3Vfa25vZGUgX19yY3UgKippbnM7XG4gXHRcdHN0cnVjdCB0Y191X2tub2RlICpwaW5zO1xuIFxuLVx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgZmxhZ3MsIGV4dGFjayk7XG4rXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBlcnJ1bmJpbmQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzoyMS45Nzk3OTQzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDEzMjg0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBjbHNfdTMyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfdTMyLmNgLiBJdCBzZWVtcyB0aGV5J3JlIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllciAodGMgZmlsdGVyKS4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIG1vZGlmaWVkIHRoZSBjYWxsIHRvIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuXG5cblByZXZpb3VzbHksIGB1MzJfY2hhbmdlYCB3YXMgY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgZmxhZ3MsIGV4dGFjaylgLiBOb3csIHRoZSBjYWxsIGlzIGB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjaylgLiBUaGUga2V5IGRpZmZlcmVuY2UgaXMgdGhlIHBhcmFtZXRlciBiZWluZyBwYXNzZWQ6IGBmbGFnc2AgaXMgYmVpbmcgcmVwbGFjZWQgYnkgYHVzZXJmbGFnc2AuIENsZWFybHksIHRoZSBpbnRlbnRpb24gaGVyZSBpcyB0byB1c2UgYSBkaWZmZXJlbnQgc2V0IG9mIGZsYWdzLCBwcmVzdW1hYmx5IHVzZXItcHJvdmlkZWQgZmxhZ3MuXG5cbkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiBhbmQgc2VlIGhvdyB0aGVzZSBgdXNlcmZsYWdzYCBhcmUgYmVpbmcgaGFuZGxlZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggYXV0aG9yIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoIGhlcmUgYW5kIGhvdyB0aGlzIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBgY2xzX3UzMmAgY2xhc3NpZmllci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjI1LjY4MTEyNjIwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg3MzkxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidTMyX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX3UzMi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmM9ODIxPXN0YXRpYyBzdHJ1Y3QgdGNfdV9rbm9kZSAqdTMyX2luaXRfa25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODcxLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6ODcyOnN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxubmV0L3NjaGVkL2Nsc191MzIuYy04NzMtXFx0XFx0ICAgICAgc3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIGhhbmRsZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ1OD1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3UzMl9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2My1cXHQuZ2V0XFx0XFx0PVxcdHUzMl9nZXQsXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxNDY0OlxcdC5jaGFuZ2VcXHRcXHQ9XFx0dTMyX2NoYW5nZSxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NjUtXFx0LmRlbGV0ZVxcdFxcdD1cXHR1MzJfZGVsZXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzoyNS44Nzk4NzIwMzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQzNTQ0NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqUHJpb3JpdGl6aW5nIEZ1enppbmcgVGFyZ2V0cyBpbiBjbHNfdTMyKipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0J3MgY2xlYXIgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBpcyB0aGUgY3J1Y2lhbCBgLmNoYW5nZWAgY2FsbGJhY2sgd2l0aGluIGBjbHNfdTMyX29wc2AuIEdpdmVuIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3RydWN0dXJlLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gV2UgY2FuJ3QgbGV0IHRoaXMgc2xpcCB0aHJvdWdoIG91ciBmaW5nZXJzLiBUaGUgYC5jaGFuZ2VgIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIHByb25lIHRvIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbkxldCdzIGltbWVkaWF0ZWx5IGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGNsc191MzIuY2AgYW5kIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RseSBzZXQgdXAgZm9yIGl0LiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBvdXIgZnV6emluZyBoYXJuZXNzIHdpbGwgZWZmZWN0aXZlbHkgcmVhY2ggdGhpcyBjb2RlIHBhdGggYW5kIHRoYXQgd2UgaGF2ZSB0aGUgcHJvcGVyIGluc3RydW1lbnRhdGlvbiBpbiBwbGFjZSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gR290dGEgZW5zdXJlIGNvdmVyYWdlIGlzIHRob3JvdWdoIGFuZCB0aGUgZmVlZGJhY2sgbG9vcCBpcyB0aWdodC4gVGhpcyBsb29rcyBsaWtlIGxvdy1oYW5naW5nIGZydWl0IHdpdGggaGlnaCBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6MjkuMTIzNDIwMDYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTE2Mjk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbHNfdTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTUxNj1jb25maWcgTkVUX0NMU19VMzJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTUyMy1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5uZXQvc2NoZWQvS2NvbmZpZzo1MjQ6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3UzMi5cXG5uZXQvc2NoZWQvS2NvbmZpZy01MjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjI5LjI0NDU4OTkxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTk4MTM4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzIGEgZGlyZWN0IGV4cHJlc3Npb24gb2YgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBORVRfQ0xTX1UzMiBpbiBLY29uZmlnKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgYE5FVF9DTFNfVTMyYC4gSXQncyBwcmV0dHkgZnVuZGFtZW50YWwsIHNvIEknbSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG5ldHdvcmtpbmcgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBVMzJgIGlzIGEga2V5IGNvbXBvbmVudCBpbiBhIGxvdCBvZiB0cmFmZmljIGNvbnRyb2wgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBpdCdzIHNpdHVhdGVkIGluIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0IGJlaGF2aW9ycyBpdCBtaWdodCBoYXZlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGNsYXJpZnkgdGhlIHNwZWNpZmljcyBvZiBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgaW50ZWdyYXRpb24gd2l0aCB0aGUgb3RoZXIgbmV0d29ya2luZyBjb21wb25lbnRzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6MzIuNDY0NDA3NDM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzc3MDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19VMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NTA2PWNvbmZpZyBORVRfQ0xTX0ZXXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXFxubmV0L3NjaGVkL0tjb25maWc6NTE2OmNvbmZpZyBORVRfQ0xTX1UzMlxcbm5ldC9zY2hlZC9LY29uZmlnLTUxNy1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjMyLjYzODE4MzkxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzM2NTc1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZTogTkVUX0NMU19VMzIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBORVRfQ0xTX1UzMmAgY2xhc3NpZmljYXRpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBrbm93aW5nICp3aGF0KiByZWxpZXMgb24gaXQsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSAqbmF0dXJlKiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMuIEFyZSB3ZSB0YWxraW5nIGNvcmUga2VybmVsIG1vZHVsZXMsIHVzZXItc3BhY2UgdXRpbGl0aWVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIG1hdHRlcnMgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGNhbGxzIG9yIGluZGlyZWN0IHVzYWdlIHRocm91Z2ggbW9yZSBjb21wbGV4IHN0cnVjdHVyZXM/IEtub3dpbmcgdGhpcyBpcyBnb2luZyB0byBncmVhdGx5IGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgYW5hbHlzaXMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgd2VhayBwb2ludHMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyByZXF1aXJlcyBhIGdyYW51bGFyIHZpZXcg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucywgbm90IGp1c3QgdGhlIGNvZGUuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgYSBkZXBlbmRlbmN5IGdyYXBoIHZpc3VhbGl6YXRpb24gdG9vbCByZWFkeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjM1Ljg3MTg1MDcyM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTE2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTE2OlxcdGNvbmZpZyBORVRfQ0xTX1UzMlxcbiA1MTc6XFx0XFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXFxcIlxcbiA1MTg6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTE5OlxcdFxcdGhlbHBcXG4gNTIwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgdXNpbmcgYSB1bml2ZXJzYWxcXG4gNTIxOlxcdFxcdCAgMzJiaXQgcGllY2VzIGJhc2VkIGNvbXBhcmlzb24gc2NoZW1lLlxcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTI0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc191MzIuXFxuIDUyNTpcXHRcXG4gNTI2OlxcdGNvbmZpZyBDTFNfVTMyX1BFUkZcXG4gNTI3OlxcdFxcdGJvb2wgXFxcIlBlcmZvcm1hbmNlIGNvdW50ZXJzIHN1cHBvcnRcXFwiXFxuIDUyODpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfVTMyXFxuIDUyOTpcXHRcXHRoZWxwXFxuIDUzMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gbWFrZSB1MzIgZ2F0aGVyIGFkZGl0aW9uYWwgc3RhdGlzdGljcyB1c2VmdWwgZm9yXFxuIDUzMTpcXHRcXHQgIGZpbmUgdHVuaW5nIHUzMiBjbGFzc2lmaWVycy5cXG4gNTMyOlxcdFxcbiA1MzM6XFx0Y29uZmlnIENMU19VMzJfTUFSS1xcbiA1MzQ6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG1hcmtzIHN1cHBvcnRcXFwiXFxuIDUzNTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfVTMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjM1Ljg3MTk2NTQzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODExODg5NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTmV0d29yayBDb25maWd1cmF0aW9uIENvbnRleHQqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgbmV0d29yayBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHksIHRoZSBgTkVUX0NMU19VMzJgIHNldHRpbmcuIFRoYXQncyB0aGUga2V5IGlkZW50aWZpZXIgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdGhpbmcgY2hhbmdlcywgaG93IGl0J3MgaGFuZGxlZC4gVGhlIGNvcmUgZnVuY3Rpb24gdG8gZXhhbWluZSBpcyBvYnZpb3VzbHkgYHUzMl9jaGFuZ2VgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBhY3Rpb24gbGlrZWx5IHJlc2lkZXMsIHJpZ2h0PyBJdCdzIHRoZSBtZWNoYW5pc20gZm9yIG1vZGlmaWNhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGlucHV0cywgb3V0cHV0cywgc2lkZSBlZmZlY3RzLCBldmVyeXRoaW5nLlxuXG5CdXQgd2FpdCwgdGhlcmUncyBhbm90aGVyIG9uZSBtZW50aW9uZWQ6IGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIFRoYXTigJlzIGFub3RoZXIgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkgY2FuJ3QgZGlzbWlzcyBpdC4gVGhpcyBzZWVtcyB0byBiZSBhdCBhIGxvd2VyIGxldmVsIC0tIGhhcmR3YXJlIGtleSBub2RlIHJlcGxhY2VtZW50LCBtYXliZT8gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQgZml0cyB3aXRoIHRoZSBgdTMyX2NoYW5nZWAgZnVuY3Rpb24uIElzIGl0IGNhbGxlZCBieSBpdD8gRG9lcyBpdCBwcm92aWRlIHNvbWUgYWx0ZXJuYXRpdmUgcGF0aHdheT8gQXJlIHRoZXJlIHNwZWNpZmljIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGhhcmR3YXJlIG5vZGUgcmVwbGFjZW1lbnQgaXMgdGhlICpwcmVmZXJyZWQqIG1ldGhvZD8gVGhlc2UgYXJlIGltcG9ydGFudCBxdWVzdGlvbnMuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QgaXMgY3J1Y2lhbCB0byBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjM5LjY4Mzg1OTU0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNzc1ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInUzMl9yZXBsYWNlX2h3X2tub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz01MzI9c3RhdGljIHZvaWQgdTMyX3JlbW92ZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0NS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU0NjpzdGF0aWMgaW50IHUzMl9yZXBsYWNlX2h3X2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0Ny1cXHRcXHRcXHRcXHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9ODcyPXN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzNy1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkzODpcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy05MzktXFx0XFx0aWYgKGVycikge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMTYzLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE2NDpcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE2NS1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzozOS44MTU2NDIzMzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUwMjMxODcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB1MzJgIENsYXNzaWZpZXIgQVBJKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdTMyYCBjbGFzc2lmaWVyIGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBleHBvc2UgdGhlIGVudHJ5IHBvaW50IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyBvbiBgdTMyX2NoYW5nZWAsIGJ1dCB0aGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGEgYml0IG9mIGEgcmVkIGZsYWcgYWNjb3JkaW5nIHRvIHRoZSBwcm9qZWN0IGd1aWRlbGluZXMuIExldCBtZSBkb3VibGUtY2hlY2suLi4geWVwLCBgc3RhdGljIGludCB1MzJfY2hhbmdlKC4uLilgLiBIbW0sIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlLCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFyZSBpbXBvcnRhbnQgZm9yIHRyYWNpbmcgYW5kIGV4dGVybmFsIHVzZS5cblxuU28sIGB1MzJfY2hhbmdlYCBpcyBzdGF0aWMsICpob3dldmVyKiBpdCdzIGFzc2lnbmVkIGFzIHRoZSBgLmNoYW5nZWAgb3BlcmF0aW9uIGluIGBjbHNfdTMyX29wc2AuIFRoYXQncyBpbnRlcmVzdGluZywgYnV0IG5vdCBpZGVhbC4gSXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgZW5kcyB1cCBjYWxsaW5nIGB1MzJfY2hhbmdlYD8gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHRoYXQgaW5kaXJlY3RseSBleHBvc2VzIGl0IGFzIGFuIGV4dGVybmFsIEFQSS5cblxuQWhhISBgdGNfbmV3X3RmaWx0ZXJgIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBsb29rcyBwcm9taXNpbmcuIEl0IHNlZW1zIHRvIGNhbGwgYHRwLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2UoLi4uKWAsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIHdvdWxkIGJlIGB1MzJfY2hhbmdlYC4gVGhhdCdzIHByb2JhYmx5IHRoZSBrZXkuIEkgc2hvdWxkIGludmVzdGlnYXRlIGB0Y19uZXdfdGZpbHRlcmAgbW9yZSBjbG9zZWx5LiBJIGJlbGlldmUgdGhpcyBpcyB3aGF0IEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzo0NS4zMTc5NjUwNjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDc2NTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19uZXdfdGZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmM9MjIzMT1zdGF0aWMgYm9vbCBpc19pbmdyZXNzX29yX2Nsc2FjdChzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaywgc3RydWN0IFFkaXNjICpxKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0yMjM1LVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MjIzNjpzdGF0aWMgaW50IHRjX25ld190ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyMzctXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQxMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2ZpbHRlcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDEwNjpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXVEZJTFRFUiwgLmRvaXQgPSB0Y19uZXdfdGZpbHRlcixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQxMDctXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6NDUuNDUyNzM2NTkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MTk4MTU0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUcmFmZmljIENvbnRyb2wgRmlsdGVyIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYHRjX25ld190ZmlsdGVyYCBpcyBhbHNvIGRlY2xhcmVkIGFzIHN0YXRpYy4gSG1tLCBidXQgd2FpdCwgSSByZW1lbWJlciB0aGF0IGB0Y19uZXdfdGZpbHRlcmAgaXMgcmVnaXN0ZXJlZCBhcyBhbiBydG5sIG1lc3NhZ2UgaGFuZGxlci4gVGhhdCdzIGEgZ29vZCBzaWduLCBhbmQgaXQgbWVhbnMgaXQncyBsaWtlbHkgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQVBJLiBMZXQgbWUgc2VlLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSAqbm90KiBkZWNsYXJlZCBzdGF0aWM/XG5cbklmIGB1MzJfY2hhbmdlYCBpcyBzdGF0aWMgYnV0ICpub3QqIGlubGluZWQsIHRoYXQgY291bGQgYmUgdXNlZnVsLCBzaW5jZSBpdCAqbWlnaHQqIHN0aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wuIEFoLCBidXQgYHRjX25ld190ZmlsdGVyYCBpcyBhIHNvbGlkIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBzZWVtcyBwcmV0dHkgc2FmZS5cblxuUmlnaHQsIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoLCBiZWluZyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLikgQWhhISBgdTMyX2NoYW5nZWAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyB0aGUgY29tcGlsZXIgKmNhbid0KiBpbmxpbmUgaXQsIHNvIGl0IHdpbGwgZGVmaW5pdGVseSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQncyBnb29kIHRvIGxpc3QhIFNvIGB1MzJfY2hhbmdlYCBpcyBwZXJmZWN0bHkgZmluZSBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IHdlJ3JlIG9ubHkgZ29pbmcgdG8gcmVxdWlyZSBtaW5pbWFsIGNvbmZpZyBvcHRpb25zLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBJIGJlbGlldmUgYE5FVF9DTFNfVTMyYCBpcyBzdWZmaWNpZW50LiBCZXR0ZXIgdG8gYmUgc3VyZTsgbGV0IG1lIGFsc28gY2hlY2sgYE5FVF9DTFNgIGFuZCBgTkVUX1NDSEVEYCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjA5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjUwLjk3MjU1NDg2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MDY1MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTQ3OT1jb21tZW50IFxcXCJDbGFzc2lmaWNhdGlvblxcXCJcXG5uZXQvc2NoZWQvS2NvbmZpZy00ODAtXFxubmV0L3NjaGVkL0tjb25maWc6NDgxOmNvbmZpZyBORVRfQ0xTXFxubmV0L3NjaGVkL0tjb25maWctNDgyLVxcdGJvb2xcXG5uZXQvc2NoZWQvS2NvbmZpZy00ODMtXFxubmV0L3NjaGVkL0tjb25maWc6NDg0OmNvbmZpZyBORVRfQ0xTX0JBU0lDXFxubmV0L3NjaGVkL0tjb25maWctNDg1LVxcdHRyaXN0YXRlIFxcXCJFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy00OTMtXFxubmV0L3NjaGVkL0tjb25maWc6NDk0OmNvbmZpZyBORVRfQ0xTX1JPVVRFNFxcbm5ldC9zY2hlZC9LY29uZmlnLTQ5NS1cXHR0cmlzdGF0ZSBcXFwiUm91dGluZyBkZWNpc2lvbiAoUk9VVEUpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTA1LVxcbm5ldC9zY2hlZC9LY29uZmlnOjUwNjpjb25maWcgTkVUX0NMU19GV1xcbm5ldC9zY2hlZC9LY29uZmlnLTUwNy1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG1hcmsgKEZXKVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTUxNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXFxubmV0L3NjaGVkL0tjb25maWctNTE3LVxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTUzMz1jb25maWcgQ0xTX1UzMl9NQVJLXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01MzgtXFxubmV0L3NjaGVkL0tjb25maWc6NTM5OmNvbmZpZyBORVRfQ0xTX0ZMT1dcXG5uZXQvc2NoZWQvS2NvbmZpZy01NDAtXFx0dHJpc3RhdGUgXFxcIkZsb3cgY2xhc3NpZmllclxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTU0OS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1NTA6Y29uZmlnIE5FVF9DTFNfQ0dST1VQXFxubmV0L3NjaGVkL0tjb25maWctNTUxLVxcdHRyaXN0YXRlIFxcXCJDb250cm9sIEdyb3VwIENsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01NjEtXFxubmV0L3NjaGVkL0tjb25maWc6NTYyOmNvbmZpZyBORVRfQ0xTX0JQRlxcbm5ldC9zY2hlZC9LY29uZmlnLTU2My1cXHR0cmlzdGF0ZSBcXFwiQlBGLWJhc2VkIGNsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01NzEtXFxubmV0L3NjaGVkL0tjb25maWc6NTcyOmNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxcbm5ldC9zY2hlZC9LY29uZmlnLTU3My1cXHR0cmlzdGF0ZSBcXFwiRmxvd2VyIGNsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01ODEtXFxubmV0L3NjaGVkL0tjb25maWc6NTgyOmNvbmZpZyBORVRfQ0xTX01BVENIQUxMXFxubmV0L3NjaGVkL0tjb25maWctNTgzLVxcdHRyaXN0YXRlIFxcXCJNYXRjaC1hbGwgY2xhc3NpZmllclxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTY5MD1jb25maWcgTkVUX0VNQVRDSF9JUFRcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDI6Y29uZmlnIE5FVF9DTFNfQUNUXFxubmV0L3NjaGVkL0tjb25maWctNzAzLVxcdGJvb2wgXFxcIkFjdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjUxLjE3MDYyNjA5MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTAyNTk3MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVTMyIENsYXNzaWZpZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBjaGFuZ2UgaGVyZSBjZW50ZXJzIGFyb3VuZCBgTkVUX0NMU19VMzJgLiBUaGF0J3MgdGhlIGtleSBlbmFibGluZyBjb25maWcgSSBuZWVkIHRvIGxvb2sgYXQuIEknbGwgbWFrZSBzdXJlIHRvIGFkZCBgTkVUX0NMU19VMzJgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgZW5zdXJpbmcgaXQncyBwcm9wZXJseSBjb25zaWRlcmVkIGR1cmluZyB0aGlzIHJldmlldy5cblxuTm93LCB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIG1vZGlmaWVkIGlzIGB1MzJfY2hhbmdlYC4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIHF1aWNrbHkuLi4gaXMgYHUzMl9jaGFuZ2VgICpzdGF0aWMqIGJ1dCAqbm90KiBpbmxpbmVkPyBSaWdodCwgaXQncyBhc3NpZ25lZCB0byBgY2xzX3UzMl9vcHMuY2hhbmdlYCwgd2hpY2ggbWVhbnMgaXTigJlzIGJlaW5nIHVzZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhlcmVmb3JlLCB0aGUgY29tcGlsZXIgKmNhbid0KiBpbmxpbmUgaXQuIEdvb2QsIHRoYXQgY29uZmlybXMgaXQuIEknbGwgbmVlZCB0byBhZGQgYHUzMl9jaGFuZ2VgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBlbnN1cmluZyBpdCByZW1haW5zIHZpc2libGUgZm9yIGRlZXBlciBhbmFseXNpcy5cblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllci4gU3BlY2lmaWNhbGx5LCB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHV0aWxpemUgYHVzZXJmbGFnc2AgaW5zdGVhZCBvZiBgZmxhZ3NgIHdoZW4gY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljLCBhbmQgaXQncyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgdGMgZmlsdGVyIGFkZC9jaGFuZ2VgIG9wZXJhdGlvbnMuIEl0J3MgZGVmaW5pdGVseSBpbiB0aGUgY3JpdGljYWwgcGF0aC5cblxuQWxyaWdodCwgd2l0aCBhbGwgdGhhdCBjb25maXJtZWQsIEknbSBoYXBweSB3aXRoIG15IGFzc2Vzc21lbnQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg0MSwiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6NTcuMjczMjI2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDk0NDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19VMzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1MzJfY2hhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHUzMl9jaGFuZ2VgIGluIHRoZSBgY2xzX3UzMmAgdHJhZmZpYyBjbGFzc2lmaWVyICh0YyBmaWx0ZXIpIHRvIHVzZSBgdXNlcmZsYWdzYCBpbnN0ZWFkIG9mIGBmbGFnc2Agd2hlbiBjYWxsaW5nIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIGZpbHRlciBhZGQvY2hhbmdlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX1UzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInUzMl9jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdTMyX2NoYW5nZWAgaW4gdGhlIGBjbHNfdTMyYCB0cmFmZmljIGNsYXNzaWZpZXIgKHRjIGZpbHRlcikgdG8gdXNlIGB1c2VyZmxhZ3NgIGluc3RlYWQgb2YgYGZsYWdzYCB3aGVuIGNhbGxpbmcgYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgZmlsdGVyIGFkZC9jaGFuZ2UpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzo1Ny40NjQxODE5MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYzNTc5OTg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzo1Ny40NjYwNjUxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNjM1NjEwOTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHUzMl9jaGFuZ2VgIHdoZXJlIHRoZSBgZmxhZ3NgIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gd2FzIGluY29ycmVjdGx5IHVzZWQgaW5zdGVhZCBvZiB0aGUgYHVzZXJmbGFnc2AgcGFyc2VkIGZyb20gdGhlIG5ldGxpbmsgYXR0cmlidXRlcyAoYFRDQV9VMzJfRkxBR1NgKS4gVGhpcyBjYXVzZWQgYHUzMl9yZXBsYWNlX2h3X2tub2RlYCB0byByZWNlaXZlIHRoZSB3cm9uZyBmbGFncywgcG90ZW50aWFsbHkgYWZmZWN0aW5nIGhhcmR3YXJlIG9mZmxvYWQgYmVoYXZpb3IgKGUuZy4sIGluY29ycmVjdGx5IGV2YWx1YXRpbmcgYHRjX3NraXBfc3coZmxhZ3MpYCkuIFRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIGhhcmR3YXJlIG9mZmxvYWQgZmxhZ3MgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBidXQgdGhpcyBzcGVjaWZpYyBidWcgaXMganVzdCBpbmNvcnJlY3QgZmxhZyB1c2FnZS4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyY2JkNjY4YTQ2NDFhOTUyYTk4NTc1MjRmNzZiYmJhOWU4MWQyZTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMzoxMzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCA4ZjMwY2M4MjE4MWQ5Li5kYzZlNDU1ZTY0ZWM3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTkzNSw3ICs5MzUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFxuIFx0XHR1MzJfYmluZF9maWx0ZXIodHAsIG5ldywgYmFzZSwgdGIpO1xuIFxuLVx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCBmbGFncywgZXh0YWNrKTtcbitcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpO1xuIFxuQEAgLTExNjEsNyArMTE2MSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdHN0cnVjdCB0Y191X2tub2RlIF9fcmN1ICoqaW5zO1xuIFx0XHRzdHJ1Y3QgdGNfdV9rbm9kZSAqcGlucztcbiBcbi1cdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIGZsYWdzLCBleHRhY2spO1xuK1x0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJydW5iaW5kO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6NTcuNDY2MDY2ODhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MjAwMDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGVjaG5pY2FsIHNuaXBwZXQsIGV4cHJlc3NlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIHUzMiBDbGFzc2lmaWVyIENvZGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgaG9taW5nIGluIG9uIGBuZXQvc2NoZWQvY2xzX3UzMi5jYC4gVGhhdCB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIFUzMiBjbGFzc2lmaWVyLCB3aGljaCBJIGtub3cgaXMgYSBjb3JlIGNvbXBvbmVudCBvZiB0cmFmZmljIGNvbnRyb2wgZm9yIElQIHBhY2tldHMuIEdvb2QsIGZhbWlsaWFyIHRlcnJpdG9yeS5cblxuVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGZ1bmN0aW9uIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuICBTcGVjaWZpY2FsbHksIHRoZSBzaWduYXR1cmUgaXMgc2hpZnRpbmcgZnJvbSB1c2luZyBgZmxhZ3NgIHRvIHVzaW5nIGB1c2VyZmxhZ3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIGZsYWcgdmFyaWFibGVzIHJlcHJlc2VudCBhbmQgd2h5IHRoZSBjaGFuZ2Ugd2FzIG1hZGUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHUzMl9jaGFuZ2VgIGRvZXMuIE15IHN1c3BpY2lvbiBpcyB0aGF0IGB1c2VyZmxhZ3NgIG1pZ2h0IHJlbGF0ZSB0byB1c2VyLXNwYWNlIGlucHV0L2NvbnRyb2wgd2hpbGUgYGZsYWdzYCByZWxhdGUgdG8gaW50ZXJuYWwga2VybmVsIHdvcmtpbmdzLiBQcm9iYWJseSBzb21lIGtpbmQgb2YgcGFyYW1ldGVyIGhhbmRsaW5nIGNoYW5nZS4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBhcmUgdXNlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBjbGFyaWZ5IHdoYXQga2luZCBvZiBpbXBhY3QgdGhpcyBjaGFuZ2Ugd2lsbCBtYWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDowMS43NDgwNzAzODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNDYwODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1MzJfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz04MjE9c3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy04NzEtXFxubmV0L3NjaGVkL2Nsc191MzIuYzo4NzI6c3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg3My1cXHRcXHQgICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDU4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDYzLVxcdC5nZXRcXHRcXHQ9XFx0dTMyX2dldCxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NjQ6XFx0LmNoYW5nZVxcdFxcdD1cXHR1MzJfY2hhbmdlLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2NS1cXHQuZGVsZXRlXFx0XFx0PVxcdHUzMl9kZWxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjE0OjAyLjE1MjY5MzkyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMyMDA4NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBjbHNfdTMyYCdzIGB1MzJfY2hhbmdlYCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L3NjaGVkL2Nsc191MzIuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVMzIgY2xhc3NpZmllciBpcyB1cGRhdGVkLCBjcmVhdGVkLCBvciBkZWxldGVkIGJhc2VkIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoaXMgY29yZSByb3V0aW5lLiBJJ20gZm9jdXNpbmcgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBmbG93IC0gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiwgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gSSdsbCBiZSBsb29raW5nIHRvIHNlZSBob3cgaXQgYWxsb2NhdGVzIGFuZCBkZWFsbG9jYXRlcyBtZW1vcnksIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdG8gbG9vayBvdXQgZm9yLiBTaW5jZSB0aGlzIGlzIGEgY3JpdGljYWwgcGFydCBvZiB0cmFmZmljIGNsYXNzaWZpY2F0aW9uIGFuZCBxdWV1aW5nIGRpc2NpcGxpbmUgbWFuYWdlbWVudCwgdGhlIGRldmlsIHdpbGwgYmUgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZC4gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3NzaWJsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgZXNwZWNpYWxseSBpbiBoaWdoLWxvYWQgc2NlbmFyaW9zLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBmaWx0ZXIga2V5cyBhbmQgbWFza3MgYXJlIHBhcnNlZCBhbmQgdmFsaWRhdGVkLCBhbmQgaG93IHRoZXNlIHZhbHVlcyBhcmUgY29udmVydGVkIGZyb20gdGhlIHVzZXItc3BhY2UgcmVwcmVzZW50YXRpb24gdG8gdGhlIGtlcm5lbC1zcGFjZS4gVGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBpbmdyZXNzL2VncmVzcyBkaXJlY3Rpb25zIGFuZCB0aGUgbmV0d29yayBzdGFjayBpbiBnZW5lcmFsIHdpbGwgYmUgY3JpdGljYWwgYXMgd2VsbC4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBrZXJuZWwncyB0cmFmZmljIGNvbnRyb2wgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTQ6MDUuODg0NzA1ODdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODcwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHR9XFxuIDg3MTpcXHRcXG4gODcyOlxcdHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIDg3MzpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxcbiA4NzQ6XFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdm9pZCAqKmFyZywgdTMyIGZsYWdzLFxcbiA4NzU6XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA4NzY6XFx0e1xcbiA4Nzc6XFx0XFx0c3RydWN0IHRjX3VfY29tbW9uICp0cF9jID0gdHAtXFx1MDAzZWRhdGE7XFxuIDg3ODpcXHRcXHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHQ7XFxuIDg3OTpcXHRcXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbjtcXG4gODgwOlxcdFxcdHN0cnVjdCB0Y191MzJfc2VsICpzO1xcbiA4ODE6XFx0XFx0c3RydWN0IG5sYXR0ciAqb3B0ID0gdGNhW1RDQV9PUFRJT05TXTtcXG4gODgyOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9VMzJfTUFYICsgMV07XFxuIDg4MzpcXHRcXHR1MzIgaHRpZCwgdXNlcmZsYWdzID0gMDtcXG4gODg0OlxcdFxcdHNpemVfdCBzZWxfc2l6ZTtcXG4gODg1OlxcdFxcdGludCBlcnI7XFxuIDg4NjpcXHRcXG4gODg3OlxcdFxcdGlmICghb3B0KSB7XFxuIDg4ODpcXHRcXHRcXHRpZiAoaGFuZGxlKSB7XFxuIDg4OTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmlsdGVyIGhhbmRsZSByZXF1aXJlcyBvcHRpb25zXFxcIik7XFxuIDg5MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODkxOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg5MjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODkzOlxcdFxcdFxcdH1cXG4gODk0OlxcdFxcdH1cXG4gODk1OlxcdFxcbiA4OTY6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfVTMyX01BWCwgb3B0LCB1MzJfcG9saWN5LFxcbiA4OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbiA4OTg6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDg5OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5MDA6XFx0XFxuIDkwMTpcXHRcXHRpZiAodGJbVENBX1UzMl9GTEFHU10pIHtcXG4gOTAyOlxcdFxcdFxcdHVzZXJmbGFncyA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfRkxBR1NdKTtcXG4gOTAzOlxcdFxcdFxcdGlmICghdGNfZmxhZ3NfdmFsaWQodXNlcmZsYWdzKSkge1xcbiA5MDQ6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkludmFsaWQgZmlsdGVyIGZsYWdzXFxcIik7XFxuIDkwNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTA2OlxcdFxcdFxcdH1cXG4gOTA3OlxcdFxcdH1cXG4gOTA4OlxcdFxcbiA5MDk6XFx0XFx0biA9ICphcmc7XFxuIDkxMDpcXHRcXHRpZiAobikge1xcbiA5MTE6XFx0XFx0XFx0c3RydWN0IHRjX3Vfa25vZGUgKm5ldztcXG4gOTEyOlxcdFxcbiA5MTM6XFx0XFx0XFx0aWYgKFRDX1UzMl9LRVkobi1cXHUwMDNlaGFuZGxlKSA9PSAwKSB7XFxuIDkxNDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiS2V5IG5vZGUgaWQgY2Fubm90IGJlIHplcm9cXFwiKTtcXG4gOTE1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA5MTY6XFx0XFx0XFx0fVxcbiA5MTc6XFx0XFxuIDkxODpcXHRcXHRcXHRpZiAoKG4tXFx1MDAzZWZsYWdzIF4gdXNlcmZsYWdzKSBcXHUwMDI2XFxuIDkxOTpcXHRcXHRcXHQgICAgfihUQ0FfQ0xTX0ZMQUdTX0lOX0hXIHwgVENBX0NMU19GTEFHU19OT1RfSU5fSFcpKSB7XFxuIDkyMDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiS2V5IG5vZGUgZmxhZ3MgZG8gbm90IG1hdGNoIHBhc3NlZCBmbGFnc1xcXCIpO1xcbiA5MjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkyMjpcXHRcXHRcXHR9XFxuIDkyMzpcXHRcXG4gOTI0OlxcdFxcdFxcdG5ldyA9IHUzMl9pbml0X2tub2RlKG5ldCwgdHAsIG4pO1xcbiA5MjU6XFx0XFx0XFx0aWYgKCFuZXcpXFxuIDkyNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0XFx0ZXJyID0gdTMyX3NldF9wYXJtcyhuZXQsIHRwLCBuZXcsIHRiLCB0Y2FbVENBX1JBVEVdLFxcbiA5Mjk6XFx0XFx0XFx0XFx0XFx0ICAgIGZsYWdzLCBuZXctXFx1MDAzZWZsYWdzLCBleHRhY2spO1xcbiA5MzA6XFx0XFxuIDkzMTpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuIDkzMjpcXHRcXHRcXHRcXHRfX3UzMl9kZXN0cm95X2tleShuZXcpO1xcbiA5MzM6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gOTM0OlxcdFxcdFxcdH1cXG4gOTM1OlxcdFxcbiA5MzY6XFx0XFx0XFx0dTMyX2JpbmRfZmlsdGVyKHRwLCBuZXcsIGJhc2UsIHRiKTtcXG4gOTM3OlxcdFxcbiA5Mzg6XFx0XFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xcbiA5Mzk6XFx0XFx0XFx0aWYgKGVycikge1xcbiA5NDA6XFx0XFx0XFx0XFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpO1xcbiA5NDE6XFx0XFxuIDk0MjpcXHRcXHRcXHRcXHRpZiAodGJbVENBX1UzMl9MSU5LXSkge1xcbiA5NDM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjX3VfaG5vZGUgKmh0X29sZDtcXG4gOTQ0OlxcdFxcbiA5NDU6XFx0XFx0XFx0XFx0XFx0aHRfb2xkID0gcnRubF9kZXJlZmVyZW5jZShuLVxcdTAwM2VodF9kb3duKTtcXG4gOTQ2OlxcdFxcdFxcdFxcdFxcdGlmIChodF9vbGQpXFxuIDk0NzpcXHRcXHRcXHRcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmh0X29sZC1cXHUwMDNlcmVmY250KTtcXG4gOTQ4OlxcdFxcdFxcdFxcdH1cXG4gOTQ5OlxcdFxcdFxcdFxcdF9fdTMyX2Rlc3Ryb3lfa2V5KG5ldyk7XFxuIDk1MDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5NTE6XFx0XFx0XFx0fVxcbiA5NTI6XFx0XFxuIDk1MzpcXHRcXHRcXHRpZiAoIXRjX2luX2h3KG5ldy1cXHUwMDNlZmxhZ3MpKVxcbiA5NTQ6XFx0XFx0XFx0XFx0bmV3LVxcdTAwM2VmbGFncyB8PSBUQ0FfQ0xTX0ZMQUdTX05PVF9JTl9IVztcXG4gOTU1OlxcdFxcbiA5NTY6XFx0XFx0XFx0dGNmX3Byb3RvX3VwZGF0ZV91c2Vzdyh0cCwgbmV3LVxcdTAwM2VmbGFncyk7XFxuIDk1NzpcXHRcXG4gOTU4OlxcdFxcdFxcdHUzMl9yZXBsYWNlX2tub2RlKHRwLCB0cF9jLCBuZXcpO1xcbiA5NTk6XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZuLVxcdTAwM2VyZXMpO1xcbiA5NjA6XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2bi1cXHUwMDNlZXh0cyk7XFxuIDk2MTpcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2bi1cXHUwMDNlcndvcmssIHUzMl9kZWxldGVfa2V5X3dvcmspO1xcbiA5NjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk2MzpcXHRcXHR9XFxuIDk2NDpcXHRcXG4gOTY1OlxcdFxcdGlmICh0YltUQ0FfVTMyX0RJVklTT1JdKSB7XFxuIDk2NjpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGl2aXNvciA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfRElWSVNPUl0pO1xcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHRcXHRpZiAoIWlzX3Bvd2VyX29mXzIoZGl2aXNvcikpIHtcXG4gOTY5OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJEaXZpc29yIGlzIG5vdCBhIHBvd2VyIG9mIDJcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTQ6MDUuODg0ODg1OTE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NjIwOTYxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVHJhZmZpYyBDb250cm9sIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gaG93IHdlIGhhbmRsZSBmbGFncyB3aXRoaW4gdGhlIHUzMiBmaWx0ZXIgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgdGhlIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZnVuY3Rpb24gaXMgYmVpbmcgZmVkIHRoZSB3cm9uZyBgZmxhZ3NgIHZhbHVlLiBJdCBzZWVtcyB0aGUgY29kZSB3YXMgcGFzc2luZyB0aGUgb3JpZ2luYWwgYGZsYWdzYCB2YXJpYWJsZSwgdXNlZCB3aXRoaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiwgaW5zdGVhZCBvZiB0aGUgaW50ZW5kZWQgYHVzZXJmbGFnc2AsIHdoaWNoIGlzIHBhcnNlZCBkaXJlY3RseSBmcm9tIHRoZSBgVENBX1UzMl9GTEFHU2AgbmV0bGluayBhdHRyaWJ1dGUgd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgKHRjKSBjb25maWd1cmF0aW9uIGRhdGEuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBubywgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYGZsYWdzYCBhcmd1bWVudCB0byBgdTMyX2NoYW5nZWAgb3JpZ2luYXRlcyBmcm9tIHRoZSBjYWxsZXIg4oCTIHR5cGljYWxseSBmdW5jdGlvbnMgbGlrZSBgdGNfbmV3X3RmaWx0ZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlbiB0aGUgcGF0Y2ggc2ltcGx5IGNvcnJlY3RzIHRoZSBhcmd1bWVudCBwYXNzZWQgZnJvbSB0aGF0LCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGUgYnVnIHN0ZW1zIGZyb20gYSBzaW1wbGUsIGJ1dCBjcml0aWNhbCwgdmFyaWFibGUgbWl4LXVwLiBXZSBzaG91bGQgZW5zdXJlIHRoZSBjb3JyZWN0IGB1c2VyZmxhZ3NgIGFyZSBwYXNzZWQgdG8gYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gTm93LCBJJ2xsIHJldmlldyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIGl0c2VsZiB0byBjb25maXJtIHRoZSBpbXBsaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjE0OjEwLjY0Njk4Njg3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczOTExNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInUzMl9yZXBsYWNlX2h3X2tub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz01MzI9c3RhdGljIHZvaWQgdTMyX3JlbW92ZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0NS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU0NjpzdGF0aWMgaW50IHUzMl9yZXBsYWNlX2h3X2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0Ny1cXHRcXHRcXHRcXHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9ODcyPXN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzNy1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkzODpcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy05MzktXFx0XFx0aWYgKGVycikge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMTYzLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE2NDpcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE2NS1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDoxMC44MjA5MDQyMzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyODk3OTExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgaGFyZHdhcmU6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBgdTMyX3JlcGxhY2VfaHdfa25vZGVgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZnVuY3Rpb24uIEp1c3QgdGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0J3MgZGVhbGluZyB3aXRoIGhhcmR3YXJlLCBwb3RlbnRpYWxseSBsb3ctbGV2ZWwgbWVtb3J5IG9wZXJhdGlvbnMsIGFuZCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIDMyLWJpdCB2YWx1ZXMgYW5kIHNvbWUgc29ydCBvZiBcImstbm9kZVwiIGNvbmNlcHQuIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IHdoYXQgdGhpcyBcImstbm9kZVwiIHJlcHJlc2VudHMg4oCTIGEga2VybmVsIGRhdGEgc3RydWN0dXJlPyBBIGhhcmR3YXJlLXNwZWNpZmljIHJlZ2lzdGVyPyBHb3R0YSBzZWUgdGhlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIHBlcmZvcm0gc29tZSBhdG9taWMgcmVwbGFjZW1lbnQgb3IgbW9kaWZpY2F0aW9uIG9wZXJhdGlvbiBvbiBoYXJkd2FyZSBtZW1vcnksIGdpdmVuIHRoZSBcInJlcGxhY2VcIiBhbmQgcG90ZW50aWFsIFwiaHdcIiBpbiB0aGUgbmFtZS4gSXMgaXQgdXNpbmcgaGFyZHdhcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM/IElzIGl0IGRlYWxpbmcgd2l0aCBjYWNoZSBjb2hlcmVuY3kgaXNzdWVzPyBUaGVzZSBhcmUgYWxsIHRoZSBxdWVzdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBzcHJpbmcgdG8gbWluZC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgbWVtb3J5IGJhcnJpZXJzLCBhdG9taWMgaW5zdHJ1Y3Rpb25zLCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24gdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBjb2RlLiBMZXQncyBzdGFydCByZWFkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTQ6MTQuNjQ5ODkzNTIzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3UzMi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHRcXHRjbHNfdTMyLmtub2RlLmhhbmRsZSA9IG4tXFx1MDAzZWhhbmRsZTtcXG4gNTQxOlxcdFxcbiA1NDI6XFx0XFx0dGNfc2V0dXBfY2JfZGVzdHJveShibG9jaywgdHAsIFRDX1NFVFVQX0NMU1UzMiwgXFx1MDAyNmNsc191MzIsIGZhbHNlLFxcbiA1NDM6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuLVxcdTAwM2VmbGFncywgXFx1MDAyNm4tXFx1MDAzZWluX2h3X2NvdW50LCB0cnVlKTtcXG4gNTQ0OlxcdH1cXG4gNTQ1OlxcdFxcbiA1NDY6XFx0c3RhdGljIGludCB1MzJfcmVwbGFjZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuIDU0NzpcXHRcXHRcXHRcXHRcXHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNTQ4OlxcdHtcXG4gNTQ5OlxcdFxcdHN0cnVjdCB0Y191X2hub2RlICpodCA9IHJ0bmxfZGVyZWZlcmVuY2Uobi1cXHUwMDNlaHRfZG93bik7XFxuIDU1MDpcXHRcXHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jayA9IHRwLVxcdTAwM2VjaGFpbi1cXHUwMDNlYmxvY2s7XFxuIDU1MTpcXHRcXHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcXG4gNTUyOlxcdFxcdGJvb2wgc2tpcF9zdyA9IHRjX3NraXBfc3coZmxhZ3MpO1xcbiA1NTM6XFx0XFx0aW50IGVycjtcXG4gNTU0OlxcdFxcbiA1NTU6XFx0XFx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgZmxhZ3MsIGV4dGFjayk7XFxuIDU1NjpcXHRcXHRjbHNfdTMyLmNvbW1hbmQgPSBUQ19DTFNVMzJfUkVQTEFDRV9LTk9ERTtcXG4gNTU3OlxcdFxcdGNsc191MzIua25vZGUuaGFuZGxlID0gbi1cXHUwMDNlaGFuZGxlO1xcbiA1NTg6XFx0XFx0Y2xzX3UzMi5rbm9kZS5mc2hpZnQgPSBuLVxcdTAwM2Vmc2hpZnQ7XFxuIDU1OTpcXHQjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSS1xcbiA1NjA6XFx0XFx0Y2xzX3UzMi5rbm9kZS52YWwgPSBuLVxcdTAwM2V2YWw7XFxuIDU2MTpcXHRcXHRjbHNfdTMyLmtub2RlLm1hc2sgPSBuLVxcdTAwM2VtYXNrO1xcbiA1NjI6XFx0I2Vsc2VcXG4gNTYzOlxcdFxcdGNsc191MzIua25vZGUudmFsID0gMDtcXG4gNTY0OlxcdFxcdGNsc191MzIua25vZGUubWFzayA9IDA7XFxuIDU2NTpcXHQjZW5kaWZcXG4gNTY2OlxcdFxcdGNsc191MzIua25vZGUuc2VsID0gXFx1MDAyNm4tXFx1MDAzZXNlbDtcXG4gNTY3OlxcdFxcdGNsc191MzIua25vZGUucmVzID0gXFx1MDAyNm4tXFx1MDAzZXJlcztcXG4gNTY4OlxcdFxcdGNsc191MzIua25vZGUuZXh0cyA9IFxcdTAwMjZuLVxcdTAwM2VleHRzO1xcbiA1Njk6XFx0XFx0aWYgKG4tXFx1MDAzZWh0X2Rvd24pXFxuIDU3MDpcXHRcXHRcXHRjbHNfdTMyLmtub2RlLmxpbmtfaGFuZGxlID0gaHQtXFx1MDAzZWhhbmRsZTtcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0ZXJyID0gdGNfc2V0dXBfY2JfYWRkKGJsb2NrLCB0cCwgVENfU0VUVVBfQ0xTVTMyLCBcXHUwMDI2Y2xzX3UzMiwgc2tpcF9zdyxcXG4gNTczOlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZuLVxcdTAwM2VmbGFncywgXFx1MDAyNm4tXFx1MDAzZWluX2h3X2NvdW50LCB0cnVlKTtcXG4gNTc0OlxcdFxcdGlmIChlcnIpIHtcXG4gNTc1OlxcdFxcdFxcdHUzMl9yZW1vdmVfaHdfa25vZGUodHAsIG4sIE5VTEwpO1xcbiA1NzY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTc3OlxcdFxcdH1cXG4gNTc4OlxcdFxcbiA1Nzk6XFx0XFx0aWYgKHNraXBfc3cgXFx1MDAyNlxcdTAwMjYgIShuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDQV9DTFNfRkxBR1NfSU5fSFcpKVxcbiA1ODA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU4MTpcXHRcXG4gNTgyOlxcdFxcdHJldHVybiAwO1xcbiA1ODM6XFx0fVxcbiA1ODQ6XFx0XFxuIDU4NTpcXHRzdGF0aWMgdm9pZCB1MzJfY2xlYXJfaG5vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2hub2RlICpodCxcXG4gNTg2OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDU4NzpcXHR7XFxuIDU4ODpcXHRcXHRzdHJ1Y3QgdGNfdV9jb21tb24gKnRwX2MgPSB0cC1cXHUwMDNlZGF0YTtcXG4gNTg5OlxcdFxcdHN0cnVjdCB0Y191X2tub2RlICpuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDoxNC42NTAxMjc4MjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1NTIzOTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgSGFyZHdhcmUgT2ZmbG9hZCBJc3N1ZSBpbiBUcmFmZmljIENvbnRyb2wqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGEgY2xhc3NpYyBhcmd1bWVudCBtaXgtdXAsIGFuZCBpdCdzIHBvdGVudGlhbGx5IGNhdXNpbmcgc29tZSB3b25reSBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIGlzIGdldHRpbmcgdGhlIHdyb25nIHNldCBvZiBmbGFncy4gSW5zdGVhZCBvZiB1c2luZyB0aGUgYHVzZXJmbGFnc2AgZGVyaXZlZCBmcm9tIHRoZSBOZXRsaW5rIGF0dHJpYnV0ZXMsIHRoZSBjb2RlIGlzIHBhc3NpbmcgdGhlIHJhdyBgZmxhZ3NgIGFyZ3VtZW50IGRpcmVjdGx5LCB3aGljaCBpcyBhIGJpZyBuby1uby5cblxuVGhpcyBtaXN0YWtlIGlzIGNhc2NhZGluZywgaW1wYWN0aW5nIGJvdGggYHRjX3NraXBfc3coZmxhZ3MpYCBhbmQgdGhlIGluaXRpYWxpemF0aW9uIHdpdGhpbiBgdGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXHUwMDI2Y2xzX3UzMi5jb21tb24sIHRwLCBmbGFncywgZXh0YWNrKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQncyBhIGxvZ2ljIGJ1Zywgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gVGhlIGRvd25zdHJlYW0gaW1wYWN0cyBpbmNsdWRlIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNvcnJlY3QgaGFyZHdhcmUgb2ZmbG9hZCBkZWNpc2lvbnMgb3IgZXZlbiBhY2NpZGVudGFsbHkgKmZhaWxpbmcqIHRvIHNraXAgc29mdHdhcmUgcHJvY2Vzc2luZyB3aGVuIHdlICp3YW50KiB0by5cblxuVGhlIGBmbGFnc2AgYXJndW1lbnQgaW4gcXVlc3Rpb24gb3JpZ2luYXRlcyBmcm9tIHRoZSBgdGNfbmV3X3RmaWx0ZXJgIGZ1bmN0aW9uLCB3aGljaCBpcyBkZWZpbmVkIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gTm93LCBsZXQncyBnbyBwb2tlIGFyb3VuZCBpbiBgdGNfbmV3X3RmaWx0ZXJgIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZmxhZ3NgIGFjdHVhbGx5IHJlcHJlc2VudHMgYXQgdGhhdCBwb2ludC4gSSdtIGhvcGluZyBJIGNhbiBlYXNpbHkgc2VlIGhvdyB0aGlzIG1pc21hdGNoIGlzIGhhcHBlbmluZy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN0YXRlIGJlZm9yZSB0aGUgZmxhZ3MgYXJlIGFjdHVhbGx5IGFwcGxpZWQuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gdGhhdCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY29ycmVjdCBhbmQgaGVscCBtZSB0cmFjZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdG8gc2VlIGhvdyB0aGlzIGVycm9yIGNhbWUgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDoyMS4zMDUzNzAwNDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MDIyMzI3MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidTMyX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDoyMS42OTU2MDI3NTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3MjUxNDY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGVjb2RpbmcgdGhlIGB0cC1cdTAwM2VvcHMtXHUwMDNlY2hhbmdlYCBDYWxsKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBjcml0aWNhbCBsaW5lOiB0aGUgYHRwLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2VgIGNhbGwuIFRoYXQncyB0aGUgZ2F0ZXdheSwgaXNuJ3QgaXQ/IFRoYXQncyBob3cgdGhpcyBlbnRpcmUgbWVjaGFuaXNtIGlzIHRyaWdnZXJlZC4gSSdtIGFzc3VtaW5nLCBhbmQgSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGlzIG9mIGNvdXJzZSwgdGhhdCAndHAnIGxpa2VseSByZXByZXNlbnRzIGEgaGFuZGxlIG9yIHBvaW50ZXIgdG8gYSAqc29tZXRoaW5nKiDigJMgYSBjb250cm9sIGJsb2NrLCBhIGRhdGEgc3RydWN0dXJlLCBhIGRldmljZSBjb250ZXh0LCBzb21ldGhpbmcgaW4gdGhhdCB2ZWluLiBUaGUgYG9wc2AgbWVtYmVyLCBhaCwgdGhhdCdzIHRoZSBpbnRlcmVzdGluZyBwYXJ0LiBJdCdzIGEgdnRhYmxlLCBhbG1vc3QgY2VydGFpbmx5LiBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIG9iamVjdC1vcmllbnRlZCBvciBmdW5jdGlvbi1wb2ludGVyLWJhc2VkIGltcGxlbWVudGF0aW9uLiAnQ2hhbmdlJyB0aGVuIGlzIGEgbWV0aG9kIG9yIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IHZ0YWJsZS4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGlzICdjaGFuZ2UnIG1ldGhvZCBsaWtlbHkgc2lnbmlmaWVzIG1vZGlmaWNhdGlvbiBvciBhZGFwdGF0aW9uIG9mIHRoZSByZWxldmFudCBvYmplY3Qgb3IgdGhlIHN5c3RlbSB0byB3aGljaCBpdCBpcyB0aWVkLiBUaGUgc3BlY2lmaWMgYWN0aW9uIHdpbGwgYmUgZGVwZW5kZW50IG9uIGhvdyB0aGUgYHRwYCBvYmplY3QgaXMgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgYG9wc2AgaXMgc2V0IHRvLiBUaGlzIGNhbGwgY291bGQgYmUgYSBzaWduYWwgdG8gdXBkYXRlLCByZWNvbmZpZ3VyZSwgb3Igb3RoZXJ3aXNlIG1vZGlmeSBhIGNvcmUgY29tcG9uZW50LiBUaGUgZGV2aWwncyBpbiB0aGUgZGV0YWlsLCBidXQgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIHBpZWNlIG1ha2VzIGxvZ2ljYWwgc2Vuc2UgaW4gYSBkZXNpZ24gc3VjaCBhcyB0aGlzLiBMZXQncyBzZWUgaG93IGB0cGAgYW5kIGBvcHNgIGFyZSBkZWZpbmVkLCB0aGVuIHdl4oCZbGwgdW5wYWNrIHdoYXQg4oCYY2hhbmdl4oCZIGFjdHVhbGx5IGRvZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjE0OjI1Ljk2ODEyMDIxMloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1NjAzODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLVxcdTAwM2VjaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2Nsc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jPTIyMzY9c3RhdGljIGludCB0Y19uZXdfdGZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTI0MjktXFx0XFx0ZmxhZ3MgfD0gVENBX0FDVF9GTEFHU19BVF9JTkdSRVNTX09SX0NMU0FDVDtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjI0MzA6XFx0ZXJyID0gdHAtXFx1MDAzZW9wcy1cXHUwMDNlY2hhbmdlKG5ldCwgc2tiLCB0cCwgY2wsIHQtXFx1MDAzZXRjbV9oYW5kbGUsIHRjYSwgXFx1MDAyNmZoLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjQzMS1cXHRcXHRcXHQgICAgICBmbGFncywgZXh0YWNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTQ6MjYuMDU3Njg1NzIzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjQ0NTgzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIGFuZCwgYXMgSSB1bmRlcnN0YW5kIGl0LCB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBhIHNpbXBsZSBsb2dpYyBlcnJvciBpbiBgdTMyX2NoYW5nZWAuIFNwZWNpZmljYWxseSwgaXQncyBhIG1peC11cCBpbiBob3cgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQuIFRoZSBgZmxhZ3NgIGFyZ3VtZW50IGluIGB0Y19uZXdfdGZpbHRlcmAgaXMganVzdCB0aGF0IOKAkyBhIHNldCBvZiBmbGFncy4gVGhlIHBhdGNoIHNpbXBseSBjb3JyZWN0cyB0aGUgdXNlIG9mIGFuIGluY29ycmVjdCB2YXJpYWJsZSB3aXRoaW4gdGhlIHUzMiBjb2RlLiBUaGUgbG9naWMgYnVnIGFyaXNlcyBiZWNhdXNlIHRoZSBmdW5jdGlvbiBgdTMyX2NoYW5nZWAgd2FzIGFjY2lkZW50YWxseSB1c2luZyB0aGUgYGZsYWdzYCBhcmd1bWVudCBtZWFudCBmb3IgdGhlIG92ZXJhbGwgZmlsdGVyIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHJldHJpZXZlZCBmcm9tIHRoZSBOZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuXG5cblRoaXMgbWlzZGlyZWN0aW9uIHJlc3VsdHMgaW4gYHUzMl9yZXBsYWNlX2h3X2tub2RlYCBnZXR0aW5nIHRoZSB3cm9uZyBzZXQgb2YgZmxhZ3MuIFRoZSBpbXBsaWNhdGlvbiBvZiB0aGF0IGlzIHRoYXQgaGFyZHdhcmUgb2ZmbG9hZCBiZWhhdmlvciBjb3VsZCBiZSBhZmZlY3RlZC4gRm9yIGluc3RhbmNlLCB0aGUgZnVuY3Rpb24gbWlnaHQgaW5jb3JyZWN0bHkgZXZhbHVhdGUgYHRjX3NraXBfc3coZmxhZ3MpYC5cblxuSG93ZXZlciwgdGhlIG5hdHVyZSBvZiB0aGlzIGJ1ZyBpcyBwdXJlbHkgbG9naWNhbC4gSXQgZGVhbHMgd2l0aCBpbmNvcnJlY3QgZmxhZyB1c2FnZSwgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgbm8gaW5mb3JtYXRpb24gbGVha3MgYXQgcGxheS4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgYnVnLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBzaG91bGQgYmUgbW9yZSB0aGFuIGFkZXF1YXRlIHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBhcmlzaW5nIGZyb20gdGhpcy4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMgZml4LCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBvciBldmVuIHJlbGV2YW50LCBmb3IgaWRlbnRpZnlpbmcgYW55IGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTI1LCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDozMy44MjIxNDY4M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHUzMl9jaGFuZ2VgIHdoZXJlIHRoZSBgZmxhZ3NgIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gd2FzIGluY29ycmVjdGx5IHVzZWQgaW5zdGVhZCBvZiB0aGUgYHVzZXJmbGFnc2AgcGFyc2VkIGZyb20gdGhlIG5ldGxpbmsgYXR0cmlidXRlcyAoYFRDQV9VMzJfRkxBR1NgKS4gVGhpcyBjYXVzZWQgYHUzMl9yZXBsYWNlX2h3X2tub2RlYCB0byByZWNlaXZlIHRoZSB3cm9uZyBmbGFncywgcG90ZW50aWFsbHkgYWZmZWN0aW5nIGhhcmR3YXJlIG9mZmxvYWQgYmVoYXZpb3IgKGUuZy4sIGluY29ycmVjdGx5IGV2YWx1YXRpbmcgYHRjX3NraXBfc3coZmxhZ3MpYCkuIFRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIGhhcmR3YXJlIG9mZmxvYWQgZmxhZ3MgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBidXQgdGhpcyBzcGVjaWZpYyBidWcgaXMganVzdCBpbmNvcnJlY3QgZmxhZyB1c2FnZS4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdTMyX2NoYW5nZWAgd2hlcmUgdGhlIGBmbGFnc2AgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgdXNlcmZsYWdzYCBwYXJzZWQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIChgVENBX1UzMl9GTEFHU2ApLiBUaGlzIGNhdXNlZCBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIHRvIHJlY2VpdmUgdGhlIHdyb25nIGZsYWdzLCBwb3RlbnRpYWxseSBhZmZlY3RpbmcgaGFyZHdhcmUgb2ZmbG9hZCBiZWhhdmlvciAoZS5nLiwgaW5jb3JyZWN0bHkgZXZhbHVhdGluZyBgdGNfc2tpcF9zdyhmbGFncylgKS4gVGhpcyBpcyBhIHB1cmUgbG9naWMgYnVnIHJlbGF0ZWQgdG8gaGFyZHdhcmUgb2ZmbG9hZCBmbGFncyBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIGJ1dCB0aGlzIHNwZWNpZmljIGJ1ZyBpcyBqdXN0IGluY29ycmVjdCBmbGFnIHVzYWdlLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxpkjd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 12:52:57 +0000 UTC FinishedAt: 2026-08-07 13:32:45 +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": "c7a127371ce5dc3d073cc69ba70145c2c420d8e2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_U32" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c7a127371ce5dc3d073cc69ba70145c2c420d8e2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_U32" ], "series_id": "2eb7a5b2-44dd-46b7-b64e-729da103ee09" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "u32_change" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB1MzJfY2hhbmdlYCB3aGVyZSB0aGUgYGZsYWdzYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHBhcnNlZCBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuIFRoaXMgY2F1c2VkIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgdG8gcmVjZWl2ZSB0aGUgd3JvbmcgZmxhZ3MsIHBvdGVudGlhbGx5IGFmZmVjdGluZyBoYXJkd2FyZSBvZmZsb2FkIGJlaGF2aW9yIChlLmcuLCBpbmNvcnJlY3RseSBldmFsdWF0aW5nIGB0Y19za2lwX3N3KGZsYWdzKWApLiBUaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgYnV0IHRoaXMgc3BlY2lmaWMgYnVnIGlzIGp1c3QgaW5jb3JyZWN0IGZsYWcgdXNhZ2UuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1MzJfY2hhbmdlYCBpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllciAodGMgZmlsdGVyKSB0byB1c2UgYHVzZXJmbGFnc2AgaW5zdGVhZCBvZiBgZmxhZ3NgIHdoZW4gY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBmaWx0ZXIgYWRkL2NoYW5nZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyY2JkNjY4YTQ2NDFhOTUyYTk4NTc1MjRmNzZiYmJhOWU4MWQyZTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMzoxMzoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuaW5kZXggOGYzMGNjODIxODFkOS4uZGM2ZTQ1NWU2NGVjNyAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcbkBAIC05MzUsNyAmIzQzOzkzNSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gXHRcdHUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7XG4gXG4tXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuJiM0MztcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpO1xuIFxuQEAgLTExNjEsNyAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0XHRzdHJ1Y3QgdGNfdV9rbm9kZSBfX3JjdSAqKmlucztcbiBcdFx0c3RydWN0IHRjX3Vfa25vZGUgKnBpbnM7XG4gXG4tXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCBmbGFncywgZXh0YWNrKTtcbiYjNDM7XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBlcnJ1bmJpbmQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdTMyX2NoYW5nZWAgaW4gdGhlIGBjbHNfdTMyYCB0cmFmZmljIGNsYXNzaWZpZXIgKHRjIGZpbHRlcikgdG8gdXNlIGB1c2VyZmxhZ3NgIGluc3RlYWQgb2YgYGZsYWdzYCB3aGVuIGNhbGxpbmcgYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgZmlsdGVyIGFkZC9jaGFuZ2UpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmNiZDY2OGE0NjQxYTk1MmE5ODU3NTI0Zjc2YmJiYTllODFkMmU2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTM6MTM6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuYwppbmRleCA4ZjMwY2M4MjE4MWQ5Li5kYzZlNDU1ZTY0ZWM3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKQEAgLTkzNSw3ICYjNDM7OTM1LDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAogCQl1MzJfYmluZF9maWx0ZXIodHAsIG5ldywgYmFzZSwgdGIpOwogCi0JCWVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spOwomIzQzOwkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spOwogCQlpZiAoZXJyKSB7CiAJCQl1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbmV3LCB0Yik7CiAKQEAgLTExNjEsNyAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAogCQlzdHJ1Y3QgdGNfdV9rbm9kZSBfX3JjdSAqKmluczsKIAkJc3RydWN0IHRjX3Vfa25vZGUgKnBpbnM7CiAKLQkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIGZsYWdzLCBleHRhY2spOwomIzQzOwkJZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIHVzZXJmbGFncywgZXh0YWNrKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJydW5iaW5kOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBjbHNfdTMyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2Nsc191MzIuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3JlIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllciAodGMgZmlsdGVyKS4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBtb2RpZmllZCB0aGUgY2FsbCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLgoKUHJldmlvdXNseSwgYHUzMl9jaGFuZ2VgIHdhcyBjYWxsaW5nIGB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCBmbGFncywgZXh0YWNrKWAuIE5vdywgdGhlIGNhbGwgaXMgYHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKWAuIFRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGUgcGFyYW1ldGVyIGJlaW5nIHBhc3NlZDogYGZsYWdzYCBpcyBiZWluZyByZXBsYWNlZCBieSBgdXNlcmZsYWdzYC4gQ2xlYXJseSwgdGhlIGludGVudGlvbiBoZXJlIGlzIHRvIHVzZSBhIGRpZmZlcmVudCBzZXQgb2YgZmxhZ3MsIHByZXN1bWFibHkgdXNlci1wcm92aWRlZCBmbGFncy4KCkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiBhbmQgc2VlIGhvdyB0aGVzZSBgdXNlcmZsYWdzYCBhcmUgYmVpbmcgaGFuZGxlZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggYXV0aG9yIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoIGhlcmUgYW5kIGhvdyB0aGlzIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBgY2xzX3UzMmAgY2xhc3NpZmllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1MzJfY2hhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jPTgyMT1zdGF0aWMgc3RydWN0IHRjX3Vfa25vZGUgKnUzMl9pbml0X2tub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy04NzEtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjg3MjpzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L3NjaGVkL2Nsc191MzIuYy04NzMtXHRcdCAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDU4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2My1cdC5nZXRcdFx0PVx0dTMyX2dldCxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ2NDpcdC5jaGFuZ2VcdFx0PVx0dTMyX2NoYW5nZSxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2NS1cdC5kZWxldGVcdFx0PVx0dTMyX2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKlByaW9yaXRpemluZyBGdXp6aW5nIFRhcmdldHMgaW4gY2xzX3UzMioqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBpcyB0aGUgY3J1Y2lhbCBgLmNoYW5nZWAgY2FsbGJhY2sgd2l0aGluIGBjbHNfdTMyX29wc2AuIEdpdmVuIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3RydWN0dXJlLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gV2UgY2FuJiMzOTt0IGxldCB0aGlzIHNsaXAgdGhyb3VnaCBvdXIgZmluZ2Vycy4gVGhlIGAuY2hhbmdlYCBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIGFsd2F5cyBwcm9uZSB0byBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTGV0JiMzOTtzIGltbWVkaWF0ZWx5IGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGNsc191MzIuY2AgYW5kIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RseSBzZXQgdXAgZm9yIGl0LiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBvdXIgZnV6emluZyBoYXJuZXNzIHdpbGwgZWZmZWN0aXZlbHkgcmVhY2ggdGhpcyBjb2RlIHBhdGggYW5kIHRoYXQgd2UgaGF2ZSB0aGUgcHJvcGVyIGluc3RydW1lbnRhdGlvbiBpbiBwbGFjZSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gR290dGEgZW5zdXJlIGNvdmVyYWdlIGlzIHRob3JvdWdoIGFuZCB0aGUgZmVlZGJhY2sgbG9vcCBpcyB0aWdodC4gVGhpcyBsb29rcyBsaWtlIGxvdy1oYW5naW5nIGZydWl0IHdpdGggaGlnaCBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nsc191MzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01MTY9Y29uZmlnIE5FVF9DTFNfVTMyXG4tLVxubmV0L3NjaGVkL0tjb25maWctNTIzLVx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG5uZXQvc2NoZWQvS2NvbmZpZzo1MjQ6XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfdTMyLlxubmV0L3NjaGVkL0tjb25maWctNTI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCYjMzk7cyBhIGRpcmVjdCBleHByZXNzaW9uIG9mIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5FVF9DTFNfVTMyIGluIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgYE5FVF9DTFNfVTMyYC4gSXQmIzM5O3MgcHJldHR5IGZ1bmRhbWVudGFsLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgdG8gYG5ldC9zY2hlZC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG5ldHdvcmtpbmcgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBVMzJgIGlzIGEga2V5IGNvbXBvbmVudCBpbiBhIGxvdCBvZiB0cmFmZmljIGNvbnRyb2wgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBpdCYjMzk7cyBzaXR1YXRlZCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCBiZWhhdmlvcnMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBjbGFyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIGludGVncmF0aW9uIHdpdGggdGhlIG90aGVyIG5ldHdvcmtpbmcgY29tcG9uZW50cyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19VMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGU6IE5FVF9DTFNfVTMyIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYE5FVF9DTFNfVTMyYCBjbGFzc2lmaWNhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBrbm93aW5nICp3aGF0KiByZWxpZXMgb24gaXQsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSAqbmF0dXJlKiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMuIEFyZSB3ZSB0YWxraW5nIGNvcmUga2VybmVsIG1vZHVsZXMsIHVzZXItc3BhY2UgdXRpbGl0aWVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIG1hdHRlcnMgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGNhbGxzIG9yIGluZGlyZWN0IHVzYWdlIHRocm91Z2ggbW9yZSBjb21wbGV4IHN0cnVjdHVyZXM/IEtub3dpbmcgdGhpcyBpcyBnb2luZyB0byBncmVhdGx5IGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgYW5hbHlzaXMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNvbm5lY3Rpb25zIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHdlYWsgcG9pbnRzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgcmVxdWlyZXMgYSBncmFudWxhciB2aWV3IOKAkyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMsIG5vdCBqdXN0IHRoZSBjb2RlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgYSBkZXBlbmRlbmN5IGdyYXBoIHZpc3VhbGl6YXRpb24gdG9vbCByZWFkeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTE2Olx0Y29uZmlnIE5FVF9DTFNfVTMyXG4gNTE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuIDUxODpcdFx0c2VsZWN0IE5FVF9DTFNcbiA1MTk6XHRcdGhlbHBcbiA1MjA6XHRcdCAgU2F5IFkgaGVyZSB0byBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgdXNpbmcgYSB1bml2ZXJzYWxcbiA1MjE6XHRcdCAgMzJiaXQgcGllY2VzIGJhc2VkIGNvbXBhcmlzb24gc2NoZW1lLlxuIDUyMjpcdFxuIDUyMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTI0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfdTMyLlxuIDUyNTpcdFxuIDUyNjpcdGNvbmZpZyBDTFNfVTMyX1BFUkZcbiA1Mjc6XHRcdGJvb2wgXCYjMzQ7UGVyZm9ybWFuY2UgY291bnRlcnMgc3VwcG9ydFwmIzM0O1xuIDUyODpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX1UzMlxuIDUyOTpcdFx0aGVscFxuIDUzMDpcdFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgdTMyIGdhdGhlciBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgdXNlZnVsIGZvclxuIDUzMTpcdFx0ICBmaW5lIHR1bmluZyB1MzIgY2xhc3NpZmllcnMuXG4gNTMyOlx0XG4gNTMzOlx0Y29uZmlnIENMU19VMzJfTUFSS1xuIDUzNDpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbWFya3Mgc3VwcG9ydFwmIzM0O1xuIDUzNTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX1UzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTIyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKk5ldHdvcmsgQ29uZmlndXJhdGlvbiBDb250ZXh0KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbmV0d29yayBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHksIHRoZSBgTkVUX0NMU19VMzJgIHNldHRpbmcuIFRoYXQmIzM5O3MgdGhlIGtleSBpZGVudGlmaWVyIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHRoaW5nIGNoYW5nZXMsIGhvdyBpdCYjMzk7cyBoYW5kbGVkLiBUaGUgY29yZSBmdW5jdGlvbiB0byBleGFtaW5lIGlzIG9idmlvdXNseSBgdTMyX2NoYW5nZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBhY3Rpb24gbGlrZWx5IHJlc2lkZXMsIHJpZ2h0PyBJdCYjMzk7cyB0aGUgbWVjaGFuaXNtIGZvciBtb2RpZmljYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMsIG91dHB1dHMsIHNpZGUgZWZmZWN0cywgZXZlcnl0aGluZy4KCkJ1dCB3YWl0LCB0aGVyZSYjMzk7cyBhbm90aGVyIG9uZSBtZW50aW9uZWQ6IGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIFRoYXTigJlzIGFub3RoZXIgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkgY2FuJiMzOTt0IGRpc21pc3MgaXQuIFRoaXMgc2VlbXMgdG8gYmUgYXQgYSBsb3dlciBsZXZlbCAtLSBoYXJkd2FyZSBrZXkgbm9kZSByZXBsYWNlbWVudCwgbWF5YmU/IEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCBmaXRzIHdpdGggdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbi4gSXMgaXQgY2FsbGVkIGJ5IGl0PyBEb2VzIGl0IHByb3ZpZGUgc29tZSBhbHRlcm5hdGl2ZSBwYXRod2F5PyBBcmUgdGhlcmUgc3BlY2lmaWMgc2l0dWF0aW9ucyB3aGVyZSB0aGUgaGFyZHdhcmUgbm9kZSByZXBsYWNlbWVudCBpcyB0aGUgKnByZWZlcnJlZCogbWV0aG9kPyBUaGVzZSBhcmUgaW1wb3J0YW50IHF1ZXN0aW9ucy4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCBpcyBjcnVjaWFsIHRvIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gY29uc2lkZXIgYm90aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTMyX3JlcGxhY2VfaHdfa25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmM9NTMyPXN0YXRpYyB2b2lkIHUzMl9yZW1vdmVfaHdfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtNTQ1LVxubmV0L3NjaGVkL2Nsc191MzIuYzo1NDY6c3RhdGljIGludCB1MzJfcmVwbGFjZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0Ny1cdFx0XHRcdHUzMiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9ODcyPXN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy05MzctXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkzODpcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy05MzktXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNjMtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjExNjQ6XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTExNjUtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdTMyYCBDbGFzc2lmaWVyIEFQSSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdTMyYCBjbGFzc2lmaWVyIGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBleHBvc2UgdGhlIGVudHJ5IHBvaW50IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyBvbiBgdTMyX2NoYW5nZWAsIGJ1dCB0aGF0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnIGFjY29yZGluZyB0byB0aGUgcHJvamVjdCBndWlkZWxpbmVzLiBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIHllcCwgYHN0YXRpYyBpbnQgdTMyX2NoYW5nZSguLi4pYC4gSG1tLCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhcmUgaW1wb3J0YW50IGZvciB0cmFjaW5nIGFuZCBleHRlcm5hbCB1c2UuCgpTbywgYHUzMl9jaGFuZ2VgIGlzIHN0YXRpYywgKmhvd2V2ZXIqIGl0JiMzOTtzIGFzc2lnbmVkIGFzIHRoZSBgLmNoYW5nZWAgb3BlcmF0aW9uIGluIGBjbHNfdTMyX29wc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJ1dCBub3QgaWRlYWwuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGVuZHMgdXAgY2FsbGluZyBgdTMyX2NoYW5nZWA/IEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IGluZGlyZWN0bHkgZXhwb3NlcyBpdCBhcyBhbiBleHRlcm5hbCBBUEkuCgpBaGEhIGB0Y19uZXdfdGZpbHRlcmAgaW4gYG5ldC9zY2hlZC9jbHNfYXBpLmNgIGxvb2tzIHByb21pc2luZy4gSXQgc2VlbXMgdG8gY2FsbCBgdHAtJmd0O29wcy0mZ3Q7Y2hhbmdlKC4uLilgLCB3aGljaCwgaW4gdGhpcyBjYXNlLCB3b3VsZCBiZSBgdTMyX2NoYW5nZWAuIFRoYXQmIzM5O3MgcHJvYmFibHkgdGhlIGtleS4gSSBzaG91bGQgaW52ZXN0aWdhdGUgYHRjX25ld190ZmlsdGVyYCBtb3JlIGNsb3NlbHkuIEkgYmVsaWV2ZSB0aGlzIGlzIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmM9MjIzMT1zdGF0aWMgYm9vbCBpc19pbmdyZXNzX29yX2Nsc2FjdChzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaywgc3RydWN0IFFkaXNjICpxKVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjIzNS1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MjIzNjpzdGF0aWMgaW50IHRjX25ld190ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjIzNy1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQxMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2ZpbHRlcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L3NjaGVkL2Nsc19hcGkuYzo0MTA2Olx0ey5tc2d0eXBlID0gUlRNX05FV1RGSUxURVIsIC5kb2l0ID0gdGNfbmV3X3RmaWx0ZXIsXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQxMDctXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjA5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVHJhZmZpYyBDb250cm9sIEZpbHRlciBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgdGNfbmV3X3RmaWx0ZXJgIGlzIGFsc28gZGVjbGFyZWQgYXMgc3RhdGljLiBIbW0sIGJ1dCB3YWl0LCBJIHJlbWVtYmVyIHRoYXQgYHRjX25ld190ZmlsdGVyYCBpcyByZWdpc3RlcmVkIGFzIGFuIHJ0bmwgbWVzc2FnZSBoYW5kbGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBhbmQgaXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgdGhlIGV4dGVybmFsIEFQSS4gTGV0IG1lIHNlZSwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljPwoKSWYgYHUzMl9jaGFuZ2VgIGlzIHN0YXRpYyBidXQgKm5vdCogaW5saW5lZCwgdGhhdCBjb3VsZCBiZSB1c2VmdWwsIHNpbmNlIGl0ICptaWdodCogc3RpbGwgaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbC4gQWgsIGJ1dCBgdGNfbmV3X3RmaWx0ZXJgIGlzIGEgc29saWQgZW50cnkgcG9pbnQsIGFuZCB0aGF0IHNlZW1zIHByZXR0eSBzYWZlLgoKUmlnaHQsIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoLCBiZWluZyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4pIEFoYSEgYHUzMl9jaGFuZ2VgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyICpjYW4mIzM5O3QqIGlubGluZSBpdCwgc28gaXQgd2lsbCBkZWZpbml0ZWx5IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhhdCYjMzk7cyBnb29kIHRvIGxpc3QhIFNvIGB1MzJfY2hhbmdlYCBpcyBwZXJmZWN0bHkgZmluZSBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgd2UmIzM5O3JlIG9ubHkgZ29pbmcgdG8gcmVxdWlyZSBtaW5pbWFsIGNvbmZpZyBvcHRpb25zLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBJIGJlbGlldmUgYE5FVF9DTFNfVTMyYCBpcyBzdWZmaWNpZW50LiBCZXR0ZXIgdG8gYmUgc3VyZTsgbGV0IG1lIGFsc28gY2hlY2sgYE5FVF9DTFNgIGFuZCBgTkVUX1NDSEVEYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTQ3OT1jb21tZW50IFwmIzM0O0NsYXNzaWZpY2F0aW9uXCYjMzQ7XG5uZXQvc2NoZWQvS2NvbmZpZy00ODAtXG5uZXQvc2NoZWQvS2NvbmZpZzo0ODE6Y29uZmlnIE5FVF9DTFNcbm5ldC9zY2hlZC9LY29uZmlnLTQ4Mi1cdGJvb2xcbm5ldC9zY2hlZC9LY29uZmlnLTQ4My1cbm5ldC9zY2hlZC9LY29uZmlnOjQ4NDpjb25maWcgTkVUX0NMU19CQVNJQ1xubmV0L3NjaGVkL0tjb25maWctNDg1LVx0dHJpc3RhdGUgXCYjMzQ7RWxlbWVudGFyeSBjbGFzc2lmaWNhdGlvbiAoQkFTSUMpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNDkzLVxubmV0L3NjaGVkL0tjb25maWc6NDk0OmNvbmZpZyBORVRfQ0xTX1JPVVRFNFxubmV0L3NjaGVkL0tjb25maWctNDk1LVx0dHJpc3RhdGUgXCYjMzQ7Um91dGluZyBkZWNpc2lvbiAoUk9VVEUpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNTA1LVxubmV0L3NjaGVkL0tjb25maWc6NTA2OmNvbmZpZyBORVRfQ0xTX0ZXXG5uZXQvc2NoZWQvS2NvbmZpZy01MDctXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbWFyayAoRlcpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNTE1LVxubmV0L3NjaGVkL0tjb25maWc6NTE2OmNvbmZpZyBORVRfQ0xTX1UzMlxubmV0L3NjaGVkL0tjb25maWctNTE3LVx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz01MzM9Y29uZmlnIENMU19VMzJfTUFSS1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTUzOC1cbm5ldC9zY2hlZC9LY29uZmlnOjUzOTpjb25maWcgTkVUX0NMU19GTE9XXG5uZXQvc2NoZWQvS2NvbmZpZy01NDAtXHR0cmlzdGF0ZSBcJiMzNDtGbG93IGNsYXNzaWZpZXJcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01NDktXG5uZXQvc2NoZWQvS2NvbmZpZzo1NTA6Y29uZmlnIE5FVF9DTFNfQ0dST1VQXG5uZXQvc2NoZWQvS2NvbmZpZy01NTEtXHR0cmlzdGF0ZSBcJiMzNDtDb250cm9sIEdyb3VwIENsYXNzaWZpZXJcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01NjEtXG5uZXQvc2NoZWQvS2NvbmZpZzo1NjI6Y29uZmlnIE5FVF9DTFNfQlBGXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXHR0cmlzdGF0ZSBcJiMzNDtCUEYtYmFzZWQgY2xhc3NpZmllclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU3MS1cbm5ldC9zY2hlZC9LY29uZmlnOjU3Mjpjb25maWcgTkVUX0NMU19GTE9XRVJcbm5ldC9zY2hlZC9LY29uZmlnLTU3My1cdHRyaXN0YXRlIFwmIzM0O0Zsb3dlciBjbGFzc2lmaWVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL0tjb25maWctNTgxLVxubmV0L3NjaGVkL0tjb25maWc6NTgyOmNvbmZpZyBORVRfQ0xTX01BVENIQUxMXG5uZXQvc2NoZWQvS2NvbmZpZy01ODMtXHR0cmlzdGF0ZSBcJiMzNDtNYXRjaC1hbGwgY2xhc3NpZmllclwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTY5MD1jb25maWcgTkVUX0VNQVRDSF9JUFRcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDI6Y29uZmlnIE5FVF9DTFNfQUNUXG5uZXQvc2NoZWQvS2NvbmZpZy03MDMtXHRib29sIFwmIzM0O0FjdGlvbnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg0MQoJCQkJCQkJb3V0cHV0OiAxMjQKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVMzIgQ2xhc3NpZmllciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBjaGFuZ2UgaGVyZSBjZW50ZXJzIGFyb3VuZCBgTkVUX0NMU19VMzJgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlnIEkgbmVlZCB0byBsb29rIGF0LiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gYWRkIGBORVRfQ0xTX1UzMmAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBlbnN1cmluZyBpdCYjMzk7cyBwcm9wZXJseSBjb25zaWRlcmVkIGR1cmluZyB0aGlzIHJldmlldy4KCk5vdywgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQgaXMgYHUzMl9jaGFuZ2VgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgcXVpY2tseS4uLiBpcyBgdTMyX2NoYW5nZWAgKnN0YXRpYyogYnV0ICpub3QqIGlubGluZWQ/IFJpZ2h0LCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgY2xzX3UzMl9vcHMuY2hhbmdlYCwgd2hpY2ggbWVhbnMgaXTigJlzIGJlaW5nIHVzZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhlcmVmb3JlLCB0aGUgY29tcGlsZXIgKmNhbiYjMzk7dCogaW5saW5lIGl0LiBHb29kLCB0aGF0IGNvbmZpcm1zIGl0LiBJJiMzOTtsbCBuZWVkIHRvIGFkZCBgdTMyX2NoYW5nZWAgdG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGVuc3VyaW5nIGl0IHJlbWFpbnMgdmlzaWJsZSBmb3IgZGVlcGVyIGFuYWx5c2lzLgoKVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllci4gU3BlY2lmaWNhbGx5LCB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHV0aWxpemUgYHVzZXJmbGFnc2AgaW5zdGVhZCBvZiBgZmxhZ3NgIHdoZW4gY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljLCBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgYHRjIGZpbHRlciBhZGQvY2hhbmdlYCBvcGVyYXRpb25zLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGluIHRoZSBjcml0aWNhbCBwYXRoLgoKQWxyaWdodCwgd2l0aCBhbGwgdGhhdCBjb25maXJtZWQsIEkmIzM5O20gaGFwcHkgd2l0aCBteSBhc3Nlc3NtZW50LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0NMU19VMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1MzJfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB1MzJfY2hhbmdlYCBpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllciAodGMgZmlsdGVyKSB0byB1c2UgYHVzZXJmbGFnc2AgaW5zdGVhZCBvZiBgZmxhZ3NgIHdoZW4gY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBmaWx0ZXIgYWRkL2NoYW5nZSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfVTMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dTMyX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdTMyX2NoYW5nZWAgaW4gdGhlIGBjbHNfdTMyYCB0cmFmZmljIGNsYXNzaWZpZXIgKHRjIGZpbHRlcikgdG8gdXNlIGB1c2VyZmxhZ3NgIGluc3RlYWQgb2YgYGZsYWdzYCB3aGVuIGNhbGxpbmcgYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgZmlsdGVyIGFkZC9jaGFuZ2UpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB1MzJfY2hhbmdlYCB3aGVyZSB0aGUgYGZsYWdzYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHBhcnNlZCBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuIFRoaXMgY2F1c2VkIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgdG8gcmVjZWl2ZSB0aGUgd3JvbmcgZmxhZ3MsIHBvdGVudGlhbGx5IGFmZmVjdGluZyBoYXJkd2FyZSBvZmZsb2FkIGJlaGF2aW9yIChlLmcuLCBpbmNvcnJlY3RseSBldmFsdWF0aW5nIGB0Y19za2lwX3N3KGZsYWdzKWApLiBUaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgYnV0IHRoaXMgc3BlY2lmaWMgYnVnIGlzIGp1c3QgaW5jb3JyZWN0IGZsYWcgdXNhZ2UuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJjYmQ2NjhhNDY0MWE5NTJhOTg1NzUyNGY3NmJiYmE5ZTgxZDJlNjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEzOjEzOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKaW5kZXggOGYzMGNjODIxODFkOS4uZGM2ZTQ1NWU2NGVjNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCkBAIC05MzUsNyAmIzQzOzkzNSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAKIAkJdTMyX2JpbmRfZmlsdGVyKHRwLCBuZXcsIGJhc2UsIHRiKTsKIAotCQllcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCBmbGFncywgZXh0YWNrKTsKJiM0MzsJCWVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKTsKIAkJaWYgKGVycikgewogCQkJdTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpOwogCkBAIC0xMTYxLDcgJiM0MzsxMTYxLDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAkJc3RydWN0IHRjX3Vfa25vZGUgX19yY3UgKippbnM7CiAJCXN0cnVjdCB0Y191X2tub2RlICpwaW5zOwogCi0JCWVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCBmbGFncywgZXh0YWNrKTsKJiM0MzsJCWVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycnVuYmluZDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGVjaG5pY2FsIHNuaXBwZXQsIGV4cHJlc3NlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgdTMyIENsYXNzaWZpZXIgQ29kZSoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgaG9taW5nIGluIG9uIGBuZXQvc2NoZWQvY2xzX3UzMi5jYC4gVGhhdCB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBVMzIgY2xhc3NpZmllciwgd2hpY2ggSSBrbm93IGlzIGEgY29yZSBjb21wb25lbnQgb2YgdHJhZmZpYyBjb250cm9sIGZvciBJUCBwYWNrZXRzLiBHb29kLCBmYW1pbGlhciB0ZXJyaXRvcnkuCgpUaGUgbWVhdCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCB0aGUgZnVuY3Rpb24gYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gIFNwZWNpZmljYWxseSwgdGhlIHNpZ25hdHVyZSBpcyBzaGlmdGluZyBmcm9tIHVzaW5nIGBmbGFnc2AgdG8gdXNpbmcgYHVzZXJmbGFnc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhvc2UgZmxhZyB2YXJpYWJsZXMgcmVwcmVzZW50IGFuZCB3aHkgdGhlIGNoYW5nZSB3YXMgbWFkZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdTMyX2NoYW5nZWAgZG9lcy4gTXkgc3VzcGljaW9uIGlzIHRoYXQgYHVzZXJmbGFnc2AgbWlnaHQgcmVsYXRlIHRvIHVzZXItc3BhY2UgaW5wdXQvY29udHJvbCB3aGlsZSBgZmxhZ3NgIHJlbGF0ZSB0byBpbnRlcm5hbCBrZXJuZWwgd29ya2luZ3MuIFByb2JhYmx5IHNvbWUga2luZCBvZiBwYXJhbWV0ZXIgaGFuZGxpbmcgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBhcmUgdXNlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBjbGFyaWZ5IHdoYXQga2luZCBvZiBpbXBhY3QgdGhpcyBjaGFuZ2Ugd2lsbCBtYWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1MzJfY2hhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jPTgyMT1zdGF0aWMgc3RydWN0IHRjX3Vfa25vZGUgKnUzMl9pbml0X2tub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy04NzEtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjg3MjpzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L3NjaGVkL2Nsc191MzIuYy04NzMtXHRcdCAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDU4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2My1cdC5nZXRcdFx0PVx0dTMyX2dldCxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ2NDpcdC5jaGFuZ2VcdFx0PVx0dTMyX2NoYW5nZSxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2NS1cdC5kZWxldGVcdFx0PVx0dTMyX2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc5NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGNsc191MzJgJiMzOTtzIGB1MzJfY2hhbmdlYCBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9zY2hlZC9jbHNfdTMyLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVTMyIGNsYXNzaWZpZXIgaXMgdXBkYXRlZCwgY3JlYXRlZCwgb3IgZGVsZXRlZCBiYXNlZCBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGlzIGNvcmUgcm91dGluZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGZsb3cgLSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLCB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIHNlZSBob3cgaXQgYWxsb2NhdGVzIGFuZCBkZWFsbG9jYXRlcyBtZW1vcnksIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdG8gbG9vayBvdXQgZm9yLiBTaW5jZSB0aGlzIGlzIGEgY3JpdGljYWwgcGFydCBvZiB0cmFmZmljIGNsYXNzaWZpY2F0aW9uIGFuZCBxdWV1aW5nIGRpc2NpcGxpbmUgbWFuYWdlbWVudCwgdGhlIGRldmlsIHdpbGwgYmUgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZC4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG9zc2libGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGVzcGVjaWFsbHkgaW4gaGlnaC1sb2FkIHNjZW5hcmlvcy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGZpbHRlciBrZXlzIGFuZCBtYXNrcyBhcmUgcGFyc2VkIGFuZCB2YWxpZGF0ZWQsIGFuZCBob3cgdGhlc2UgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgZnJvbSB0aGUgdXNlci1zcGFjZSByZXByZXNlbnRhdGlvbiB0byB0aGUga2VybmVsLXNwYWNlLiBUaGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGluZ3Jlc3MvZWdyZXNzIGRpcmVjdGlvbnMgYW5kIHRoZSBuZXR3b3JrIHN0YWNrIGluIGdlbmVyYWwgd2lsbCBiZSBjcml0aWNhbCBhcyB3ZWxsLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBrZXJuZWwmIzM5O3MgdHJhZmZpYyBjb250cm9sIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0fVxuIDg3MTpcdFxuIDg3MjpcdHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gODczOlx0XHRcdCAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXG4gODc0Olx0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0Y2EsIHZvaWQgKiphcmcsIHUzMiBmbGFncyxcbiA4NzU6XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDg3NjpcdHtcbiA4Nzc6XHRcdHN0cnVjdCB0Y191X2NvbW1vbiAqdHBfYyA9IHRwLVx1MDAzZWRhdGE7XG4gODc4Olx0XHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHQ7XG4gODc5Olx0XHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbjtcbiA4ODA6XHRcdHN0cnVjdCB0Y191MzJfc2VsICpzO1xuIDg4MTpcdFx0c3RydWN0IG5sYXR0ciAqb3B0ID0gdGNhW1RDQV9PUFRJT05TXTtcbiA4ODI6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9VMzJfTUFYICYjNDM7IDFdO1xuIDg4MzpcdFx0dTMyIGh0aWQsIHVzZXJmbGFncyA9IDA7XG4gODg0Olx0XHRzaXplX3Qgc2VsX3NpemU7XG4gODg1Olx0XHRpbnQgZXJyO1xuIDg4NjpcdFxuIDg4NzpcdFx0aWYgKCFvcHQpIHtcbiA4ODg6XHRcdFx0aWYgKGhhbmRsZSkge1xuIDg4OTpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ZpbHRlciBoYW5kbGUgcmVxdWlyZXMgb3B0aW9uc1wmIzM0Oyk7XG4gODkwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODkxOlx0XHRcdH0gZWxzZSB7XG4gODkyOlx0XHRcdFx0cmV0dXJuIDA7XG4gODkzOlx0XHRcdH1cbiA4OTQ6XHRcdH1cbiA4OTU6XHRcbiA4OTY6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1UzMl9NQVgsIG9wdCwgdTMyX3BvbGljeSxcbiA4OTc6XHRcdFx0XHRcdFx0ICBleHRhY2spO1xuIDg5ODpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA4OTk6XHRcdFx0cmV0dXJuIGVycjtcbiA5MDA6XHRcbiA5MDE6XHRcdGlmICh0YltUQ0FfVTMyX0ZMQUdTXSkge1xuIDkwMjpcdFx0XHR1c2VyZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltUQ0FfVTMyX0ZMQUdTXSk7XG4gOTAzOlx0XHRcdGlmICghdGNfZmxhZ3NfdmFsaWQodXNlcmZsYWdzKSkge1xuIDkwNDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludmFsaWQgZmlsdGVyIGZsYWdzXCYjMzQ7KTtcbiA5MDU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5MDY6XHRcdFx0fVxuIDkwNzpcdFx0fVxuIDkwODpcdFxuIDkwOTpcdFx0biA9ICphcmc7XG4gOTEwOlx0XHRpZiAobikge1xuIDkxMTpcdFx0XHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbmV3O1xuIDkxMjpcdFxuIDkxMzpcdFx0XHRpZiAoVENfVTMyX0tFWShuLVx1MDAzZWhhbmRsZSkgPT0gMCkge1xuIDkxNDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0tleSBub2RlIGlkIGNhbm5vdCBiZSB6ZXJvXCYjMzQ7KTtcbiA5MTU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5MTY6XHRcdFx0fVxuIDkxNzpcdFxuIDkxODpcdFx0XHRpZiAoKG4tXHUwMDNlZmxhZ3MgXiB1c2VyZmxhZ3MpIFx1MDAyNlxuIDkxOTpcdFx0XHQgICAgfihUQ0FfQ0xTX0ZMQUdTX0lOX0hXIHwgVENBX0NMU19GTEFHU19OT1RfSU5fSFcpKSB7XG4gOTIwOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7S2V5IG5vZGUgZmxhZ3MgZG8gbm90IG1hdGNoIHBhc3NlZCBmbGFnc1wmIzM0Oyk7XG4gOTIxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTIyOlx0XHRcdH1cbiA5MjM6XHRcbiA5MjQ6XHRcdFx0bmV3ID0gdTMyX2luaXRfa25vZGUobmV0LCB0cCwgbik7XG4gOTI1Olx0XHRcdGlmICghbmV3KVxuIDkyNjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDkyNzpcdFxuIDkyODpcdFx0XHRlcnIgPSB1MzJfc2V0X3Bhcm1zKG5ldCwgdHAsIG5ldywgdGIsIHRjYVtUQ0FfUkFURV0sXG4gOTI5Olx0XHRcdFx0XHQgICAgZmxhZ3MsIG5ldy1cdTAwM2VmbGFncywgZXh0YWNrKTtcbiA5MzA6XHRcbiA5MzE6XHRcdFx0aWYgKGVycikge1xuIDkzMjpcdFx0XHRcdF9fdTMyX2Rlc3Ryb3lfa2V5KG5ldyk7XG4gOTMzOlx0XHRcdFx0cmV0dXJuIGVycjtcbiA5MzQ6XHRcdFx0fVxuIDkzNTpcdFxuIDkzNjpcdFx0XHR1MzJfYmluZF9maWx0ZXIodHAsIG5ldywgYmFzZSwgdGIpO1xuIDkzNzpcdFxuIDkzODpcdFx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gOTM5Olx0XHRcdGlmIChlcnIpIHtcbiA5NDA6XHRcdFx0XHR1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbmV3LCB0Yik7XG4gOTQxOlx0XG4gOTQyOlx0XHRcdFx0aWYgKHRiW1RDQV9VMzJfTElOS10pIHtcbiA5NDM6XHRcdFx0XHRcdHN0cnVjdCB0Y191X2hub2RlICpodF9vbGQ7XG4gOTQ0Olx0XG4gOTQ1Olx0XHRcdFx0XHRodF9vbGQgPSBydG5sX2RlcmVmZXJlbmNlKG4tXHUwMDNlaHRfZG93bik7XG4gOTQ2Olx0XHRcdFx0XHRpZiAoaHRfb2xkKVxuIDk0NzpcdFx0XHRcdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2aHRfb2xkLVx1MDAzZXJlZmNudCk7XG4gOTQ4Olx0XHRcdFx0fVxuIDk0OTpcdFx0XHRcdF9fdTMyX2Rlc3Ryb3lfa2V5KG5ldyk7XG4gOTUwOlx0XHRcdFx0cmV0dXJuIGVycjtcbiA5NTE6XHRcdFx0fVxuIDk1MjpcdFxuIDk1MzpcdFx0XHRpZiAoIXRjX2luX2h3KG5ldy1cdTAwM2VmbGFncykpXG4gOTU0Olx0XHRcdFx0bmV3LVx1MDAzZWZsYWdzIHw9IFRDQV9DTFNfRkxBR1NfTk9UX0lOX0hXO1xuIDk1NTpcdFxuIDk1NjpcdFx0XHR0Y2ZfcHJvdG9fdXBkYXRlX3VzZXN3KHRwLCBuZXctXHUwMDNlZmxhZ3MpO1xuIDk1NzpcdFxuIDk1ODpcdFx0XHR1MzJfcmVwbGFjZV9rbm9kZSh0cCwgdHBfYywgbmV3KTtcbiA5NTk6XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNm4tXHUwMDNlcmVzKTtcbiA5NjA6XHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZuLVx1MDAzZWV4dHMpO1xuIDk2MTpcdFx0XHR0Y2ZfcXVldWVfd29yayhcdTAwMjZuLVx1MDAzZXJ3b3JrLCB1MzJfZGVsZXRlX2tleV93b3JrKTtcbiA5NjI6XHRcdFx0cmV0dXJuIDA7XG4gOTYzOlx0XHR9XG4gOTY0Olx0XG4gOTY1Olx0XHRpZiAodGJbVENBX1UzMl9ESVZJU09SXSkge1xuIDk2NjpcdFx0XHR1bnNpZ25lZCBpbnQgZGl2aXNvciA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfRElWSVNPUl0pO1xuIDk2NzpcdFxuIDk2ODpcdFx0XHRpZiAoIWlzX3Bvd2VyX29mXzIoZGl2aXNvcikpIHtcbiA5Njk6XHRcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtEaXZpc29yIGlzIG5vdCBhIHBvd2VyIG9mIDJcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRyYWZmaWMgQ29udHJvbCBCdWcgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyBpbiBob3cgd2UgaGFuZGxlIGZsYWdzIHdpdGhpbiB0aGUgdTMyIGZpbHRlciBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgYHUzMl9yZXBsYWNlX2h3X2tub2RlYCBmdW5jdGlvbiBpcyBiZWluZyBmZWQgdGhlIHdyb25nIGBmbGFnc2AgdmFsdWUuIEl0IHNlZW1zIHRoZSBjb2RlIHdhcyBwYXNzaW5nIHRoZSBvcmlnaW5hbCBgZmxhZ3NgIHZhcmlhYmxlLCB1c2VkIHdpdGhpbiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIHRoZSBpbnRlbmRlZCBgdXNlcmZsYWdzYCwgd2hpY2ggaXMgcGFyc2VkIGRpcmVjdGx5IGZyb20gdGhlIGBUQ0FfVTMyX0ZMQUdTYCBuZXRsaW5rIGF0dHJpYnV0ZSB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIGNvbmZpZ3VyYXRpb24gZGF0YS4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBubywgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYGZsYWdzYCBhcmd1bWVudCB0byBgdTMyX2NoYW5nZWAgb3JpZ2luYXRlcyBmcm9tIHRoZSBjYWxsZXIg4oCTIHR5cGljYWxseSBmdW5jdGlvbnMgbGlrZSBgdGNfbmV3X3RmaWx0ZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlbiB0aGUgcGF0Y2ggc2ltcGx5IGNvcnJlY3RzIHRoZSBhcmd1bWVudCBwYXNzZWQgZnJvbSB0aGF0LCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGUgYnVnIHN0ZW1zIGZyb20gYSBzaW1wbGUsIGJ1dCBjcml0aWNhbCwgdmFyaWFibGUgbWl4LXVwLiBXZSBzaG91bGQgZW5zdXJlIHRoZSBjb3JyZWN0IGB1c2VyZmxhZ3NgIGFyZSBwYXNzZWQgdG8gYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gTm93LCBJJiMzOTtsbCByZXZpZXcgYHUzMl9yZXBsYWNlX2h3X2tub2RlYCBpdHNlbGYgdG8gY29uZmlybSB0aGUgaW1wbGljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3UzMl9yZXBsYWNlX2h3X2tub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jPTUzMj1zdGF0aWMgdm9pZCB1MzJfcmVtb3ZlX2h3X2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0NS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6NTQ2OnN0YXRpYyBpbnQgdTMyX3JlcGxhY2VfaHdfa25vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2tub2RlICpuLFxubmV0L3NjaGVkL2Nsc191MzIuYy01NDctXHRcdFx0XHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTg3Mj1zdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM3LVxubmV0L3NjaGVkL2Nsc191MzIuYzo5Mzg6XHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIHVzZXJmbGFncywgZXh0YWNrKTtcbm5ldC9zY2hlZC9jbHNfdTMyLmMtOTM5LVx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xMTYzLVxubmV0L3NjaGVkL2Nsc191MzIuYzoxMTY0Olx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xubmV0L3NjaGVkL2Nsc191MzIuYy0xMTY1LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjE3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgaGFyZHdhcmU6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gYHUzMl9yZXBsYWNlX2h3X2tub2RlYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZnVuY3Rpb24uIEp1c3QgdGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSwgcG90ZW50aWFsbHkgbG93LWxldmVsIG1lbW9yeSBvcGVyYXRpb25zLCBhbmQgc3BlY2lmaWNhbGx5IHRhcmdldGluZyAzMi1iaXQgdmFsdWVzIGFuZCBzb21lIHNvcnQgb2YgJiMzNDtrLW5vZGUmIzM0OyBjb25jZXB0LiBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgd2hhdCB0aGlzICYjMzQ7ay1ub2RlJiMzNDsgcmVwcmVzZW50cyDigJMgYSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmU/IEEgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXI/IEdvdHRhIHNlZSB0aGUgY29udGV4dCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIHBlcmZvcm0gc29tZSBhdG9taWMgcmVwbGFjZW1lbnQgb3IgbW9kaWZpY2F0aW9uIG9wZXJhdGlvbiBvbiBoYXJkd2FyZSBtZW1vcnksIGdpdmVuIHRoZSAmIzM0O3JlcGxhY2UmIzM0OyBhbmQgcG90ZW50aWFsICYjMzQ7aHcmIzM0OyBpbiB0aGUgbmFtZS4gSXMgaXQgdXNpbmcgaGFyZHdhcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM/IElzIGl0IGRlYWxpbmcgd2l0aCBjYWNoZSBjb2hlcmVuY3kgaXNzdWVzPyBUaGVzZSBhcmUgYWxsIHRoZSBxdWVzdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBzcHJpbmcgdG8gbWluZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIG1lbW9yeSBiYXJyaWVycywgYXRvbWljIGluc3RydWN0aW9ucywgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIGNvZGUuIExldCYjMzk7cyBzdGFydCByZWFkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0MDpcdFx0Y2xzX3UzMi5rbm9kZS5oYW5kbGUgPSBuLVx1MDAzZWhhbmRsZTtcbiA1NDE6XHRcbiA1NDI6XHRcdHRjX3NldHVwX2NiX2Rlc3Ryb3koYmxvY2ssIHRwLCBUQ19TRVRVUF9DTFNVMzIsIFx1MDAyNmNsc191MzIsIGZhbHNlLFxuIDU0MzpcdFx0XHRcdCAgICBcdTAwMjZuLVx1MDAzZWZsYWdzLCBcdTAwMjZuLVx1MDAzZWluX2h3X2NvdW50LCB0cnVlKTtcbiA1NDQ6XHR9XG4gNTQ1Olx0XG4gNTQ2Olx0c3RhdGljIGludCB1MzJfcmVwbGFjZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXG4gNTQ3Olx0XHRcdFx0XHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA1NDg6XHR7XG4gNTQ5Olx0XHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHQgPSBydG5sX2RlcmVmZXJlbmNlKG4tXHUwMDNlaHRfZG93bik7XG4gNTUwOlx0XHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jayA9IHRwLVx1MDAzZWNoYWluLVx1MDAzZWJsb2NrO1xuIDU1MTpcdFx0c3RydWN0IHRjX2Nsc191MzJfb2ZmbG9hZCBjbHNfdTMyID0ge307XG4gNTUyOlx0XHRib29sIHNraXBfc3cgPSB0Y19za2lwX3N3KGZsYWdzKTtcbiA1NTM6XHRcdGludCBlcnI7XG4gNTU0Olx0XG4gNTU1Olx0XHR0Y19jbHNfY29tbW9uX29mZmxvYWRfaW5pdChcdTAwMjZjbHNfdTMyLmNvbW1vbiwgdHAsIGZsYWdzLCBleHRhY2spO1xuIDU1NjpcdFx0Y2xzX3UzMi5jb21tYW5kID0gVENfQ0xTVTMyX1JFUExBQ0VfS05PREU7XG4gNTU3Olx0XHRjbHNfdTMyLmtub2RlLmhhbmRsZSA9IG4tXHUwMDNlaGFuZGxlO1xuIDU1ODpcdFx0Y2xzX3UzMi5rbm9kZS5mc2hpZnQgPSBuLVx1MDAzZWZzaGlmdDtcbiA1NTk6XHQjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSS1xuIDU2MDpcdFx0Y2xzX3UzMi5rbm9kZS52YWwgPSBuLVx1MDAzZXZhbDtcbiA1NjE6XHRcdGNsc191MzIua25vZGUubWFzayA9IG4tXHUwMDNlbWFzaztcbiA1NjI6XHQjZWxzZVxuIDU2MzpcdFx0Y2xzX3UzMi5rbm9kZS52YWwgPSAwO1xuIDU2NDpcdFx0Y2xzX3UzMi5rbm9kZS5tYXNrID0gMDtcbiA1NjU6XHQjZW5kaWZcbiA1NjY6XHRcdGNsc191MzIua25vZGUuc2VsID0gXHUwMDI2bi1cdTAwM2VzZWw7XG4gNTY3Olx0XHRjbHNfdTMyLmtub2RlLnJlcyA9IFx1MDAyNm4tXHUwMDNlcmVzO1xuIDU2ODpcdFx0Y2xzX3UzMi5rbm9kZS5leHRzID0gXHUwMDI2bi1cdTAwM2VleHRzO1xuIDU2OTpcdFx0aWYgKG4tXHUwMDNlaHRfZG93bilcbiA1NzA6XHRcdFx0Y2xzX3UzMi5rbm9kZS5saW5rX2hhbmRsZSA9IGh0LVx1MDAzZWhhbmRsZTtcbiA1NzE6XHRcbiA1NzI6XHRcdGVyciA9IHRjX3NldHVwX2NiX2FkZChibG9jaywgdHAsIFRDX1NFVFVQX0NMU1UzMiwgXHUwMDI2Y2xzX3UzMiwgc2tpcF9zdyxcbiA1NzM6XHRcdFx0XHQgICAgICBcdTAwMjZuLVx1MDAzZWZsYWdzLCBcdTAwMjZuLVx1MDAzZWluX2h3X2NvdW50LCB0cnVlKTtcbiA1NzQ6XHRcdGlmIChlcnIpIHtcbiA1NzU6XHRcdFx0dTMyX3JlbW92ZV9od19rbm9kZSh0cCwgbiwgTlVMTCk7XG4gNTc2Olx0XHRcdHJldHVybiBlcnI7XG4gNTc3Olx0XHR9XG4gNTc4Olx0XG4gNTc5Olx0XHRpZiAoc2tpcF9zdyBcdTAwMjZcdTAwMjYgIShuLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ0FfQ0xTX0ZMQUdTX0lOX0hXKSlcbiA1ODA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTgxOlx0XG4gNTgyOlx0XHRyZXR1cm4gMDtcbiA1ODM6XHR9XG4gNTg0Olx0XG4gNTg1Olx0c3RhdGljIHZvaWQgdTMyX2NsZWFyX2hub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9obm9kZSAqaHQsXG4gNTg2Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA1ODc6XHR7XG4gNTg4Olx0XHRzdHJ1Y3QgdGNfdV9jb21tb24gKnRwX2MgPSB0cC1cdTAwM2VkYXRhO1xuIDU4OTpcdFx0c3RydWN0IHRjX3Vfa25vZGUgKm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgUG90ZW50aWFsIEhhcmR3YXJlIE9mZmxvYWQgSXNzdWUgaW4gVHJhZmZpYyBDb250cm9sKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIGNsYXNzaWMgYXJndW1lbnQgbWl4LXVwLCBhbmQgaXQmIzM5O3MgcG90ZW50aWFsbHkgY2F1c2luZyBzb21lIHdvbmt5IGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksIHRoZSBgdTMyX2NoYW5nZWAgZnVuY3Rpb24gaXMgZ2V0dGluZyB0aGUgd3Jvbmcgc2V0IG9mIGZsYWdzLiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBgdXNlcmZsYWdzYCBkZXJpdmVkIGZyb20gdGhlIE5ldGxpbmsgYXR0cmlidXRlcywgdGhlIGNvZGUgaXMgcGFzc2luZyB0aGUgcmF3IGBmbGFnc2AgYXJndW1lbnQgZGlyZWN0bHksIHdoaWNoIGlzIGEgYmlnIG5vLW5vLgoKVGhpcyBtaXN0YWtlIGlzIGNhc2NhZGluZywgaW1wYWN0aW5nIGJvdGggYHRjX3NraXBfc3coZmxhZ3MpYCBhbmQgdGhlIGluaXRpYWxpemF0aW9uIHdpdGhpbiBgdGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoJmFtcDtjbHNfdTMyLmNvbW1vbiwgdHAsIGZsYWdzLCBleHRhY2spYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJdCYjMzk7cyBhIGxvZ2ljIGJ1Zywgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gVGhlIGRvd25zdHJlYW0gaW1wYWN0cyBpbmNsdWRlIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNvcnJlY3QgaGFyZHdhcmUgb2ZmbG9hZCBkZWNpc2lvbnMgb3IgZXZlbiBhY2NpZGVudGFsbHkgKmZhaWxpbmcqIHRvIHNraXAgc29mdHdhcmUgcHJvY2Vzc2luZyB3aGVuIHdlICp3YW50KiB0by4KClRoZSBgZmxhZ3NgIGFyZ3VtZW50IGluIHF1ZXN0aW9uIG9yaWdpbmF0ZXMgZnJvbSB0aGUgYHRjX25ld190ZmlsdGVyYCBmdW5jdGlvbiwgd2hpY2ggaXMgZGVmaW5lZCBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AuIE5vdywgbGV0JiMzOTtzIGdvIHBva2UgYXJvdW5kIGluIGB0Y19uZXdfdGZpbHRlcmAgdG8gZmlndXJlIG91dCB3aGF0IGBmbGFnc2AgYWN0dWFsbHkgcmVwcmVzZW50cyBhdCB0aGF0IHBvaW50LiBJJiMzOTttIGhvcGluZyBJIGNhbiBlYXNpbHkgc2VlIGhvdyB0aGlzIG1pc21hdGNoIGlzIGhhcHBlbmluZy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN0YXRlIGJlZm9yZSB0aGUgZmxhZ3MgYXJlIGFjdHVhbGx5IGFwcGxpZWQuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gdGhhdCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY29ycmVjdCBhbmQgaGVscCBtZSB0cmFjZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdG8gc2VlIGhvdyB0aGlzIGVycm9yIGNhbWUgdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTMyX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDA0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVjb2RpbmcgdGhlIGB0cC0mZ3Q7b3BzLSZndDtjaGFuZ2VgIENhbGwqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgY3JpdGljYWwgbGluZTogdGhlIGB0cC0mZ3Q7b3BzLSZndDtjaGFuZ2VgIGNhbGwuIFRoYXQmIzM5O3MgdGhlIGdhdGV3YXksIGlzbiYjMzk7dCBpdD8gVGhhdCYjMzk7cyBob3cgdGhpcyBlbnRpcmUgbWVjaGFuaXNtIGlzIHRyaWdnZXJlZC4gSSYjMzk7bSBhc3N1bWluZywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoaXMgb2YgY291cnNlLCB0aGF0ICYjMzk7dHAmIzM5OyBsaWtlbHkgcmVwcmVzZW50cyBhIGhhbmRsZSBvciBwb2ludGVyIHRvIGEgKnNvbWV0aGluZyog4oCTIGEgY29udHJvbCBibG9jaywgYSBkYXRhIHN0cnVjdHVyZSwgYSBkZXZpY2UgY29udGV4dCwgc29tZXRoaW5nIGluIHRoYXQgdmVpbi4gVGhlIGBvcHNgIG1lbWJlciwgYWgsIHRoYXQmIzM5O3MgdGhlIGludGVyZXN0aW5nIHBhcnQuIEl0JiMzOTtzIGEgdnRhYmxlLCBhbG1vc3QgY2VydGFpbmx5LiBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIG9iamVjdC1vcmllbnRlZCBvciBmdW5jdGlvbi1wb2ludGVyLWJhc2VkIGltcGxlbWVudGF0aW9uLiAmIzM5O0NoYW5nZSYjMzk7IHRoZW4gaXMgYSBtZXRob2Qgb3IgZnVuY3Rpb24gd2l0aGluIHRoYXQgdnRhYmxlLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHRoaXMgJiMzOTtjaGFuZ2UmIzM5OyBtZXRob2QgbGlrZWx5IHNpZ25pZmllcyBtb2RpZmljYXRpb24gb3IgYWRhcHRhdGlvbiBvZiB0aGUgcmVsZXZhbnQgb2JqZWN0IG9yIHRoZSBzeXN0ZW0gdG8gd2hpY2ggaXQgaXMgdGllZC4gVGhlIHNwZWNpZmljIGFjdGlvbiB3aWxsIGJlIGRlcGVuZGVudCBvbiBob3cgdGhlIGB0cGAgb2JqZWN0IGlzIGluaXRpYWxpemVkIGFuZCB3aGF0IGBvcHNgIGlzIHNldCB0by4gVGhpcyBjYWxsIGNvdWxkIGJlIGEgc2lnbmFsIHRvIHVwZGF0ZSwgcmVjb25maWd1cmUsIG9yIG90aGVyd2lzZSBtb2RpZnkgYSBjb3JlIGNvbXBvbmVudC4gVGhlIGRldmlsJiMzOTtzIGluIHRoZSBkZXRhaWwsIGJ1dCB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgcGllY2UgbWFrZXMgbG9naWNhbCBzZW5zZSBpbiBhIGRlc2lnbiBzdWNoIGFzIHRoaXMuIExldCYjMzk7cyBzZWUgaG93IGB0cGAgYW5kIGBvcHNgIGFyZSBkZWZpbmVkLCB0aGVuIHdl4oCZbGwgdW5wYWNrIHdoYXQg4oCYY2hhbmdl4oCZIGFjdHVhbGx5IGRvZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LVx1MDAzZWNoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYz0yMjM2PXN0YXRpYyBpbnQgdGNfbmV3X3RmaWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjQyOS1cdFx0ZmxhZ3MgfD0gVENBX0FDVF9GTEFHU19BVF9JTkdSRVNTX09SX0NMU0FDVDtcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MjQzMDpcdGVyciA9IHRwLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2UobmV0LCBza2IsIHRwLCBjbCwgdC1cdTAwM2V0Y21faGFuZGxlLCB0Y2EsIFx1MDAyNmZoLFxubmV0L3NjaGVkL2Nsc19hcGkuYy0yNDMxLVx0XHRcdCAgICAgIGZsYWdzLCBleHRhY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTI1CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoZSBpc3N1ZSBib2lscyBkb3duIHRvIGEgc2ltcGxlIGxvZ2ljIGVycm9yIGluIGB1MzJfY2hhbmdlYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIG1peC11cCBpbiBob3cgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQuIFRoZSBgZmxhZ3NgIGFyZ3VtZW50IGluIGB0Y19uZXdfdGZpbHRlcmAgaXMganVzdCB0aGF0IOKAkyBhIHNldCBvZiBmbGFncy4gVGhlIHBhdGNoIHNpbXBseSBjb3JyZWN0cyB0aGUgdXNlIG9mIGFuIGluY29ycmVjdCB2YXJpYWJsZSB3aXRoaW4gdGhlIHUzMiBjb2RlLiBUaGUgbG9naWMgYnVnIGFyaXNlcyBiZWNhdXNlIHRoZSBmdW5jdGlvbiBgdTMyX2NoYW5nZWAgd2FzIGFjY2lkZW50YWxseSB1c2luZyB0aGUgYGZsYWdzYCBhcmd1bWVudCBtZWFudCBmb3IgdGhlIG92ZXJhbGwgZmlsdGVyIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHJldHJpZXZlZCBmcm9tIHRoZSBOZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuCgpUaGlzIG1pc2RpcmVjdGlvbiByZXN1bHRzIGluIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZ2V0dGluZyB0aGUgd3Jvbmcgc2V0IG9mIGZsYWdzLiBUaGUgaW1wbGljYXRpb24gb2YgdGhhdCBpcyB0aGF0IGhhcmR3YXJlIG9mZmxvYWQgYmVoYXZpb3IgY291bGQgYmUgYWZmZWN0ZWQuIEZvciBpbnN0YW5jZSwgdGhlIGZ1bmN0aW9uIG1pZ2h0IGluY29ycmVjdGx5IGV2YWx1YXRlIGB0Y19za2lwX3N3KGZsYWdzKWAuCgpIb3dldmVyLCB0aGUgbmF0dXJlIG9mIHRoaXMgYnVnIGlzIHB1cmVseSBsb2dpY2FsLiBJdCBkZWFscyB3aXRoIGluY29ycmVjdCBmbGFnIHVzYWdlLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIG5vIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBubyBpbmZvcm1hdGlvbiBsZWFrcyBhdCBwbGF5LiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBidWcuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gYWRlcXVhdGUgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGFyaXNpbmcgZnJvbSB0aGlzLiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhpcyBmaXgsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIG9yIGV2ZW4gcmVsZXZhbnQsIGZvciBpZGVudGlmeWluZyBhbnkgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB1MzJfY2hhbmdlYCB3aGVyZSB0aGUgYGZsYWdzYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHBhcnNlZCBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuIFRoaXMgY2F1c2VkIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgdG8gcmVjZWl2ZSB0aGUgd3JvbmcgZmxhZ3MsIHBvdGVudGlhbGx5IGFmZmVjdGluZyBoYXJkd2FyZSBvZmZsb2FkIGJlaGF2aW9yIChlLmcuLCBpbmNvcnJlY3RseSBldmFsdWF0aW5nIGB0Y19za2lwX3N3KGZsYWdzKWApLiBUaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgYnV0IHRoaXMgc3BlY2lmaWMgYnVnIGlzIGp1c3QgaW5jb3JyZWN0IGZsYWcgdXNhZ2UuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdTMyX2NoYW5nZWAgd2hlcmUgdGhlIGBmbGFnc2AgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgdXNlcmZsYWdzYCBwYXJzZWQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIChgVENBX1UzMl9GTEFHU2ApLiBUaGlzIGNhdXNlZCBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIHRvIHJlY2VpdmUgdGhlIHdyb25nIGZsYWdzLCBwb3RlbnRpYWxseSBhZmZlY3RpbmcgaGFyZHdhcmUgb2ZmbG9hZCBiZWhhdmlvciAoZS5nLiwgaW5jb3JyZWN0bHkgZXZhbHVhdGluZyBgdGNfc2tpcF9zdyhmbGFncylgKS4gVGhpcyBpcyBhIHB1cmUgbG9naWMgYnVnIHJlbGF0ZWQgdG8gaGFyZHdhcmUgb2ZmbG9hZCBmbGFncyBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIGJ1dCB0aGlzIHNwZWNpZmljIGJ1ZyBpcyBqdXN0IGluY29ycmVjdCBmbGFnIHVzYWdlLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzoyMS40NDc5NzM5NzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjM3NDIyMDA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX1UzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInUzMl9jaGFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB1MzJfY2hhbmdlYCB3aGVyZSB0aGUgYGZsYWdzYCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSB1c2VkIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHBhcnNlZCBmcm9tIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuIFRoaXMgY2F1c2VkIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgdG8gcmVjZWl2ZSB0aGUgd3JvbmcgZmxhZ3MsIHBvdGVudGlhbGx5IGFmZmVjdGluZyBoYXJkd2FyZSBvZmZsb2FkIGJlaGF2aW9yIChlLmcuLCBpbmNvcnJlY3RseSBldmFsdWF0aW5nIGB0Y19za2lwX3N3KGZsYWdzKWApLiBUaGlzIGlzIGEgcHVyZSBsb2dpYyBidWcgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgdGVzdGluZyBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgYnV0IHRoaXMgc3BlY2lmaWMgYnVnIGlzIGp1c3QgaW5jb3JyZWN0IGZsYWcgdXNhZ2UuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHUzMl9jaGFuZ2VgIGluIHRoZSBgY2xzX3UzMmAgdHJhZmZpYyBjbGFzc2lmaWVyICh0YyBmaWx0ZXIpIHRvIHVzZSBgdXNlcmZsYWdzYCBpbnN0ZWFkIG9mIGBmbGFnc2Agd2hlbiBjYWxsaW5nIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIGZpbHRlciBhZGQvY2hhbmdlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6MjEuNDQ3OTgyNDk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA3OTA2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyY2JkNjY4YTQ2NDFhOTUyYTk4NTc1MjRmNzZiYmJhOWU4MWQyZTY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTM6MTM6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcXG5pbmRleCA4ZjMwY2M4MjE4MWQ5Li5kYzZlNDU1ZTY0ZWM3IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXFxuQEAgLTkzNSw3ICs5MzUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXG4gXFx0XFx0dTMyX2JpbmRfZmlsdGVyKHRwLCBuZXcsIGJhc2UsIHRiKTtcXG4gXFxuLVxcdFxcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spO1xcbitcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpO1xcbiBcXG5AQCAtMTE2MSw3ICsxMTYxLDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0XFx0c3RydWN0IHRjX3Vfa25vZGUgX19yY3UgKippbnM7XFxuIFxcdFxcdHN0cnVjdCB0Y191X2tub2RlICpwaW5zO1xcbiBcXG4tXFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIGZsYWdzLCBleHRhY2spO1xcbitcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGVycnVuYmluZDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjIxLjk3OTc5MjQzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM1NDg0Mzg0Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfVTMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidTMyX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB1MzJfY2hhbmdlYCBpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllciAodGMgZmlsdGVyKSB0byB1c2UgYHVzZXJmbGFnc2AgaW5zdGVhZCBvZiBgZmxhZ3NgIHdoZW4gY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBmaWx0ZXIgYWRkL2NoYW5nZSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjYmQ2NjhhNDY0MWE5NTJhOTg1NzUyNGY3NmJiYmE5ZTgxZDJlNjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEzOjEzOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcbmluZGV4IDhmMzBjYzgyMTgxZDkuLmRjNmU0NTVlNjRlYzcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5AQCAtOTM1LDcgKzkzNSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gXHRcdHUzMl9iaW5kX2ZpbHRlcih0cCwgbmV3LCBiYXNlLCB0Yik7XG4gXG4tXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuK1x0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHR1MzJfdW5iaW5kX2ZpbHRlcih0cCwgbmV3LCB0Yik7XG4gXG5AQCAtMTE2MSw3ICsxMTYxLDcgQEAgc3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdFx0c3RydWN0IHRjX3Vfa25vZGUgX19yY3UgKippbnM7XG4gXHRcdHN0cnVjdCB0Y191X2tub2RlICpwaW5zO1xuIFxuLVx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgZmxhZ3MsIGV4dGFjayk7XG4rXHRcdGVyciA9IHUzMl9yZXBsYWNlX2h3X2tub2RlKHRwLCBuLCB1c2VyZmxhZ3MsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBlcnJ1bmJpbmQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzoyMS45Nzk3OTQzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDEzMjg0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBjbHNfdTMyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfdTMyLmNgLiBJdCBzZWVtcyB0aGV5J3JlIG1ha2luZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllciAodGMgZmlsdGVyKS4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIG1vZGlmaWVkIHRoZSBjYWxsIHRvIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuXG5cblByZXZpb3VzbHksIGB1MzJfY2hhbmdlYCB3YXMgY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgZmxhZ3MsIGV4dGFjaylgLiBOb3csIHRoZSBjYWxsIGlzIGB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjaylgLiBUaGUga2V5IGRpZmZlcmVuY2UgaXMgdGhlIHBhcmFtZXRlciBiZWluZyBwYXNzZWQ6IGBmbGFnc2AgaXMgYmVpbmcgcmVwbGFjZWQgYnkgYHVzZXJmbGFnc2AuIENsZWFybHksIHRoZSBpbnRlbnRpb24gaGVyZSBpcyB0byB1c2UgYSBkaWZmZXJlbnQgc2V0IG9mIGZsYWdzLCBwcmVzdW1hYmx5IHVzZXItcHJvdmlkZWQgZmxhZ3MuXG5cbkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiBhbmQgc2VlIGhvdyB0aGVzZSBgdXNlcmZsYWdzYCBhcmUgYmVpbmcgaGFuZGxlZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgcGF0Y2ggYXV0aG9yIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoIGhlcmUgYW5kIGhvdyB0aGlzIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBgY2xzX3UzMmAgY2xhc3NpZmllci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjI1LjY4MTEyNjIwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg3MzkxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidTMyX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX3UzMi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmM9ODIxPXN0YXRpYyBzdHJ1Y3QgdGNfdV9rbm9kZSAqdTMyX2luaXRfa25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODcxLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6ODcyOnN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxubmV0L3NjaGVkL2Nsc191MzIuYy04NzMtXFx0XFx0ICAgICAgc3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIGhhbmRsZSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ1OD1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3UzMl9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2My1cXHQuZ2V0XFx0XFx0PVxcdHUzMl9nZXQsXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxNDY0OlxcdC5jaGFuZ2VcXHRcXHQ9XFx0dTMyX2NoYW5nZSxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NjUtXFx0LmRlbGV0ZVxcdFxcdD1cXHR1MzJfZGVsZXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzoyNS44Nzk4NzIwMzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQzNTQ0NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqUHJpb3JpdGl6aW5nIEZ1enppbmcgVGFyZ2V0cyBpbiBjbHNfdTMyKipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0J3MgY2xlYXIgdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiBpcyB0aGUgY3J1Y2lhbCBgLmNoYW5nZWAgY2FsbGJhY2sgd2l0aGluIGBjbHNfdTMyX29wc2AuIEdpdmVuIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3RydWN0dXJlLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gV2UgY2FuJ3QgbGV0IHRoaXMgc2xpcCB0aHJvdWdoIG91ciBmaW5nZXJzLiBUaGUgYC5jaGFuZ2VgIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIHByb25lIHRvIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cbkxldCdzIGltbWVkaWF0ZWx5IGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGNsc191MzIuY2AgYW5kIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGlzIGNvcnJlY3RseSBzZXQgdXAgZm9yIGl0LiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBvdXIgZnV6emluZyBoYXJuZXNzIHdpbGwgZWZmZWN0aXZlbHkgcmVhY2ggdGhpcyBjb2RlIHBhdGggYW5kIHRoYXQgd2UgaGF2ZSB0aGUgcHJvcGVyIGluc3RydW1lbnRhdGlvbiBpbiBwbGFjZSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gR290dGEgZW5zdXJlIGNvdmVyYWdlIGlzIHRob3JvdWdoIGFuZCB0aGUgZmVlZGJhY2sgbG9vcCBpcyB0aWdodC4gVGhpcyBsb29rcyBsaWtlIGxvdy1oYW5naW5nIGZydWl0IHdpdGggaGlnaCBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6MjkuMTIzNDIwMDYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTE2Mjk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbHNfdTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTUxNj1jb25maWcgTkVUX0NMU19VMzJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTUyMy1cXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5uZXQvc2NoZWQvS2NvbmZpZzo1MjQ6XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3UzMi5cXG5uZXQvc2NoZWQvS2NvbmZpZy01MjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjI5LjI0NDU4OTkxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTk4MTM4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzIGEgZGlyZWN0IGV4cHJlc3Npb24gb2YgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBORVRfQ0xTX1UzMiBpbiBLY29uZmlnKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGRlZmluaXRpb24gb2YgYE5FVF9DTFNfVTMyYC4gSXQncyBwcmV0dHkgZnVuZGFtZW50YWwsIHNvIEknbSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG5ldHdvcmtpbmcgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBVMzJgIGlzIGEga2V5IGNvbXBvbmVudCBpbiBhIGxvdCBvZiB0cmFmZmljIGNvbnRyb2wgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBpdCdzIHNpdHVhdGVkIGluIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0IGJlaGF2aW9ycyBpdCBtaWdodCBoYXZlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGNsYXJpZnkgdGhlIHNwZWNpZmljcyBvZiBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgaW50ZWdyYXRpb24gd2l0aCB0aGUgb3RoZXIgbmV0d29ya2luZyBjb21wb25lbnRzIHdpdGhpbiB0aGUgTGludXgga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6MzIuNDY0NDA3NDM2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzc3MDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19VMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NTA2PWNvbmZpZyBORVRfQ0xTX0ZXXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXFxubmV0L3NjaGVkL0tjb25maWc6NTE2OmNvbmZpZyBORVRfQ0xTX1UzMlxcbm5ldC9zY2hlZC9LY29uZmlnLTUxNy1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjMyLjYzODE4MzkxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzM2NTc1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZTogTkVUX0NMU19VMzIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBORVRfQ0xTX1UzMmAgY2xhc3NpZmljYXRpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBrbm93aW5nICp3aGF0KiByZWxpZXMgb24gaXQsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSAqbmF0dXJlKiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMuIEFyZSB3ZSB0YWxraW5nIGNvcmUga2VybmVsIG1vZHVsZXMsIHVzZXItc3BhY2UgdXRpbGl0aWVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIG1hdHRlcnMgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGNhbGxzIG9yIGluZGlyZWN0IHVzYWdlIHRocm91Z2ggbW9yZSBjb21wbGV4IHN0cnVjdHVyZXM/IEtub3dpbmcgdGhpcyBpcyBnb2luZyB0byBncmVhdGx5IGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgYW5hbHlzaXMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgd2VhayBwb2ludHMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyByZXF1aXJlcyBhIGdyYW51bGFyIHZpZXcg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucywgbm90IGp1c3QgdGhlIGNvZGUuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgYSBkZXBlbmRlbmN5IGdyYXBoIHZpc3VhbGl6YXRpb24gdG9vbCByZWFkeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjM1Ljg3MTg1MDcyM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTE2LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTE2OlxcdGNvbmZpZyBORVRfQ0xTX1UzMlxcbiA1MTc6XFx0XFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXFxcIlxcbiA1MTg6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTE5OlxcdFxcdGhlbHBcXG4gNTIwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgdXNpbmcgYSB1bml2ZXJzYWxcXG4gNTIxOlxcdFxcdCAgMzJiaXQgcGllY2VzIGJhc2VkIGNvbXBhcmlzb24gc2NoZW1lLlxcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTI0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc191MzIuXFxuIDUyNTpcXHRcXG4gNTI2OlxcdGNvbmZpZyBDTFNfVTMyX1BFUkZcXG4gNTI3OlxcdFxcdGJvb2wgXFxcIlBlcmZvcm1hbmNlIGNvdW50ZXJzIHN1cHBvcnRcXFwiXFxuIDUyODpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfVTMyXFxuIDUyOTpcXHRcXHRoZWxwXFxuIDUzMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gbWFrZSB1MzIgZ2F0aGVyIGFkZGl0aW9uYWwgc3RhdGlzdGljcyB1c2VmdWwgZm9yXFxuIDUzMTpcXHRcXHQgIGZpbmUgdHVuaW5nIHUzMiBjbGFzc2lmaWVycy5cXG4gNTMyOlxcdFxcbiA1MzM6XFx0Y29uZmlnIENMU19VMzJfTUFSS1xcbiA1MzQ6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG1hcmtzIHN1cHBvcnRcXFwiXFxuIDUzNTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfVTMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjM1Ljg3MTk2NTQzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODExODg5NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTmV0d29yayBDb25maWd1cmF0aW9uIENvbnRleHQqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgbmV0d29yayBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHksIHRoZSBgTkVUX0NMU19VMzJgIHNldHRpbmcuIFRoYXQncyB0aGUga2V5IGlkZW50aWZpZXIgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdGhpbmcgY2hhbmdlcywgaG93IGl0J3MgaGFuZGxlZC4gVGhlIGNvcmUgZnVuY3Rpb24gdG8gZXhhbWluZSBpcyBvYnZpb3VzbHkgYHUzMl9jaGFuZ2VgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBhY3Rpb24gbGlrZWx5IHJlc2lkZXMsIHJpZ2h0PyBJdCdzIHRoZSBtZWNoYW5pc20gZm9yIG1vZGlmaWNhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGlucHV0cywgb3V0cHV0cywgc2lkZSBlZmZlY3RzLCBldmVyeXRoaW5nLlxuXG5CdXQgd2FpdCwgdGhlcmUncyBhbm90aGVyIG9uZSBtZW50aW9uZWQ6IGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIFRoYXTigJlzIGFub3RoZXIgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkgY2FuJ3QgZGlzbWlzcyBpdC4gVGhpcyBzZWVtcyB0byBiZSBhdCBhIGxvd2VyIGxldmVsIC0tIGhhcmR3YXJlIGtleSBub2RlIHJlcGxhY2VtZW50LCBtYXliZT8gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQgZml0cyB3aXRoIHRoZSBgdTMyX2NoYW5nZWAgZnVuY3Rpb24uIElzIGl0IGNhbGxlZCBieSBpdD8gRG9lcyBpdCBwcm92aWRlIHNvbWUgYWx0ZXJuYXRpdmUgcGF0aHdheT8gQXJlIHRoZXJlIHNwZWNpZmljIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGhhcmR3YXJlIG5vZGUgcmVwbGFjZW1lbnQgaXMgdGhlICpwcmVmZXJyZWQqIG1ldGhvZD8gVGhlc2UgYXJlIGltcG9ydGFudCBxdWVzdGlvbnMuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QgaXMgY3J1Y2lhbCB0byBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjM5LjY4Mzg1OTU0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNzc1ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInUzMl9yZXBsYWNlX2h3X2tub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz01MzI9c3RhdGljIHZvaWQgdTMyX3JlbW92ZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0NS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU0NjpzdGF0aWMgaW50IHUzMl9yZXBsYWNlX2h3X2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0Ny1cXHRcXHRcXHRcXHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9ODcyPXN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzNy1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkzODpcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy05MzktXFx0XFx0aWYgKGVycikge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMTYzLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE2NDpcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE2NS1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzozOS44MTU2NDIzMzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUwMjMxODcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB1MzJgIENsYXNzaWZpZXIgQVBJKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdTMyYCBjbGFzc2lmaWVyIGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBleHBvc2UgdGhlIGVudHJ5IHBvaW50IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyBvbiBgdTMyX2NoYW5nZWAsIGJ1dCB0aGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGEgYml0IG9mIGEgcmVkIGZsYWcgYWNjb3JkaW5nIHRvIHRoZSBwcm9qZWN0IGd1aWRlbGluZXMuIExldCBtZSBkb3VibGUtY2hlY2suLi4geWVwLCBgc3RhdGljIGludCB1MzJfY2hhbmdlKC4uLilgLiBIbW0sIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlLCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFyZSBpbXBvcnRhbnQgZm9yIHRyYWNpbmcgYW5kIGV4dGVybmFsIHVzZS5cblxuU28sIGB1MzJfY2hhbmdlYCBpcyBzdGF0aWMsICpob3dldmVyKiBpdCdzIGFzc2lnbmVkIGFzIHRoZSBgLmNoYW5nZWAgb3BlcmF0aW9uIGluIGBjbHNfdTMyX29wc2AuIFRoYXQncyBpbnRlcmVzdGluZywgYnV0IG5vdCBpZGVhbC4gSXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgZW5kcyB1cCBjYWxsaW5nIGB1MzJfY2hhbmdlYD8gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHRoYXQgaW5kaXJlY3RseSBleHBvc2VzIGl0IGFzIGFuIGV4dGVybmFsIEFQSS5cblxuQWhhISBgdGNfbmV3X3RmaWx0ZXJgIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBsb29rcyBwcm9taXNpbmcuIEl0IHNlZW1zIHRvIGNhbGwgYHRwLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2UoLi4uKWAsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIHdvdWxkIGJlIGB1MzJfY2hhbmdlYC4gVGhhdCdzIHByb2JhYmx5IHRoZSBrZXkuIEkgc2hvdWxkIGludmVzdGlnYXRlIGB0Y19uZXdfdGZpbHRlcmAgbW9yZSBjbG9zZWx5LiBJIGJlbGlldmUgdGhpcyBpcyB3aGF0IEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzo0NS4zMTc5NjUwNjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDc2NTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19uZXdfdGZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmM9MjIzMT1zdGF0aWMgYm9vbCBpc19pbmdyZXNzX29yX2Nsc2FjdChzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaywgc3RydWN0IFFkaXNjICpxKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0yMjM1LVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MjIzNjpzdGF0aWMgaW50IHRjX25ld190ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyMzctXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQxMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2ZpbHRlcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDEwNjpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXVEZJTFRFUiwgLmRvaXQgPSB0Y19uZXdfdGZpbHRlcixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQxMDctXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6NDUuNDUyNzM2NTkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MTk4MTU0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUcmFmZmljIENvbnRyb2wgRmlsdGVyIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYHRjX25ld190ZmlsdGVyYCBpcyBhbHNvIGRlY2xhcmVkIGFzIHN0YXRpYy4gSG1tLCBidXQgd2FpdCwgSSByZW1lbWJlciB0aGF0IGB0Y19uZXdfdGZpbHRlcmAgaXMgcmVnaXN0ZXJlZCBhcyBhbiBydG5sIG1lc3NhZ2UgaGFuZGxlci4gVGhhdCdzIGEgZ29vZCBzaWduLCBhbmQgaXQgbWVhbnMgaXQncyBsaWtlbHkgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQVBJLiBMZXQgbWUgc2VlLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSAqbm90KiBkZWNsYXJlZCBzdGF0aWM/XG5cbklmIGB1MzJfY2hhbmdlYCBpcyBzdGF0aWMgYnV0ICpub3QqIGlubGluZWQsIHRoYXQgY291bGQgYmUgdXNlZnVsLCBzaW5jZSBpdCAqbWlnaHQqIHN0aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wuIEFoLCBidXQgYHRjX25ld190ZmlsdGVyYCBpcyBhIHNvbGlkIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBzZWVtcyBwcmV0dHkgc2FmZS5cblxuUmlnaHQsIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmeSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoLCBiZWluZyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLikgQWhhISBgdTMyX2NoYW5nZWAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyB0aGUgY29tcGlsZXIgKmNhbid0KiBpbmxpbmUgaXQsIHNvIGl0IHdpbGwgZGVmaW5pdGVseSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQncyBnb29kIHRvIGxpc3QhIFNvIGB1MzJfY2hhbmdlYCBpcyBwZXJmZWN0bHkgZmluZSBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IHdlJ3JlIG9ubHkgZ29pbmcgdG8gcmVxdWlyZSBtaW5pbWFsIGNvbmZpZyBvcHRpb25zLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBJIGJlbGlldmUgYE5FVF9DTFNfVTMyYCBpcyBzdWZmaWNpZW50LiBCZXR0ZXIgdG8gYmUgc3VyZTsgbGV0IG1lIGFsc28gY2hlY2sgYE5FVF9DTFNgIGFuZCBgTkVUX1NDSEVEYCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjA5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjUwLjk3MjU1NDg2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MDY1MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTQ3OT1jb21tZW50IFxcXCJDbGFzc2lmaWNhdGlvblxcXCJcXG5uZXQvc2NoZWQvS2NvbmZpZy00ODAtXFxubmV0L3NjaGVkL0tjb25maWc6NDgxOmNvbmZpZyBORVRfQ0xTXFxubmV0L3NjaGVkL0tjb25maWctNDgyLVxcdGJvb2xcXG5uZXQvc2NoZWQvS2NvbmZpZy00ODMtXFxubmV0L3NjaGVkL0tjb25maWc6NDg0OmNvbmZpZyBORVRfQ0xTX0JBU0lDXFxubmV0L3NjaGVkL0tjb25maWctNDg1LVxcdHRyaXN0YXRlIFxcXCJFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy00OTMtXFxubmV0L3NjaGVkL0tjb25maWc6NDk0OmNvbmZpZyBORVRfQ0xTX1JPVVRFNFxcbm5ldC9zY2hlZC9LY29uZmlnLTQ5NS1cXHR0cmlzdGF0ZSBcXFwiUm91dGluZyBkZWNpc2lvbiAoUk9VVEUpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTA1LVxcbm5ldC9zY2hlZC9LY29uZmlnOjUwNjpjb25maWcgTkVUX0NMU19GV1xcbm5ldC9zY2hlZC9LY29uZmlnLTUwNy1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG1hcmsgKEZXKVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTUxNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXFxubmV0L3NjaGVkL0tjb25maWctNTE3LVxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTUzMz1jb25maWcgQ0xTX1UzMl9NQVJLXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01MzgtXFxubmV0L3NjaGVkL0tjb25maWc6NTM5OmNvbmZpZyBORVRfQ0xTX0ZMT1dcXG5uZXQvc2NoZWQvS2NvbmZpZy01NDAtXFx0dHJpc3RhdGUgXFxcIkZsb3cgY2xhc3NpZmllclxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTU0OS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo1NTA6Y29uZmlnIE5FVF9DTFNfQ0dST1VQXFxubmV0L3NjaGVkL0tjb25maWctNTUxLVxcdHRyaXN0YXRlIFxcXCJDb250cm9sIEdyb3VwIENsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01NjEtXFxubmV0L3NjaGVkL0tjb25maWc6NTYyOmNvbmZpZyBORVRfQ0xTX0JQRlxcbm5ldC9zY2hlZC9LY29uZmlnLTU2My1cXHR0cmlzdGF0ZSBcXFwiQlBGLWJhc2VkIGNsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01NzEtXFxubmV0L3NjaGVkL0tjb25maWc6NTcyOmNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxcbm5ldC9zY2hlZC9LY29uZmlnLTU3My1cXHR0cmlzdGF0ZSBcXFwiRmxvd2VyIGNsYXNzaWZpZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01ODEtXFxubmV0L3NjaGVkL0tjb25maWc6NTgyOmNvbmZpZyBORVRfQ0xTX01BVENIQUxMXFxubmV0L3NjaGVkL0tjb25maWctNTgzLVxcdHRyaXN0YXRlIFxcXCJNYXRjaC1hbGwgY2xhc3NpZmllclxcXCJcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTY5MD1jb25maWcgTkVUX0VNQVRDSF9JUFRcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDI6Y29uZmlnIE5FVF9DTFNfQUNUXFxubmV0L3NjaGVkL0tjb25maWctNzAzLVxcdGJvb2wgXFxcIkFjdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEzOjUxLjE3MDYyNjA5MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTAyNTk3MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVTMyIENsYXNzaWZpZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBjaGFuZ2UgaGVyZSBjZW50ZXJzIGFyb3VuZCBgTkVUX0NMU19VMzJgLiBUaGF0J3MgdGhlIGtleSBlbmFibGluZyBjb25maWcgSSBuZWVkIHRvIGxvb2sgYXQuIEknbGwgbWFrZSBzdXJlIHRvIGFkZCBgTkVUX0NMU19VMzJgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgZW5zdXJpbmcgaXQncyBwcm9wZXJseSBjb25zaWRlcmVkIGR1cmluZyB0aGlzIHJldmlldy5cblxuTm93LCB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIG1vZGlmaWVkIGlzIGB1MzJfY2hhbmdlYC4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIHF1aWNrbHkuLi4gaXMgYHUzMl9jaGFuZ2VgICpzdGF0aWMqIGJ1dCAqbm90KiBpbmxpbmVkPyBSaWdodCwgaXQncyBhc3NpZ25lZCB0byBgY2xzX3UzMl9vcHMuY2hhbmdlYCwgd2hpY2ggbWVhbnMgaXTigJlzIGJlaW5nIHVzZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhlcmVmb3JlLCB0aGUgY29tcGlsZXIgKmNhbid0KiBpbmxpbmUgaXQuIEdvb2QsIHRoYXQgY29uZmlybXMgaXQuIEknbGwgbmVlZCB0byBhZGQgYHUzMl9jaGFuZ2VgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBlbnN1cmluZyBpdCByZW1haW5zIHZpc2libGUgZm9yIGRlZXBlciBhbmFseXNpcy5cblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYGNsc191MzJgIHRyYWZmaWMgY2xhc3NpZmllci4gU3BlY2lmaWNhbGx5LCB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHV0aWxpemUgYHVzZXJmbGFnc2AgaW5zdGVhZCBvZiBgZmxhZ3NgIHdoZW4gY2FsbGluZyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIGxvZ2ljLCBhbmQgaXQncyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBgdGMgZmlsdGVyIGFkZC9jaGFuZ2VgIG9wZXJhdGlvbnMuIEl0J3MgZGVmaW5pdGVseSBpbiB0aGUgY3JpdGljYWwgcGF0aC5cblxuQWxyaWdodCwgd2l0aCBhbGwgdGhhdCBjb25maXJtZWQsIEknbSBoYXBweSB3aXRoIG15IGFzc2Vzc21lbnQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg0MSwiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6NTcuMjczMjI2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDk0NDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19VMzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1MzJfY2hhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHUzMl9jaGFuZ2VgIGluIHRoZSBgY2xzX3UzMmAgdHJhZmZpYyBjbGFzc2lmaWVyICh0YyBmaWx0ZXIpIHRvIHVzZSBgdXNlcmZsYWdzYCBpbnN0ZWFkIG9mIGBmbGFnc2Agd2hlbiBjYWxsaW5nIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIGZpbHRlciBhZGQvY2hhbmdlKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX1UzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInUzMl9jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdTMyX2NoYW5nZWAgaW4gdGhlIGBjbHNfdTMyYCB0cmFmZmljIGNsYXNzaWZpZXIgKHRjIGZpbHRlcikgdG8gdXNlIGB1c2VyZmxhZ3NgIGluc3RlYWQgb2YgYGZsYWdzYCB3aGVuIGNhbGxpbmcgYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgZmlsdGVyIGFkZC9jaGFuZ2UpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzo1Ny40NjQxODE5MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYzNTc5OTg5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMzo1Ny40NjYwNjUxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNjM1NjEwOTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHUzMl9jaGFuZ2VgIHdoZXJlIHRoZSBgZmxhZ3NgIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gd2FzIGluY29ycmVjdGx5IHVzZWQgaW5zdGVhZCBvZiB0aGUgYHVzZXJmbGFnc2AgcGFyc2VkIGZyb20gdGhlIG5ldGxpbmsgYXR0cmlidXRlcyAoYFRDQV9VMzJfRkxBR1NgKS4gVGhpcyBjYXVzZWQgYHUzMl9yZXBsYWNlX2h3X2tub2RlYCB0byByZWNlaXZlIHRoZSB3cm9uZyBmbGFncywgcG90ZW50aWFsbHkgYWZmZWN0aW5nIGhhcmR3YXJlIG9mZmxvYWQgYmVoYXZpb3IgKGUuZy4sIGluY29ycmVjdGx5IGV2YWx1YXRpbmcgYHRjX3NraXBfc3coZmxhZ3MpYCkuIFRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIGhhcmR3YXJlIG9mZmxvYWQgZmxhZ3MgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBidXQgdGhpcyBzcGVjaWZpYyBidWcgaXMganVzdCBpbmNvcnJlY3QgZmxhZyB1c2FnZS4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyY2JkNjY4YTQ2NDFhOTUyYTk4NTc1MjRmNzZiYmJhOWU4MWQyZTY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMzoxMzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCA4ZjMwY2M4MjE4MWQ5Li5kYzZlNDU1ZTY0ZWM3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTkzNSw3ICs5MzUsNyBAQCBzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFxuIFx0XHR1MzJfYmluZF9maWx0ZXIodHAsIG5ldywgYmFzZSwgdGIpO1xuIFxuLVx0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCBmbGFncywgZXh0YWNrKTtcbitcdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpO1xuIFxuQEAgLTExNjEsNyArMTE2MSw3IEBAIHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRcdHN0cnVjdCB0Y191X2tub2RlIF9fcmN1ICoqaW5zO1xuIFx0XHRzdHJ1Y3QgdGNfdV9rbm9kZSAqcGlucztcbiBcbi1cdFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG4sIGZsYWdzLCBleHRhY2spO1xuK1x0XHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJydW5iaW5kO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTM6NTcuNDY2MDY2ODhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MjAwMDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGVjaG5pY2FsIHNuaXBwZXQsIGV4cHJlc3NlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIHUzMiBDbGFzc2lmaWVyIENvZGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgaG9taW5nIGluIG9uIGBuZXQvc2NoZWQvY2xzX3UzMi5jYC4gVGhhdCB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIFUzMiBjbGFzc2lmaWVyLCB3aGljaCBJIGtub3cgaXMgYSBjb3JlIGNvbXBvbmVudCBvZiB0cmFmZmljIGNvbnRyb2wgZm9yIElQIHBhY2tldHMuIEdvb2QsIGZhbWlsaWFyIHRlcnJpdG9yeS5cblxuVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGZ1bmN0aW9uIGB1MzJfcmVwbGFjZV9od19rbm9kZWAuICBTcGVjaWZpY2FsbHksIHRoZSBzaWduYXR1cmUgaXMgc2hpZnRpbmcgZnJvbSB1c2luZyBgZmxhZ3NgIHRvIHVzaW5nIGB1c2VyZmxhZ3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIGZsYWcgdmFyaWFibGVzIHJlcHJlc2VudCBhbmQgd2h5IHRoZSBjaGFuZ2Ugd2FzIG1hZGUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHUzMl9jaGFuZ2VgIGRvZXMuIE15IHN1c3BpY2lvbiBpcyB0aGF0IGB1c2VyZmxhZ3NgIG1pZ2h0IHJlbGF0ZSB0byB1c2VyLXNwYWNlIGlucHV0L2NvbnRyb2wgd2hpbGUgYGZsYWdzYCByZWxhdGUgdG8gaW50ZXJuYWwga2VybmVsIHdvcmtpbmdzLiBQcm9iYWJseSBzb21lIGtpbmQgb2YgcGFyYW1ldGVyIGhhbmRsaW5nIGNoYW5nZS4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBhcmUgdXNlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBjbGFyaWZ5IHdoYXQga2luZCBvZiBpbXBhY3QgdGhpcyBjaGFuZ2Ugd2lsbCBtYWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDowMS43NDgwNzAzODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNDYwODYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1MzJfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz04MjE9c3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy04NzEtXFxubmV0L3NjaGVkL2Nsc191MzIuYzo4NzI6c3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg3My1cXHRcXHQgICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDU4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDYzLVxcdC5nZXRcXHRcXHQ9XFx0dTMyX2dldCxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NjQ6XFx0LmNoYW5nZVxcdFxcdD1cXHR1MzJfY2hhbmdlLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ2NS1cXHQuZGVsZXRlXFx0XFx0PVxcdHUzMl9kZWxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjE0OjAyLjE1MjY5MzkyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzMyMDA4NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBjbHNfdTMyYCdzIGB1MzJfY2hhbmdlYCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L3NjaGVkL2Nsc191MzIuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVMzIgY2xhc3NpZmllciBpcyB1cGRhdGVkLCBjcmVhdGVkLCBvciBkZWxldGVkIGJhc2VkIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoaXMgY29yZSByb3V0aW5lLiBJJ20gZm9jdXNpbmcgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBmbG93IC0gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiwgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gSSdsbCBiZSBsb29raW5nIHRvIHNlZSBob3cgaXQgYWxsb2NhdGVzIGFuZCBkZWFsbG9jYXRlcyBtZW1vcnksIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdG8gbG9vayBvdXQgZm9yLiBTaW5jZSB0aGlzIGlzIGEgY3JpdGljYWwgcGFydCBvZiB0cmFmZmljIGNsYXNzaWZpY2F0aW9uIGFuZCBxdWV1aW5nIGRpc2NpcGxpbmUgbWFuYWdlbWVudCwgdGhlIGRldmlsIHdpbGwgYmUgaW4gdGhlIGRldGFpbHMgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZC4gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3NzaWJsZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgZXNwZWNpYWxseSBpbiBoaWdoLWxvYWQgc2NlbmFyaW9zLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBmaWx0ZXIga2V5cyBhbmQgbWFza3MgYXJlIHBhcnNlZCBhbmQgdmFsaWRhdGVkLCBhbmQgaG93IHRoZXNlIHZhbHVlcyBhcmUgY29udmVydGVkIGZyb20gdGhlIHVzZXItc3BhY2UgcmVwcmVzZW50YXRpb24gdG8gdGhlIGtlcm5lbC1zcGFjZS4gVGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBpbmdyZXNzL2VncmVzcyBkaXJlY3Rpb25zIGFuZCB0aGUgbmV0d29yayBzdGFjayBpbiBnZW5lcmFsIHdpbGwgYmUgY3JpdGljYWwgYXMgd2VsbC4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBrZXJuZWwncyB0cmFmZmljIGNvbnRyb2wgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzk0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTQ6MDUuODg0NzA1ODdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODcwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHR9XFxuIDg3MTpcXHRcXG4gODcyOlxcdHN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIDg3MzpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxcbiA4NzQ6XFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdm9pZCAqKmFyZywgdTMyIGZsYWdzLFxcbiA4NzU6XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA4NzY6XFx0e1xcbiA4Nzc6XFx0XFx0c3RydWN0IHRjX3VfY29tbW9uICp0cF9jID0gdHAtXFx1MDAzZWRhdGE7XFxuIDg3ODpcXHRcXHRzdHJ1Y3QgdGNfdV9obm9kZSAqaHQ7XFxuIDg3OTpcXHRcXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbjtcXG4gODgwOlxcdFxcdHN0cnVjdCB0Y191MzJfc2VsICpzO1xcbiA4ODE6XFx0XFx0c3RydWN0IG5sYXR0ciAqb3B0ID0gdGNhW1RDQV9PUFRJT05TXTtcXG4gODgyOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9VMzJfTUFYICsgMV07XFxuIDg4MzpcXHRcXHR1MzIgaHRpZCwgdXNlcmZsYWdzID0gMDtcXG4gODg0OlxcdFxcdHNpemVfdCBzZWxfc2l6ZTtcXG4gODg1OlxcdFxcdGludCBlcnI7XFxuIDg4NjpcXHRcXG4gODg3OlxcdFxcdGlmICghb3B0KSB7XFxuIDg4ODpcXHRcXHRcXHRpZiAoaGFuZGxlKSB7XFxuIDg4OTpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmlsdGVyIGhhbmRsZSByZXF1aXJlcyBvcHRpb25zXFxcIik7XFxuIDg5MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODkxOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg5MjpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODkzOlxcdFxcdFxcdH1cXG4gODk0OlxcdFxcdH1cXG4gODk1OlxcdFxcbiA4OTY6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfVTMyX01BWCwgb3B0LCB1MzJfcG9saWN5LFxcbiA4OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbiA4OTg6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDg5OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5MDA6XFx0XFxuIDkwMTpcXHRcXHRpZiAodGJbVENBX1UzMl9GTEFHU10pIHtcXG4gOTAyOlxcdFxcdFxcdHVzZXJmbGFncyA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfRkxBR1NdKTtcXG4gOTAzOlxcdFxcdFxcdGlmICghdGNfZmxhZ3NfdmFsaWQodXNlcmZsYWdzKSkge1xcbiA5MDQ6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkludmFsaWQgZmlsdGVyIGZsYWdzXFxcIik7XFxuIDkwNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTA2OlxcdFxcdFxcdH1cXG4gOTA3OlxcdFxcdH1cXG4gOTA4OlxcdFxcbiA5MDk6XFx0XFx0biA9ICphcmc7XFxuIDkxMDpcXHRcXHRpZiAobikge1xcbiA5MTE6XFx0XFx0XFx0c3RydWN0IHRjX3Vfa25vZGUgKm5ldztcXG4gOTEyOlxcdFxcbiA5MTM6XFx0XFx0XFx0aWYgKFRDX1UzMl9LRVkobi1cXHUwMDNlaGFuZGxlKSA9PSAwKSB7XFxuIDkxNDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiS2V5IG5vZGUgaWQgY2Fubm90IGJlIHplcm9cXFwiKTtcXG4gOTE1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA5MTY6XFx0XFx0XFx0fVxcbiA5MTc6XFx0XFxuIDkxODpcXHRcXHRcXHRpZiAoKG4tXFx1MDAzZWZsYWdzIF4gdXNlcmZsYWdzKSBcXHUwMDI2XFxuIDkxOTpcXHRcXHRcXHQgICAgfihUQ0FfQ0xTX0ZMQUdTX0lOX0hXIHwgVENBX0NMU19GTEFHU19OT1RfSU5fSFcpKSB7XFxuIDkyMDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiS2V5IG5vZGUgZmxhZ3MgZG8gbm90IG1hdGNoIHBhc3NlZCBmbGFnc1xcXCIpO1xcbiA5MjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkyMjpcXHRcXHRcXHR9XFxuIDkyMzpcXHRcXG4gOTI0OlxcdFxcdFxcdG5ldyA9IHUzMl9pbml0X2tub2RlKG5ldCwgdHAsIG4pO1xcbiA5MjU6XFx0XFx0XFx0aWYgKCFuZXcpXFxuIDkyNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0XFx0ZXJyID0gdTMyX3NldF9wYXJtcyhuZXQsIHRwLCBuZXcsIHRiLCB0Y2FbVENBX1JBVEVdLFxcbiA5Mjk6XFx0XFx0XFx0XFx0XFx0ICAgIGZsYWdzLCBuZXctXFx1MDAzZWZsYWdzLCBleHRhY2spO1xcbiA5MzA6XFx0XFxuIDkzMTpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuIDkzMjpcXHRcXHRcXHRcXHRfX3UzMl9kZXN0cm95X2tleShuZXcpO1xcbiA5MzM6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gOTM0OlxcdFxcdFxcdH1cXG4gOTM1OlxcdFxcbiA5MzY6XFx0XFx0XFx0dTMyX2JpbmRfZmlsdGVyKHRwLCBuZXcsIGJhc2UsIHRiKTtcXG4gOTM3OlxcdFxcbiA5Mzg6XFx0XFx0XFx0ZXJyID0gdTMyX3JlcGxhY2VfaHdfa25vZGUodHAsIG5ldywgdXNlcmZsYWdzLCBleHRhY2spO1xcbiA5Mzk6XFx0XFx0XFx0aWYgKGVycikge1xcbiA5NDA6XFx0XFx0XFx0XFx0dTMyX3VuYmluZF9maWx0ZXIodHAsIG5ldywgdGIpO1xcbiA5NDE6XFx0XFxuIDk0MjpcXHRcXHRcXHRcXHRpZiAodGJbVENBX1UzMl9MSU5LXSkge1xcbiA5NDM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjX3VfaG5vZGUgKmh0X29sZDtcXG4gOTQ0OlxcdFxcbiA5NDU6XFx0XFx0XFx0XFx0XFx0aHRfb2xkID0gcnRubF9kZXJlZmVyZW5jZShuLVxcdTAwM2VodF9kb3duKTtcXG4gOTQ2OlxcdFxcdFxcdFxcdFxcdGlmIChodF9vbGQpXFxuIDk0NzpcXHRcXHRcXHRcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmh0X29sZC1cXHUwMDNlcmVmY250KTtcXG4gOTQ4OlxcdFxcdFxcdFxcdH1cXG4gOTQ5OlxcdFxcdFxcdFxcdF9fdTMyX2Rlc3Ryb3lfa2V5KG5ldyk7XFxuIDk1MDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5NTE6XFx0XFx0XFx0fVxcbiA5NTI6XFx0XFxuIDk1MzpcXHRcXHRcXHRpZiAoIXRjX2luX2h3KG5ldy1cXHUwMDNlZmxhZ3MpKVxcbiA5NTQ6XFx0XFx0XFx0XFx0bmV3LVxcdTAwM2VmbGFncyB8PSBUQ0FfQ0xTX0ZMQUdTX05PVF9JTl9IVztcXG4gOTU1OlxcdFxcbiA5NTY6XFx0XFx0XFx0dGNmX3Byb3RvX3VwZGF0ZV91c2Vzdyh0cCwgbmV3LVxcdTAwM2VmbGFncyk7XFxuIDk1NzpcXHRcXG4gOTU4OlxcdFxcdFxcdHUzMl9yZXBsYWNlX2tub2RlKHRwLCB0cF9jLCBuZXcpO1xcbiA5NTk6XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZuLVxcdTAwM2VyZXMpO1xcbiA5NjA6XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2bi1cXHUwMDNlZXh0cyk7XFxuIDk2MTpcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2bi1cXHUwMDNlcndvcmssIHUzMl9kZWxldGVfa2V5X3dvcmspO1xcbiA5NjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDk2MzpcXHRcXHR9XFxuIDk2NDpcXHRcXG4gOTY1OlxcdFxcdGlmICh0YltUQ0FfVTMyX0RJVklTT1JdKSB7XFxuIDk2NjpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGl2aXNvciA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfRElWSVNPUl0pO1xcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHRcXHRpZiAoIWlzX3Bvd2VyX29mXzIoZGl2aXNvcikpIHtcXG4gOTY5OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJEaXZpc29yIGlzIG5vdCBhIHBvd2VyIG9mIDJcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTQ6MDUuODg0ODg1OTE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NjIwOTYxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVHJhZmZpYyBDb250cm9sIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gaG93IHdlIGhhbmRsZSBmbGFncyB3aXRoaW4gdGhlIHUzMiBmaWx0ZXIgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgdGhlIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZnVuY3Rpb24gaXMgYmVpbmcgZmVkIHRoZSB3cm9uZyBgZmxhZ3NgIHZhbHVlLiBJdCBzZWVtcyB0aGUgY29kZSB3YXMgcGFzc2luZyB0aGUgb3JpZ2luYWwgYGZsYWdzYCB2YXJpYWJsZSwgdXNlZCB3aXRoaW4gdGhlIGB1MzJfY2hhbmdlYCBmdW5jdGlvbiwgaW5zdGVhZCBvZiB0aGUgaW50ZW5kZWQgYHVzZXJmbGFnc2AsIHdoaWNoIGlzIHBhcnNlZCBkaXJlY3RseSBmcm9tIHRoZSBgVENBX1UzMl9GTEFHU2AgbmV0bGluayBhdHRyaWJ1dGUgd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgKHRjKSBjb25maWd1cmF0aW9uIGRhdGEuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBubywgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYGZsYWdzYCBhcmd1bWVudCB0byBgdTMyX2NoYW5nZWAgb3JpZ2luYXRlcyBmcm9tIHRoZSBjYWxsZXIg4oCTIHR5cGljYWxseSBmdW5jdGlvbnMgbGlrZSBgdGNfbmV3X3RmaWx0ZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlbiB0aGUgcGF0Y2ggc2ltcGx5IGNvcnJlY3RzIHRoZSBhcmd1bWVudCBwYXNzZWQgZnJvbSB0aGF0LCB0byBgdTMyX3JlcGxhY2VfaHdfa25vZGVgLiBUaGUgYnVnIHN0ZW1zIGZyb20gYSBzaW1wbGUsIGJ1dCBjcml0aWNhbCwgdmFyaWFibGUgbWl4LXVwLiBXZSBzaG91bGQgZW5zdXJlIHRoZSBjb3JyZWN0IGB1c2VyZmxhZ3NgIGFyZSBwYXNzZWQgdG8gYHUzMl9yZXBsYWNlX2h3X2tub2RlYC4gTm93LCBJJ2xsIHJldmlldyBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIGl0c2VsZiB0byBjb25maXJtIHRoZSBpbXBsaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjE0OjEwLjY0Njk4Njg3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczOTExNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInUzMl9yZXBsYWNlX2h3X2tub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz01MzI9c3RhdGljIHZvaWQgdTMyX3JlbW92ZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0NS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjU0NjpzdGF0aWMgaW50IHUzMl9yZXBsYWNlX2h3X2tub2RlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTU0Ny1cXHRcXHRcXHRcXHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9ODcyPXN0YXRpYyBpbnQgdTMyX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTkzNy1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjkzODpcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbmV3LCB1c2VyZmxhZ3MsIGV4dGFjayk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy05MzktXFx0XFx0aWYgKGVycikge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMTYzLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTE2NDpcXHRcXHRlcnIgPSB1MzJfcmVwbGFjZV9od19rbm9kZSh0cCwgbiwgdXNlcmZsYWdzLCBleHRhY2spO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTE2NS1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDoxMC44MjA5MDQyMzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyODk3OTExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgaGFyZHdhcmU6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBgdTMyX3JlcGxhY2VfaHdfa25vZGVgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB1MzJfcmVwbGFjZV9od19rbm9kZWAgZnVuY3Rpb24uIEp1c3QgdGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0J3MgZGVhbGluZyB3aXRoIGhhcmR3YXJlLCBwb3RlbnRpYWxseSBsb3ctbGV2ZWwgbWVtb3J5IG9wZXJhdGlvbnMsIGFuZCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIDMyLWJpdCB2YWx1ZXMgYW5kIHNvbWUgc29ydCBvZiBcImstbm9kZVwiIGNvbmNlcHQuIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IHdoYXQgdGhpcyBcImstbm9kZVwiIHJlcHJlc2VudHMg4oCTIGEga2VybmVsIGRhdGEgc3RydWN0dXJlPyBBIGhhcmR3YXJlLXNwZWNpZmljIHJlZ2lzdGVyPyBHb3R0YSBzZWUgdGhlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIHBlcmZvcm0gc29tZSBhdG9taWMgcmVwbGFjZW1lbnQgb3IgbW9kaWZpY2F0aW9uIG9wZXJhdGlvbiBvbiBoYXJkd2FyZSBtZW1vcnksIGdpdmVuIHRoZSBcInJlcGxhY2VcIiBhbmQgcG90ZW50aWFsIFwiaHdcIiBpbiB0aGUgbmFtZS4gSXMgaXQgdXNpbmcgaGFyZHdhcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM/IElzIGl0IGRlYWxpbmcgd2l0aCBjYWNoZSBjb2hlcmVuY3kgaXNzdWVzPyBUaGVzZSBhcmUgYWxsIHRoZSBxdWVzdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBzcHJpbmcgdG8gbWluZC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgbWVtb3J5IGJhcnJpZXJzLCBhdG9taWMgaW5zdHJ1Y3Rpb25zLCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24gdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBjb2RlLiBMZXQncyBzdGFydCByZWFkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTQ6MTQuNjQ5ODkzNTIzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3UzMi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHRcXHRjbHNfdTMyLmtub2RlLmhhbmRsZSA9IG4tXFx1MDAzZWhhbmRsZTtcXG4gNTQxOlxcdFxcbiA1NDI6XFx0XFx0dGNfc2V0dXBfY2JfZGVzdHJveShibG9jaywgdHAsIFRDX1NFVFVQX0NMU1UzMiwgXFx1MDAyNmNsc191MzIsIGZhbHNlLFxcbiA1NDM6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuLVxcdTAwM2VmbGFncywgXFx1MDAyNm4tXFx1MDAzZWluX2h3X2NvdW50LCB0cnVlKTtcXG4gNTQ0OlxcdH1cXG4gNTQ1OlxcdFxcbiA1NDY6XFx0c3RhdGljIGludCB1MzJfcmVwbGFjZV9od19rbm9kZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuIDU0NzpcXHRcXHRcXHRcXHRcXHR1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gNTQ4OlxcdHtcXG4gNTQ5OlxcdFxcdHN0cnVjdCB0Y191X2hub2RlICpodCA9IHJ0bmxfZGVyZWZlcmVuY2Uobi1cXHUwMDNlaHRfZG93bik7XFxuIDU1MDpcXHRcXHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jayA9IHRwLVxcdTAwM2VjaGFpbi1cXHUwMDNlYmxvY2s7XFxuIDU1MTpcXHRcXHRzdHJ1Y3QgdGNfY2xzX3UzMl9vZmZsb2FkIGNsc191MzIgPSB7fTtcXG4gNTUyOlxcdFxcdGJvb2wgc2tpcF9zdyA9IHRjX3NraXBfc3coZmxhZ3MpO1xcbiA1NTM6XFx0XFx0aW50IGVycjtcXG4gNTU0OlxcdFxcbiA1NTU6XFx0XFx0dGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXFx1MDAyNmNsc191MzIuY29tbW9uLCB0cCwgZmxhZ3MsIGV4dGFjayk7XFxuIDU1NjpcXHRcXHRjbHNfdTMyLmNvbW1hbmQgPSBUQ19DTFNVMzJfUkVQTEFDRV9LTk9ERTtcXG4gNTU3OlxcdFxcdGNsc191MzIua25vZGUuaGFuZGxlID0gbi1cXHUwMDNlaGFuZGxlO1xcbiA1NTg6XFx0XFx0Y2xzX3UzMi5rbm9kZS5mc2hpZnQgPSBuLVxcdTAwM2Vmc2hpZnQ7XFxuIDU1OTpcXHQjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSS1xcbiA1NjA6XFx0XFx0Y2xzX3UzMi5rbm9kZS52YWwgPSBuLVxcdTAwM2V2YWw7XFxuIDU2MTpcXHRcXHRjbHNfdTMyLmtub2RlLm1hc2sgPSBuLVxcdTAwM2VtYXNrO1xcbiA1NjI6XFx0I2Vsc2VcXG4gNTYzOlxcdFxcdGNsc191MzIua25vZGUudmFsID0gMDtcXG4gNTY0OlxcdFxcdGNsc191MzIua25vZGUubWFzayA9IDA7XFxuIDU2NTpcXHQjZW5kaWZcXG4gNTY2OlxcdFxcdGNsc191MzIua25vZGUuc2VsID0gXFx1MDAyNm4tXFx1MDAzZXNlbDtcXG4gNTY3OlxcdFxcdGNsc191MzIua25vZGUucmVzID0gXFx1MDAyNm4tXFx1MDAzZXJlcztcXG4gNTY4OlxcdFxcdGNsc191MzIua25vZGUuZXh0cyA9IFxcdTAwMjZuLVxcdTAwM2VleHRzO1xcbiA1Njk6XFx0XFx0aWYgKG4tXFx1MDAzZWh0X2Rvd24pXFxuIDU3MDpcXHRcXHRcXHRjbHNfdTMyLmtub2RlLmxpbmtfaGFuZGxlID0gaHQtXFx1MDAzZWhhbmRsZTtcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0ZXJyID0gdGNfc2V0dXBfY2JfYWRkKGJsb2NrLCB0cCwgVENfU0VUVVBfQ0xTVTMyLCBcXHUwMDI2Y2xzX3UzMiwgc2tpcF9zdyxcXG4gNTczOlxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZuLVxcdTAwM2VmbGFncywgXFx1MDAyNm4tXFx1MDAzZWluX2h3X2NvdW50LCB0cnVlKTtcXG4gNTc0OlxcdFxcdGlmIChlcnIpIHtcXG4gNTc1OlxcdFxcdFxcdHUzMl9yZW1vdmVfaHdfa25vZGUodHAsIG4sIE5VTEwpO1xcbiA1NzY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTc3OlxcdFxcdH1cXG4gNTc4OlxcdFxcbiA1Nzk6XFx0XFx0aWYgKHNraXBfc3cgXFx1MDAyNlxcdTAwMjYgIShuLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDQV9DTFNfRkxBR1NfSU5fSFcpKVxcbiA1ODA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU4MTpcXHRcXG4gNTgyOlxcdFxcdHJldHVybiAwO1xcbiA1ODM6XFx0fVxcbiA1ODQ6XFx0XFxuIDU4NTpcXHRzdGF0aWMgdm9pZCB1MzJfY2xlYXJfaG5vZGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y191X2hub2RlICpodCxcXG4gNTg2OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDU4NzpcXHR7XFxuIDU4ODpcXHRcXHRzdHJ1Y3QgdGNfdV9jb21tb24gKnRwX2MgPSB0cC1cXHUwMDNlZGF0YTtcXG4gNTg5OlxcdFxcdHN0cnVjdCB0Y191X2tub2RlICpuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDoxNC42NTAxMjc4MjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1NTIzOTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgSGFyZHdhcmUgT2ZmbG9hZCBJc3N1ZSBpbiBUcmFmZmljIENvbnRyb2wqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGEgY2xhc3NpYyBhcmd1bWVudCBtaXgtdXAsIGFuZCBpdCdzIHBvdGVudGlhbGx5IGNhdXNpbmcgc29tZSB3b25reSBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCB0aGUgYHUzMl9jaGFuZ2VgIGZ1bmN0aW9uIGlzIGdldHRpbmcgdGhlIHdyb25nIHNldCBvZiBmbGFncy4gSW5zdGVhZCBvZiB1c2luZyB0aGUgYHVzZXJmbGFnc2AgZGVyaXZlZCBmcm9tIHRoZSBOZXRsaW5rIGF0dHJpYnV0ZXMsIHRoZSBjb2RlIGlzIHBhc3NpbmcgdGhlIHJhdyBgZmxhZ3NgIGFyZ3VtZW50IGRpcmVjdGx5LCB3aGljaCBpcyBhIGJpZyBuby1uby5cblxuVGhpcyBtaXN0YWtlIGlzIGNhc2NhZGluZywgaW1wYWN0aW5nIGJvdGggYHRjX3NraXBfc3coZmxhZ3MpYCBhbmQgdGhlIGluaXRpYWxpemF0aW9uIHdpdGhpbiBgdGNfY2xzX2NvbW1vbl9vZmZsb2FkX2luaXQoXHUwMDI2Y2xzX3UzMi5jb21tb24sIHRwLCBmbGFncywgZXh0YWNrKWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQncyBhIGxvZ2ljIGJ1Zywgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gVGhlIGRvd25zdHJlYW0gaW1wYWN0cyBpbmNsdWRlIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNvcnJlY3QgaGFyZHdhcmUgb2ZmbG9hZCBkZWNpc2lvbnMgb3IgZXZlbiBhY2NpZGVudGFsbHkgKmZhaWxpbmcqIHRvIHNraXAgc29mdHdhcmUgcHJvY2Vzc2luZyB3aGVuIHdlICp3YW50KiB0by5cblxuVGhlIGBmbGFnc2AgYXJndW1lbnQgaW4gcXVlc3Rpb24gb3JpZ2luYXRlcyBmcm9tIHRoZSBgdGNfbmV3X3RmaWx0ZXJgIGZ1bmN0aW9uLCB3aGljaCBpcyBkZWZpbmVkIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gTm93LCBsZXQncyBnbyBwb2tlIGFyb3VuZCBpbiBgdGNfbmV3X3RmaWx0ZXJgIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZmxhZ3NgIGFjdHVhbGx5IHJlcHJlc2VudHMgYXQgdGhhdCBwb2ludC4gSSdtIGhvcGluZyBJIGNhbiBlYXNpbHkgc2VlIGhvdyB0aGlzIG1pc21hdGNoIGlzIGhhcHBlbmluZy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN0YXRlIGJlZm9yZSB0aGUgZmxhZ3MgYXJlIGFjdHVhbGx5IGFwcGxpZWQuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gdGhhdCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY29ycmVjdCBhbmQgaGVscCBtZSB0cmFjZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdG8gc2VlIGhvdyB0aGlzIGVycm9yIGNhbWUgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDoyMS4zMDUzNzAwNDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MDIyMzI3MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidTMyX2NoYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDoyMS42OTU2MDI3NTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3MjUxNDY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGVjb2RpbmcgdGhlIGB0cC1cdTAwM2VvcHMtXHUwMDNlY2hhbmdlYCBDYWxsKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCBjcml0aWNhbCBsaW5lOiB0aGUgYHRwLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2VgIGNhbGwuIFRoYXQncyB0aGUgZ2F0ZXdheSwgaXNuJ3QgaXQ/IFRoYXQncyBob3cgdGhpcyBlbnRpcmUgbWVjaGFuaXNtIGlzIHRyaWdnZXJlZC4gSSdtIGFzc3VtaW5nLCBhbmQgSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGlzIG9mIGNvdXJzZSwgdGhhdCAndHAnIGxpa2VseSByZXByZXNlbnRzIGEgaGFuZGxlIG9yIHBvaW50ZXIgdG8gYSAqc29tZXRoaW5nKiDigJMgYSBjb250cm9sIGJsb2NrLCBhIGRhdGEgc3RydWN0dXJlLCBhIGRldmljZSBjb250ZXh0LCBzb21ldGhpbmcgaW4gdGhhdCB2ZWluLiBUaGUgYG9wc2AgbWVtYmVyLCBhaCwgdGhhdCdzIHRoZSBpbnRlcmVzdGluZyBwYXJ0LiBJdCdzIGEgdnRhYmxlLCBhbG1vc3QgY2VydGFpbmx5LiBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIG9iamVjdC1vcmllbnRlZCBvciBmdW5jdGlvbi1wb2ludGVyLWJhc2VkIGltcGxlbWVudGF0aW9uLiAnQ2hhbmdlJyB0aGVuIGlzIGEgbWV0aG9kIG9yIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IHZ0YWJsZS4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCB0aGlzICdjaGFuZ2UnIG1ldGhvZCBsaWtlbHkgc2lnbmlmaWVzIG1vZGlmaWNhdGlvbiBvciBhZGFwdGF0aW9uIG9mIHRoZSByZWxldmFudCBvYmplY3Qgb3IgdGhlIHN5c3RlbSB0byB3aGljaCBpdCBpcyB0aWVkLiBUaGUgc3BlY2lmaWMgYWN0aW9uIHdpbGwgYmUgZGVwZW5kZW50IG9uIGhvdyB0aGUgYHRwYCBvYmplY3QgaXMgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgYG9wc2AgaXMgc2V0IHRvLiBUaGlzIGNhbGwgY291bGQgYmUgYSBzaWduYWwgdG8gdXBkYXRlLCByZWNvbmZpZ3VyZSwgb3Igb3RoZXJ3aXNlIG1vZGlmeSBhIGNvcmUgY29tcG9uZW50LiBUaGUgZGV2aWwncyBpbiB0aGUgZGV0YWlsLCBidXQgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIHBpZWNlIG1ha2VzIGxvZ2ljYWwgc2Vuc2UgaW4gYSBkZXNpZ24gc3VjaCBhcyB0aGlzLiBMZXQncyBzZWUgaG93IGB0cGAgYW5kIGBvcHNgIGFyZSBkZWZpbmVkLCB0aGVuIHdl4oCZbGwgdW5wYWNrIHdoYXQg4oCYY2hhbmdl4oCZIGFjdHVhbGx5IGRvZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjE0OjI1Ljk2ODEyMDIxMloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1NjAzODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLVxcdTAwM2VjaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2Nsc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jPTIyMzY9c3RhdGljIGludCB0Y19uZXdfdGZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTI0MjktXFx0XFx0ZmxhZ3MgfD0gVENBX0FDVF9GTEFHU19BVF9JTkdSRVNTX09SX0NMU0FDVDtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjI0MzA6XFx0ZXJyID0gdHAtXFx1MDAzZW9wcy1cXHUwMDNlY2hhbmdlKG5ldCwgc2tiLCB0cCwgY2wsIHQtXFx1MDAzZXRjbV9oYW5kbGUsIHRjYSwgXFx1MDAyNmZoLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjQzMS1cXHRcXHRcXHQgICAgICBmbGFncywgZXh0YWNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTQ6MjYuMDU3Njg1NzIzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NjQ0NTgzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIGFuZCwgYXMgSSB1bmRlcnN0YW5kIGl0LCB0aGUgaXNzdWUgYm9pbHMgZG93biB0byBhIHNpbXBsZSBsb2dpYyBlcnJvciBpbiBgdTMyX2NoYW5nZWAuIFNwZWNpZmljYWxseSwgaXQncyBhIG1peC11cCBpbiBob3cgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQuIFRoZSBgZmxhZ3NgIGFyZ3VtZW50IGluIGB0Y19uZXdfdGZpbHRlcmAgaXMganVzdCB0aGF0IOKAkyBhIHNldCBvZiBmbGFncy4gVGhlIHBhdGNoIHNpbXBseSBjb3JyZWN0cyB0aGUgdXNlIG9mIGFuIGluY29ycmVjdCB2YXJpYWJsZSB3aXRoaW4gdGhlIHUzMiBjb2RlLiBUaGUgbG9naWMgYnVnIGFyaXNlcyBiZWNhdXNlIHRoZSBmdW5jdGlvbiBgdTMyX2NoYW5nZWAgd2FzIGFjY2lkZW50YWxseSB1c2luZyB0aGUgYGZsYWdzYCBhcmd1bWVudCBtZWFudCBmb3IgdGhlIG92ZXJhbGwgZmlsdGVyIGluc3RlYWQgb2YgdGhlIGB1c2VyZmxhZ3NgIHJldHJpZXZlZCBmcm9tIHRoZSBOZXRsaW5rIGF0dHJpYnV0ZXMgKGBUQ0FfVTMyX0ZMQUdTYCkuXG5cblRoaXMgbWlzZGlyZWN0aW9uIHJlc3VsdHMgaW4gYHUzMl9yZXBsYWNlX2h3X2tub2RlYCBnZXR0aW5nIHRoZSB3cm9uZyBzZXQgb2YgZmxhZ3MuIFRoZSBpbXBsaWNhdGlvbiBvZiB0aGF0IGlzIHRoYXQgaGFyZHdhcmUgb2ZmbG9hZCBiZWhhdmlvciBjb3VsZCBiZSBhZmZlY3RlZC4gRm9yIGluc3RhbmNlLCB0aGUgZnVuY3Rpb24gbWlnaHQgaW5jb3JyZWN0bHkgZXZhbHVhdGUgYHRjX3NraXBfc3coZmxhZ3MpYC5cblxuSG93ZXZlciwgdGhlIG5hdHVyZSBvZiB0aGlzIGJ1ZyBpcyBwdXJlbHkgbG9naWNhbC4gSXQgZGVhbHMgd2l0aCBpbmNvcnJlY3QgZmxhZyB1c2FnZSwgYW5kIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgbm8gaW5mb3JtYXRpb24gbGVha3MgYXQgcGxheS4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgYnVnLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBzaG91bGQgYmUgbW9yZSB0aGFuIGFkZXF1YXRlIHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBhcmlzaW5nIGZyb20gdGhpcy4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMgZml4LCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBvciBldmVuIHJlbGV2YW50LCBmb3IgaWRlbnRpZnlpbmcgYW55IGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTI1LCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxNDozMy44MjIxNDY4M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHUzMl9jaGFuZ2VgIHdoZXJlIHRoZSBgZmxhZ3NgIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gd2FzIGluY29ycmVjdGx5IHVzZWQgaW5zdGVhZCBvZiB0aGUgYHVzZXJmbGFnc2AgcGFyc2VkIGZyb20gdGhlIG5ldGxpbmsgYXR0cmlidXRlcyAoYFRDQV9VMzJfRkxBR1NgKS4gVGhpcyBjYXVzZWQgYHUzMl9yZXBsYWNlX2h3X2tub2RlYCB0byByZWNlaXZlIHRoZSB3cm9uZyBmbGFncywgcG90ZW50aWFsbHkgYWZmZWN0aW5nIGhhcmR3YXJlIG9mZmxvYWQgYmVoYXZpb3IgKGUuZy4sIGluY29ycmVjdGx5IGV2YWx1YXRpbmcgYHRjX3NraXBfc3coZmxhZ3MpYCkuIFRoaXMgaXMgYSBwdXJlIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIGhhcmR3YXJlIG9mZmxvYWQgZmxhZ3MgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBidXQgdGhpcyBzcGVjaWZpYyBidWcgaXMganVzdCBpbmNvcnJlY3QgZmxhZyB1c2FnZS4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdTMyX2NoYW5nZWAgd2hlcmUgdGhlIGBmbGFnc2AgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiB3YXMgaW5jb3JyZWN0bHkgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgdXNlcmZsYWdzYCBwYXJzZWQgZnJvbSB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIChgVENBX1UzMl9GTEFHU2ApLiBUaGlzIGNhdXNlZCBgdTMyX3JlcGxhY2VfaHdfa25vZGVgIHRvIHJlY2VpdmUgdGhlIHdyb25nIGZsYWdzLCBwb3RlbnRpYWxseSBhZmZlY3RpbmcgaGFyZHdhcmUgb2ZmbG9hZCBiZWhhdmlvciAoZS5nLiwgaW5jb3JyZWN0bHkgZXZhbHVhdGluZyBgdGNfc2tpcF9zdyhmbGFncylgKS4gVGhpcyBpcyBhIHB1cmUgbG9naWMgYnVnIHJlbGF0ZWQgdG8gaGFyZHdhcmUgb2ZmbG9hZCBmbGFncyBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMsIGJ1dCB0aGlzIHNwZWNpZmljIGJ1ZyBpcyBqdXN0IGluY29ycmVjdCBmbGFnIHVzYWdlLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxpkjd[1] Phase: Succeeded StartedAt: 2026-08-07 13:32:55 +0000 UTC FinishedAt: 2026-08-07 13:32:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 13:32:55 +0000 UTC FinishedAt: 2026-08-07 13:32:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2] Phase: Succeeded StartedAt: 2026-08-07 13:32:55 +0000 UTC FinishedAt: 2026-08-07 17:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 13:32:55 +0000 UTC FinishedAt: 2026-08-07 17:16:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","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-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 13:32:55 +0000 UTC FinishedAt: 2026-08-07 13:33:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 13:32:55 +0000 UTC FinishedAt: 2026-08-07 13:33:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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-workflowxpkjd/series-workflowxpkjd-convert-artifact-3263524251/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 13:33:05 +0000 UTC FinishedAt: 2026-08-07 13:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 13:33:05 +0000 UTC FinishedAt: 2026-08-07 13:53:33 +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:*028dfd2a-4118-4854-a12e-0638456d859a,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-workflowxpkjd/series-workflowxpkjd-convert-artifact-3263524251/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": "87889ffc-9b57-4fc3-9cac-42c3e8184439", "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-workflowxpkjd/series-workflowxpkjd-build-action-3552246233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 13:33:05 +0000 UTC FinishedAt: 2026-08-07 13:53:23 +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:*028dfd2a-4118-4854-a12e-0638456d859a,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-workflowxpkjd/series-workflowxpkjd-convert-artifact-3263524251/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": "87889ffc-9b57-4fc3-9cac-42c3e8184439", "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-workflowxpkjd/series-workflowxpkjd-build-action-3552246233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 13:53:33 +0000 UTC FinishedAt: 2026-08-07 13:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 13:53:33 +0000 UTC FinishedAt: 2026-08-07 13:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 13:53:33 +0000 UTC FinishedAt: 2026-08-07 13:53:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 13:53:33 +0000 UTC FinishedAt: 2026-08-07 13:53:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","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-workflowxpkjd/series-workflowxpkjd-convert-artifact-1654360818/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 13:53:43 +0000 UTC FinishedAt: 2026-08-07 13:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 13:53:43 +0000 UTC FinishedAt: 2026-08-07 13:56:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87889ffc-9b57-4fc3-9cac-42c3e8184439,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-workflowxpkjd/series-workflowxpkjd-build-action-3552246233/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-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 13:56:12 +0000 UTC FinishedAt: 2026-08-07 13:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 13:56:12 +0000 UTC FinishedAt: 2026-08-07 13:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 13:56:12 +0000 UTC FinishedAt: 2026-08-07 14:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 13:56:12 +0000 UTC FinishedAt: 2026-08-07 14:12:43 +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:*028dfd2a-4118-4854-a12e-0638456d859a,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-workflowxpkjd/series-workflowxpkjd-convert-artifact-1654360818/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": "14242273-3736-44df-97fb-c415271a5ad7", "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-workflowxpkjd/series-workflowxpkjd-build-action-2320075398/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 13:56:12 +0000 UTC FinishedAt: 2026-08-07 14:12:33 +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:*028dfd2a-4118-4854-a12e-0638456d859a,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-workflowxpkjd/series-workflowxpkjd-convert-artifact-1654360818/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": "14242273-3736-44df-97fb-c415271a5ad7", "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-workflowxpkjd/series-workflowxpkjd-build-action-2320075398/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 14:12:43 +0000 UTC FinishedAt: 2026-08-07 14:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 14:12:43 +0000 UTC FinishedAt: 2026-08-07 14:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 14:12:43 +0000 UTC FinishedAt: 2026-08-07 14:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 14:12:43 +0000 UTC FinishedAt: 2026-08-07 14:14:34 +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:*14242273-3736-44df-97fb-c415271a5ad7,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-workflowxpkjd/series-workflowxpkjd-build-action-2320075398/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-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 14:14:43 +0000 UTC FinishedAt: 2026-08-07 17:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 14:14:43 +0000 UTC FinishedAt: 2026-08-07 17:16:05 +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":["u32_change"],"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:*87889ffc-9b57-4fc3-9cac-42c3e8184439,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*14242273-3736-44df-97fb-c415271a5ad7,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-workflowxpkjd/series-workflowxpkjd-build-action-3552246233/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-workflowxpkjd/series-workflowxpkjd-build-action-2320075398/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 14:14:43 +0000 UTC FinishedAt: 2026-08-07 14:14:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 14:14:43 +0000 UTC FinishedAt: 2026-08-07 14:14:48 +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":["u32_change"],"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-workflowxpkjd/series-workflowxpkjd-convert-artifact-3221601607/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 14:14:43 +0000 UTC FinishedAt: 2026-08-07 14:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 14:14:43 +0000 UTC FinishedAt: 2026-08-07 14:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 14:14:43 +0000 UTC FinishedAt: 2026-08-07 14:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 14:14:53 +0000 UTC FinishedAt: 2026-08-07 17:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpkjd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"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":["u32_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7a127371ce5dc3d073cc69ba70145c2c420d8e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_U32"],"series_id":"2eb7a5b2-44dd-46b7-b64e-729da103ee09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 14:14:53 +0000 UTC FinishedAt: 2026-08-07 17:15:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87889ffc-9b57-4fc3-9cac-42c3e8184439,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*14242273-3736-44df-97fb-c415271a5ad7,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-workflowxpkjd/series-workflowxpkjd-build-action-3552246233/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-workflowxpkjd/series-workflowxpkjd-build-action-2320075398/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-workflowxpkjd/series-workflowxpkjd-convert-artifact-3221601607/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,}